
CVE-2026-32794: Обход проверки TLS-сертификатов в Apache Airflow Databricks Provider
Ключевые слова: TLS, проверка сертификатов, MITM, Kubernetes, Databricks, OAuth, CWE-295, Apache Airflow
Пакет apache-airflow-providers-databricks отключает проверку TLS-сертификатов при взаимодействии с сервером API Kubernetes во время федеративного обмена токенами. И синхронный, и асинхронный пути кода используют verify=False / ssl=False, что позволяет любому злоумышленнику, имеющему сетевой доступ внутри кластера K8s, выполнить MITM-атаку на соединение и похитить как JWT сервисного аккаунта внутри кластера, так и OAuth-токен Databricks.
В комментариях к коду утверждается: «K8s in-cluster использует самоподписанные сертификаты», — но это неверно. Kubernetes специально для этой цели предоставляет пакет CA по пути /var/run/secrets/kubernetes.io/serviceaccount/ca.crt.
Строка 699 (синхронный путь) — _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,
)
Строка 764 (асинхронный путь) — _a_get_k8s_token_request_api():
async with self._session.post(
token_request_url,
...
ssl=False, # K8s in-cluster uses self-signed certs
)
В комментарии сказано, что «K8s in-cluster использует самоподписанные сертификаты», но Kubernetes предоставляет доверенный пакет CA по стандартному пути. Правильный подход — использовать этот пакет CA для проверки, а не отключать 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: apache/airflow#63704
Исправление заменяет verify=False на verify=K8S_CA_CERT_PATH с использованием стандартного внутрикластерного пакета CA Kubernetes, а ssl=False — на корректно настроенный SSL-контекст.
| Дата | Событие |
|---|---|
| 2026-03-15 | Уязвимость сообщена на [email protected] |
| 2026-03-15 | Jarek Potiuk (коммиттер Airflow) подтвердил получение отчёта |
| 2026-03-16 | Присвоен CVE-2026-32794; открыт исправляющий PR #63704 |
Данное уведомление опубликовано в образовательных и защитных целях в соответствии с принципами ответственного раскрытия уязвимостей. Предоставленная информация призвана помочь разработчикам и командам безопасности понять и устранить уязвимость. Не используйте эту информацию для несанкционированного тестирования или во вредоносных целях.
Полное описание этого проекта, методология и связанные исследования находятся здесь:
Автор — Kai Aizen, независимый исследователь в области наступательной безопасности.
snailsploit.com · Исследования · Фреймворки · GitHub · LinkedIn · ResearchGate · X/Twitter
Та же атака. Другая среда.
| Поле | Значение |
|---|
| CVE | CVE-2026-32794 |
| CWE | CWE-295: Некорректная проверка сертификатов |
| Пакет | apache-airflow-providers-databricks (pip) |
| Затронутые версии | Все версии с обменом токенами K8s |
| Исправленная версия | Ожидается (PR #63704) |
| Компонент | providers/databricks/src/airflow/providers/databricks/hooks/databricks_base.py |
| Аспект | Описание |
|---|
| Прямое воздействие | Перехват MITM JWT K8s и OAuth-токенов Databricks |
| Поверхность атаки | Любой pod в пределах сетевого окружения того же кластера |
| Кража учётных данных | Раскрытие как JWT сервисного аккаунта K8s, так и токенов Databricks |
| Горизонтальное перемещение | Похищенные токены дают доступ и к API K8s, и к рабочей области Databricks |
| Затронутые пользователи | Любые развёртывания Airflow, использующие провайдер Databricks с обменом токенами K8s |