
CVE-2026-32794: Bypass della verifica dei certificati TLS in Apache Airflow Databricks Provider
Parole chiave: TLS, verifica dei certificati, MITM, Kubernetes, Databricks, OAuth, CWE-295, Apache Airflow
Il pacchetto apache-airflow-providers-databricks disabilita la verifica dei certificati TLS quando comunica con il server API di Kubernetes durante lo scambio di token federato. Sia il percorso di codice sincrono che quello asincrono utilizzano verify=False / ssl=False, consentendo a qualsiasi attaccante con accesso di rete all'interno del cluster K8s di intercettare la connessione (MITM) e rubare sia il JWT dell'account di servizio in-cluster sia il token OAuth di Databricks.
I commenti nel codice affermano che "K8s in-cluster utilizza certificati autofirmati", ma ciò non è corretto. Kubernetes fornisce un bundle CA in /var/run/secrets/kubernetes.io/serviceaccount/ca.crt proprio a questo scopo.
Riga 699 (percorso sincrono) - _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,
)
Riga 764 (percorso asincrono) - _a_get_k8s_token_request_api():
async with self._session.post(
token_request_url,
...
ssl=False, # K8s in-cluster uses self-signed certs
)
Il commento afferma che "K8s in-cluster utilizza certificati autofirmati", ma Kubernetes fornisce un bundle CA attendibile in un percorso ben noto. L'approccio corretto è utilizzare quel bundle CA per la verifica piuttosto che disabilitare completamente TLS.
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 correttiva: apache/airflow#63704
Il fix sostituisce verify=False con verify=K8S_CA_CERT_PATH utilizzando il bundle CA standard in-cluster di Kubernetes e sostituisce ssl=False con un contesto SSL configurato correttamente.
| Data | Evento |
|---|---|
| 2026-03-15 | Vulnerabilità segnalata a [email protected] |
| 2026-03-15 | Jarek Potiuk (committer di Airflow) ha preso in carico la segnalazione |
| 2026-03-16 | CVE-2026-32794 assegnato; aperta la PR correttiva #63704 |
Questa segnalazione è pubblicata a scopo educativo e difensivo secondo i principi della divulgazione responsabile. Le informazioni fornite hanno lo scopo di aiutare sviluppatori e team di sicurezza a comprendere e correggere la vulnerabilità. Non utilizzare queste informazioni per test non autorizzati o scopi dannosi.
Il writeup completo di questo progetto, la metodologia e le ricerche correlate sono disponibili su:
Creato da Kai Aizen — ricercatore indipendente di sicurezza offensiva.
snailsploit.com · Ricerca · Framework · GitHub · LinkedIn · ResearchGate · X/Twitter
Stesso attacco. Substrato diverso.
| Campo | Valore |
|---|
| CVE | CVE-2026-32794 |
| CWE | CWE-295: Validazione Impropria dei Certificati |
| Pacchetto | apache-airflow-providers-databricks (pip) |
| Versioni Interessate | Tutte le versioni con scambio di token K8s |
| Versione Patchata | In sospeso (PR #63704) |
| Componente | providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py |
| Aspetto | Descrizione |
|---|
| Impatto Diretto | Intercettazione MITM dei token JWT K8s e OAuth di Databricks |
| Superficie d'Attacco | Qualsiasi pod all'interno della rete del cluster |
| Furto di Credenziali | Sia i token dell'account di servizio K8s che quelli di Databricks sono esposti |
| Movimento Laterale | I token rubati consentono l'accesso sia all'API K8s che al workspace di Databricks |
| Utenti Interessati | Qualsiasi distribuzione Airflow che utilizza il provider Databricks con scambio di token K8s |