{"id":30449,"date":"2026-09-29T20:32:04","date_gmt":"2026-09-29T12:32:04","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81930"},"modified":"2026-09-29T20:32:04","modified_gmt":"2026-09-29T12:32:04","slug":"cve-2026-81930","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81930","title":{"rendered":"CVE-2026-81930 &#8211; Apache Airflow&#8217;s Snowflake provider did not validate the connection&#8217;s `account` and `regio"},"content":{"rendered":"<p>Apache Airflow&#8217;s Snowflake provider did not validate the connection&#8217;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.<\/p>\n<p>The provider sends that request with an `Authorization: Bearer` header carrying a JWT minted from the connection&#8217;s private key, or the configured OAuth or programmatic access token. A user who can edit the Snowflake connection but cannot read its secrets \u2014 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 \u2014 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.<\/p>\n<p>Affects deployments where Snowflake connections are editable by users who are not trusted with the connection&#8217;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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Airflow&#8217;s Snowflake provider did not validate the connection&#8217;s `account` and `region` fields before interpolating them into request URLs. The SQL API endpoint is built as `https:\/\/{account}.sno<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-30449","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/30449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=30449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30449"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}