
CVE-2026-32794: Bypass de verificación de certificados TLS en Apache Airflow Databricks Provider
Palabras clave: TLS, verificación de certificados, MITM, Kubernetes, Databricks, OAuth, CWE-295, Apache Airflow
El paquete apache-airflow-providers-databricks desactiva la verificación de certificados TLS al comunicarse con el servidor de API de Kubernetes durante el intercambio federado de tokens. Tanto la ruta de código síncrona como la asíncrona utilizan verify=False / ssl=False, lo que permite que cualquier atacante con acceso a la red dentro del clúster K8s realice un ataque MITM en la conexión y robe tanto el JWT de la cuenta de servicio dentro del clúster como el token OAuth de Databricks.
Los comentarios del código afirman que «K8s in-cluster usa certificados autofirmados», pero esto es incorrecto. Kubernetes proporciona un paquete de CA en /var/run/secrets/kubernetes.io/serviceaccount/ca.crt específicamente para este propósito.
Línea 699 (ruta síncrona) - _get_k8s_token_request_api():
resp = requests.post(
token_request_url,
headers={
"Authorization": f"Bearer {in_cluster_token}",
"Content-Type": "application/json",
},
json=self._build_k8s_token_request_payload(audience, expiration_seconds),
verify=False, # K8s in-cluster uses self-signed certs
timeout=self.token_timeout_seconds,
)
Línea 764 (ruta asíncrona) - _a_get_k8s_token_request_api():
async with self._session.post(
token_request_url,
...
ssl=False, # K8s in-cluster uses self-signed certs
)
El comentario dice «K8s in-cluster usa certificados autofirmados», pero Kubernetes proporciona un paquete de CA de confianza en una ruta conocida. El enfoque correcto es usar ese paquete de CA para la verificación en lugar de desactivar TLS por completo.
K8S_CA_CERT_PATH = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
# Sync
resp = requests.post(token_request_url, ..., verify=K8S_CA_CERT_PATH)
# Async
ssl_ctx = ssl.create_default_context(cafile=K8S_CA_CERT_PATH)
async with self._session.post(token_request_url, ..., ssl=ssl_ctx)
+----------------------------------------------------------+
| 1. ATTACKER GAINS POD ACCESS |
| Compromised container or network namespace access |
+---------------------------+------------------------------+
|
v
+----------------------------------------------------------+
| 2. MITM THE TOKEN EXCHANGE |
| ARP spoof / DNS hijack within cluster network |
| Serve self-signed cert (accepted due to verify=False) |
+---------------------------+------------------------------+
|
v
+----------------------------------------------------------+
| 3. INTERCEPT CREDENTIALS |
| - K8s service account JWT (Authorization header) |
| - Databricks OAuth token (response body) |
+---------------------------+------------------------------+
|
v
+----------------------------------------------------------+
| 4. LATERAL MOVEMENT |
| Use stolen tokens for K8s API + Databricks access |
+----------------------------------------------------------+
PR de corrección: apache/airflow#63704
La corrección sustituye verify=False por verify=K8S_CA_CERT_PATH usando el paquete de CA estándar dentro del clúster de Kubernetes, y reemplaza ssl=False por un contexto SSL configurado correctamente.
| Fecha | Evento |
|---|---|
| 2026-03-15 | Vulnerabilidad notificada a [email protected] |
| 2026-03-15 | Jarek Potiuk (committer de Airflow) confirmó el informe |
| 2026-03-16 | Se asignó CVE-2026-32794; se abrió el PR de corrección #63704 |
Este aviso se publica con fines educativos y defensivos bajo los principios de divulgación responsable. La información proporcionada tiene como objetivo ayudar a desarrolladores y equipos de seguridad a comprender y remediar la vulnerabilidad. No utilice esta información para pruebas no autorizadas o fines maliciosos.
El informe completo de este proyecto, la metodología y la investigación relacionada están disponibles en:
Creado por Kai Aizen — investigador independiente de seguridad ofensiva.
snailsploit.com · Investigación · Frameworks · GitHub · LinkedIn · ResearchGate · X/Twitter
El mismo ataque. Distinto sustrato.
| Campo | Valor |
|---|
| CVE | CVE-2026-32794 |
| CWE | CWE-295: Validación incorrecta de certificados |
| Paquete | apache-airflow-providers-databricks (pip) |
| Versiones afectadas | Todas las versiones con intercambio de tokens K8s |
| Versión corregida | Pendiente (PR #63704) |
| Componente | providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py |
| Aspecto | Descripción |
|---|
| Impacto directo | Interceptación MITM de los tokens JWT de K8s y OAuth de Databricks |
| Superficie de ataque | Cualquier pod dentro de la misma red del clúster |
| Robo de credenciales | Quedan expuestos tanto el token de la cuenta de servicio de K8s como el de Databricks |
| Movimiento lateral | Los tokens robados permiten el acceso tanto a la API de K8s como al workspace de Databricks |
| Usuarios afectados | Cualquier despliegue de Airflow que use el proveedor de Databricks con intercambio de tokens K8s |