CVE-2026-81930
Apache Airflow Snowflake provider: Unvalidated account field redirects SQL API bearer token off-domain
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
6.3
Apache Airflow Snowflake provider: Unvalidated account field redirects SQL API bearer token off-domain
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
- Record
CVE-2026-81930- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-522
- Updated
- 2026-11-02
EUVDEUVD-2026-88696
6.3
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
- Record
EUVD-2026-88696- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-x776-f7fc-mx6q
6.3
Apache Airflow's Snowflake provider did not validate the connection's `account` and `region`...
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
- Record
GHSA-x776-f7fc-mx6q- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-522
- Updated
- 2026-11-02
NVD
6.3
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
- Record
CVE-2026-81930- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-522
- Updated
- 2026-11-02
OSV
6.3
Apache Airflow Snowflake provider: Unvalidated account field redirects SQL API bearer token off-domain
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
- Record
CVE-2026-81930- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-522
- Updated
- 2026-11-02
OSVPYSEC-2026-4188
6.3
Apache Airflow's Snowflake provider did not validate the connection's account and region fields before interpolating them into request URLs. The SQL API endpoint is built as https://{account}.snowflakecomputing.com/api/v2/statements, so an account value containing /, ? or # demotes the intended domain to a path, query or fragment and leaves the attacker in control of the request host.
The provider sends that request with an Authorization: Bearer header carrying a JWT minted from the connection's private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets — Airflow gives connection-configuration users write-only access to stored credentials, and a private_key_file lives on the worker rather than in the connection — can therefore cause a valid token for the account to be delivered to a host of their choosing and replay it against the genuine Snowflake endpoint. No Dag-authoring ability is required: the attacker edits the connection and waits for an existing Dag to use it. The same unvalidated value was also used to build the OAuth token-request URL and the Cortex Agent base URL.
Affects deployments where Snowflake connections are editable by users who are not trusted with the connection's credentials. Users are advised to upgrade to apache-airflow-providers-snowflake 6.18.0 or later, which rejects account and region values containing anything other than letters, digits, ., _ and - in every URL the provider builds from them.
- Record
PYSEC-2026-4188- CVSS 3.1
- 6.3 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
apache-airflow-providers-snowflakePyPI |
before 6.18.0, plus listed versions 1.0.01.0.0b11.0.0b21.0.0rc11.1.0 Show 45 moreShow less1.1.0rc11.1.11.1.1rc11.1.1rc21.2.01.2.0rc11.3.01.3.0rc12.0.02.0.0rc12.0.0rc22.0.0rc32.1.02.1.0rc12.1.0rc22.1.12.1.1rc12.2.02.2.0rc12.3.02.3.0rc12.3.12.3.1rc12.4.02.4.0rc12.5.02.5.0rc12.5.0rc22.5.12.5.1rc12.5.22.5.2rc12.6.02.6.0rc12.7.02.7.0rc13.0.03.0.0rc13.0.0rc23.1.03.1.0rc13.2.03.2.0rc13.2.0rc23.2.0rc3 |
6.18.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-81930 is a medium vulnerability (CVSS 6.3) in Apache Apache-airflow-providers-snowflake, published September 29, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 37th percentile. Fixed in apache-airflow-providers-snowflake 6.18.0.
References
github.com/apache/airflow/pull/72174
lists.apache.org/thread/324jm2mxd5x4nq85jfw1ostz94xwzrmk
openwall.com/lists/oss-security/2026/09/29/12
nvd.nist.gov/vuln/detail/CVE-2026-81930
github.com/advisories/GHSA-x776-f7fc-mx6q
pypi.python.org
github.com/CVEProject/cvelistV5/tree/main/cves/2026/81xxx/CVE-2026-81930.json
Left out here: 140 versions. The JSON record has them.