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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/abhayclasher/cve-2026-39866
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийКомандование и УправлениеОбучение и ОбразованиеЛаборатории и Практика
GitHubabhayclasher/cve-2026-39866

CVE-2026-39866

Лабораторный стенд proof-of-concept, демонстрирующий внедрение команд в workflow dispatch GitHub Actions (CVE-2026-39866). Запускает уязвимую и исправленную версии бок о бок для образовательного анализа.

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

Популярное

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

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

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

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

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

CVE-2026-39866 — Внедрение команд через неэкранированный ввод в workflow dispatch

CVE GHSA CWE-78 Patched

Лабораторный стенд для проверки концепции внедрения команд в GitHub Actions workflow dispatch


Назначение

CVE-2026-39866 — это ошибка внедрения команд в release workflow GitHub Actions проекта Lawnchair. Файл release_update.yml передаёт пользовательский ввод напрямую в bash без экранирования, поэтому злоумышленник может внедрять команды. Этот репозиторий запускает уязвимую и исправленную версии бок о бок.

Краткие факты

ПолеЗначение
CVE IDCVE-2026-39866
GHSAGHSA-9prc-pp2c-3427
CWECWE-78 (Некорректная нейтрализация специальных элементов, используемых в команде ОС)
ПродуктLawnchairLauncher/lawnchair
ЗатронутоВсе версии ниже fcba413
Исправленоfcba413
ОбнаружениеAbhay Kumar (@abhayclasher)

Детали уязвимости

Уязвимость существует в файле workflow release_update.yml. Действие принимает параметр artifactName и передаёт его напрямую в bash-команду без экранирования.

root@kitploit:~
- name: Rename artifact
  run: mv ${{ inputs.artifactName }}.zip lawnchair.zip

GitHub Actions подставляет значение переменной в строку до того, как её выполнит оболочка. Без кавычек вокруг ${{ inputs.artifactName }} оболочка интерпретирует пробелы и точки с запятой как разделители команд.

Если злоумышленник передаст file.zip; touch pwned.txt # в качестве artifactName:

Как GitHub Actions это разбирает: ${{ inputs.artifactName }} → file.zip; touch pwned.txt #

Как оболочка это выполняет:

root@kitploit:~
mv file.zip; touch pwned.txt #.zip lawnchair.zip

Оболочка выполняет mv file.zip, затем touch pwned.txt, а остальное игнорирует как комментарий.

Воздействие

  • Выполнение произвольных команд на раннере GitHub Actions.
  • Кража секретов репозитория, доступных в окружении раннера (например, GITHUB_TOKEN или ключей подписи релизов).
  • Изменение артефактов релиза до их загрузки.
  • Переход в подключённую инфраструктуру, если раннер является self-hosted.

Системные требования

  • Node.js 18 или новее
  • Docker (опционально, для контейнерной лаборатории)
  • 500 МБ свободного места на диске

Установка

Вариант 1: Запуск напрямую

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-39866.git
cd CVE-2026-39866/app
npm install
node server.js

Вариант 2: Запуск с Docker

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-39866.git
cd CVE-2026-39866
docker compose up -d

Использование

После запуска сервера посетите эти URL:

URLОписание
http://localhost:3000/workflow/vulnerableУязвимый workflow — внедрение команд выполняется при отправке
http://localhost:3001/workflow/patchedТот же workflow с применённым патчем fcba413

Уязвимая версия выполнит вашу внедрённую команду на раннере. Исправленная версия обрабатывает ввод как литеральную строку.

Вы также можете запустить автономный PoC:

root@kitploit:~
cd poc
node exploit.js

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

Как это работает

Поток обнаружения

root@kitploit:~
1. Злоумышленник контролирует входной параметр artifactName
2. GitHub Actions подставляет ${{ inputs.artifactName }} в YAML
3. Шаг run передаёт это в bash
4. Bash видит неэкранированные специальные символы и трактует их как синтаксис команд
5. Команды выполняются с привилегиями окружения раннера

Цепочка атаки

root@kitploit:~
┌────────────────────────────────────────────────────┐
│  1. Вредоносный ввод:                               │
│                                                     │
│     artifactName = "file.zip; id #"                │
│                                                     │
│  2. GitHub Actions подставляет в YAML:             │
│                                                     │
│     run: mv file.zip; id #.zip lawnchair.zip       │
│                                                     │
│  3. Bash видит:                                     │
│     - mv file.zip                                   │
│     - id                    <-- Произвольная команда│
│     - #.zip lawnchair.zip (игнорируется)           │
│                                                     │
│  4. Оболочка выполняет произвольную команду        │
└────────────────────────────────────────────────────┘

Исправление

Версия fcba413 добавляет экранирование кавычками вокруг интерполируемой переменной:

root@kitploit:~
- name: Rename artifact
  run: mv "${{ inputs.artifactName }}.zip" lawnchair.zip

Кавычки не позволяют оболочке разбирать специальные символы. Полезная нагрузка остаётся обработанной как литеральная строка имени файла.

Лучшая практика — использовать переменные окружения для полной изоляции пользовательского ввода:

root@kitploit:~
- name: Rename artifact
  env:
    ARTIFACT_NAME: ${{ inputs.artifactName }}
  run: mv "$ARTIFACT_NAME.zip" lawnchair.zip

Посмотреть полный коммит: fcba413

Структура проекта

root@kitploit:~
CVE-2026-39866/
├── README.md               # Этот файл
├── docker-compose.yml      # Конфигурация Docker-лаборатории
├── app/
│   ├── Dockerfile          # Конфигурация сборки контейнера
│   ├── package.json        # Зависимости Node.js
│   └── server.js           # Симуляция уязвимого + исправленного workflow раннера
└── poc/
    └── exploit.js          # Автономный минимальный proof-of-concept

Ссылки

  • NVD — CVE-2026-39866
  • GitHub Security Advisory
  • Коммит с исправлением
  • CWE-78

Сообщено Abhay Kumar. Этот репозиторий предназначен только для локального образовательного использования. Не разворачивайте уязвимый сервер в публичной сети.

Только в образовательных целях — используйте в изолированных средах

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