Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-44590 — Эксплойт-доказательство концепции для CVE-2026-44590 — инъекция команд в GitHub Actions workflow Sherlock, позволяющая выполнить произвольный код (RCE) и похитить GITHUB_TOKEN через pull_request_target. | Kitploit
Инструменты/GitHubGitHub/astaruf/cve-2026-44590
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийБезопасность Цепочки ПоставокОбучение и ОбразованиеRed Teaming
GitHubastaruf/cve-2026-44590

CVE-2026-44590

Эксплойт-доказательство концепции для CVE-2026-44590 — инъекция команд в GitHub Actions workflow Sherlock, позволяющая выполнить произвольный код (RCE) и похитить GITHUB_TOKEN через pull_request_target.

Репозиторий
215 месяцев назадЕщё не проверено
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-44590 - sherlock-project/sherlock CI - RCE через pull_request_target Injection → Компрометация цепочки поставок

Обнаружено и сообщено: Astaruf

Полное описание: https://nstsec.com/en/posts/sherlock-rce-pull-request-target-cve-2026-44590/

Консультация вышестоящего проекта: sherlock-project/sherlock GHSA advisory

Запись NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-44590

Запись CVE: https://www.cve.org/CVERecord?id=CVE-2026-44590


Этот репозиторий содержит proof-of-concept для CVE-2026-44590 — инъекции команд в GitHub Actions workflow validate_modified_targets.yml проекта sherlock-project/sherlock. Любой пользователь GitHub может открыть pull request, который запускает произвольное выполнение команд в привилегированном контексте CI, похитить GITHUB_TOKEN из workflow и автоматически одобрить вредоносный PR — всё это без какого-либо участия человека.

Для полного технического описания (анализ первопричины, пошаговая эксплуатация, обсуждение последствий и глава о том, что атакующий мог бы сделать в реальных сценариях) см. запись в блоге:

nstsec.com/en/posts/sherlock-rce-pull-request-target-cve-2026-44590

Этот README посвящён исключительно скрипту PoC: что он делает, как его запустить и чего ожидать.

О poc.py

poc.py — это единый автономный Python-скрипт (только stdlib), который автоматизирует всю цепочку атаки от начала до конца:

  • создаёт форк sherlock-project/sherlock, если это необходимо
  • (опционально) откатывает master форка к коммиту до исправления, чтобы ошибку можно было воспроизвести даже после исправления в вышестоящем проекте
  • запускает OAST-слушатель (interactsh-client)
  • создаёт и отправляет вредоносную ветку PR
  • запускает уязвимый workflow
  • извлекает GITHUB_TOKEN из OAST-колбэка (в режиме --mode exfil) и декодирует его в открытом виде
  • использует украденный токен для автоматического одобрения того же PR через GitHub API
  • выводит чёткий итоговый вердикт: VULNERABILITY CONFIRMED или FIX VERIFIED
  • выполняет очистку после себя (удаляет ветку PoC, завершает interactsh-client)

Требуется ровно один ручной шаг (нажатие баннера GitHub «I understand my workflows» при первом запуске для каждого форка), поскольку не существует публичного API для его отклонения. Скрипт обнаруживает этот случай и приостанавливается с понятным запросом.

Быстрый старт

Проверка работы исправления в вышестоящем проекте (поведение по умолчанию)

python3 poc.py --fork-owner <ваше-имя-пользователя-github>

Создаёт форк репозитория (при необходимости), синхронизирует с вышестоящим проектом (исправленный master), открывает вредоносный PR, запускает цепочку атаки и сообщает FIX VERIFIED, поскольку исправленный workflow блокирует полезную нагрузку до выполнения каких-либо shell-команд.

Воспроизведение исходной уязвимости

python3 poc.py --fork-owner <ваше-имя-пользователя-github> --vulnerable

То же, что и выше, но сначала откатывает master форка к коммиту до исправления (271608fb). Ожидаемый вердикт: VULNERABILITY CONFIRMED.

