CVE-2026-45192
Description
Apache Airflow REST API exposes sensitive connection extras fields not in redaction allowlist; upgrade to 3.2.2.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Apache Airflow REST API exposes sensitive connection extras fields not in redaction allowlist; upgrade to 3.2.2.
Vulnerability
The GET /api/v2/connections/{connection_id} endpoint in Apache Airflow returns the extra JSON blob of a Connection without masking fields that are not in the DEFAULT_SENSITIVE_FIELDS redaction allowlist. Affected versions prior to apache-airflow 3.2.2 allow authenticated users with Connection-read permission to retrieve sensitive credentials such as webhook_url, bearer, dsn, auth_header, and service_key in plaintext [1].
Exploitation
An attacker requires a valid Airflow user or API token with Connection-read permission. By sending a GET request to /api/v2/connections/{connection_id}, the response includes the full extra blob, and any credential field name not explicitly in DEFAULT_SENSITIVE_FIELDS is returned unmasked [1]. No additional privileges or user interaction is needed beyond the authenticated connection-read access.
Impact
Successful exploitation results in disclosure of sensitive credentials stored in Connection extras, including webhook URLs, bearer tokens, database DSNs, custom auth headers, and service keys. This compromises the confidentiality of credential material that may be reused across services [1].
Mitigation
Upgrade to apache-airflow 3.2.2 or later, which extends DEFAULT_SENSITIVE_FIELDS to include the five common field names [1]. As a defense-in-depth measure, store sensitive credential values in a secret-backend rather than inlined into Connection extra fields.
AI Insight generated on Jun 1, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
1Patches
232ac8ad51329Extend DEFAULT_SENSITIVE_FIELDS with common credential field names (#66673)
2 files changed · +23 −1
shared/secrets_masker/src/airflow_shared/secrets_masker/secrets_masker.py+6 −1 modified@@ -54,8 +54,11 @@ def to_dict(self) -> dict[str, Any]: ... "access_token", "api_key", "apikey", + "auth_header", "authorization", + "bearer", "connection_string", + "dsn", "passphrase", "passwd", "password", @@ -64,9 +67,11 @@ def to_dict(self) -> dict[str, Any]: ... "proxy_password", "proxies", "secret", + "service_account", + "service_key", "token", "keyfile_dict", - "service_account", + "webhook_url", } ) """Names of fields (Connection extra, Variable key name etc.) that are deemed sensitive"""
shared/secrets_masker/tests/secrets_masker/test_secrets_masker.py+17 −0 modified@@ -817,6 +817,23 @@ class TestShouldHideValueForKey: ("GOOGLE_API_KEY", True), ("GOOGLE_APIKEY", True), (1, False), + # webhook_url / bearer / dsn / auth_header / service_key in DEFAULT_SENSITIVE_FIELDS. + # Matching is case-insensitive substring on the lowercased key, so + # snake_case variants (and underscore-bearing prefixes/suffixes) are + # covered; PascalCase / camelCase variants without underscores are not. + ("webhook_url", True), + ("WEBHOOK_URL", True), + ("slack_webhook_url", True), + ("bearer", True), + ("Bearer", True), + ("auth_bearer", True), + ("dsn", True), + ("DSN", True), + ("auth_header", True), + ("AUTH_HEADER", True), + ("custom_auth_header", True), + ("service_key", True), + ("my_service_key", True), ], ) def test_hiding_defaults(self, key, expected_result):
cde4885818beUpdating release notes for 3.2.2rc3
2 files changed · +5 −4
RELEASE_NOTES.rst+3 −2 modified@@ -24,7 +24,7 @@ .. towncrier release notes start -Airflow 3.2.2 (2026-05-27) +Airflow 3.2.2 (2026-05-29) -------------------------- Significant Changes @@ -81,7 +81,8 @@ Significant Changes Bug Fixes ^^^^^^^^^ - +- Fix ``Callback.handle_event`` triggerer crash when OpenTelemetry metrics receive dict typed tag values (#67527) (#67529) +- UI: Rewrite ``modulepreload hrefs`` to the api-server static path (#67548) (#67556) - Correctly pre-allocate ``external_executor_id`` with multiple executors on PostgreSQL (#67388) (#67458) - Return raw import-error stacktrace when a Dag file has no registered Dag (#67465) (#67478) - UI: Fix Expand/Collapse All on XComs and Audit Log JSON cells (#67316) (#67361)
reproducible_build.yaml+2 −2 modified@@ -1,2 +1,2 @@ -release-notes-hash: 6407b48d1054fe3ce68c09bf4435d91d -source-date-epoch: 1779745327 +release-notes-hash: 504288db9a9dc13a0db859232fab98d0 +source-date-epoch: 1779811737
Vulnerability mechanics
No source-code context for this CVE — mechanics is only generated when we can read the actual fix diff. Without that, the four sections (root cause, attack vector, affected code, fix) would be speculation rather than analysis.
References
3News mentions
0No linked articles in our index yet.