Демонстрация полного воздействия (эксфильтрация токена + автоматическое одобрение PR)

python3 poc.py --fork-owner <ваше-имя-пользователя-github> --vulnerable --mode exfil

Полезная нагрузка exfil выгружает git config --list на OAST и засыпает на 180 секунд, чтобы поддерживать workflow (и, соответственно, GITHUB_TOKEN) активным. Пока workflow спит, скрипт извлекает токен из журнала OAST, декодирует его и немедленно вызывает GitHub API для одобрения PR. В итоге PR оказывается одобренным от имени github-actions[bot].

Требования

  • Python 3.8+ (без сторонних зависимостей, только stdlib)
  • gh (GitHub CLI), авторизованный:
    gh auth login
    
  • git
  • interactsh-client (опционально, но рекомендуется). При установке скрипт автоматически запускает его и проверяет колбэк внутри скрипта:
    go install github.com/projectdiscovery/interactsh/cmd/interactsh-client@latest
    
    Если вы предпочитаете использовать собственную OAST-конечную точку (Burp Collaborator, oast.fun через веб-интерфейс, requestbin и т. д.), передайте её через --oast-url, и шаг автоматической проверки будет пропущен.

Скрипту не требуется заранее существующий форк — он создаёт его автоматически.

Режимы

--mode harmless (по умолчанию)

Полезная нагрузка — это один curl POST со статической строкой подтверждения. Никакие секреты не считываются, никакие API-вызовы не выполняются, единственный побочный эффект — OAST-колбэк. Используйте этот режим, чтобы подтвердить наличие уязвимости без раскрытия каких-либо учётных данных.

--mode exfil

Полезная нагрузка выгружает git config --list (который содержит GITHUB_TOKEN в base64-кодировке в http.https://github.com/.extraheader) на OAST, а затем засыпает на 180 секунд. Затем скрипт:

  1. Опрашивает журнал OAST, пока не поступит выгрузка.
  2. Извлекает base64-блок с помощью регулярного выражения.
  3. Декодирует его и выводит учётные данные в открытом виде: x-access-token:ghs_XXXXXXXX....
  4. Удаляет префикс x-access-token: и использует исходный токен для вызова POST /repos/<fork>/pulls/<n>/reviews со стандартной полезной нагрузкой одобрения ({"event":"APPROVE","body":"All checks passed. LGTM!"}).
  5. PR отображается как одобренный от имени github-actions[bot], неотличимый от легитимной CI-автоматизации.

После фиксации одобрения скрипт пропускает оставшуюся часть 180-секундного ожидания workflow, поскольку цепочка атаки завершена, и ожидание тайм-аута раннера ничего не добавляет.

Параметры

ФлагОписание
--fork-owner <user>Обязательный. Имя пользователя GitHub, которому принадлежит (или будет принадлежать) форк
--fork-name <name>Имя репозитория форка (по умолчанию: sherlock)
--oast-url <url>OAST-конечная точка, принимающая колбэк. Если не указан, скрипт автоматически запускает interactsh-client и выполняет вердикт внутри скрипта
--mode harmless|exfilТип полезной нагрузки (по умолчанию: harmless)
--vulnerableПринудительный сброс master форка к коммиту до исправления (271608fb) перед запуском. Подразумевает --no-sync
--no-syncПропустить синхронизацию форка с вышестоящим проектом (полезно при тестировании зафиксированного коммита)
--base-branch <name>Целевая ветка PR в форке (по умолчанию: master)
--keep-branchНе удалять ветку PoC после завершения
--no-pollПропустить опрос запуска workflow и выйти после создания PR

Почему PR направлен на форк, а не на вышестоящий репозиторий

По замыслу PoC открывает PR из ветки в форке на master того же форка. Он не направлен напрямую на sherlock-project/sherlock. Для этого есть две причины.

1. Избежание публичного раскрытия эксплойта

Скачать инструмент