{"id":30447,"date":"2026-09-29T20:32:04","date_gmt":"2026-09-29T12:32:04","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81862"},"modified":"2026-09-29T20:32:04","modified_gmt":"2026-09-29T12:32:04","slug":"cve-2026-81862","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-81862","title":{"rendered":"CVE-2026-81862 &#8211; Apache Airflow&#8217;s Teradata provider embedded cloud storage credentials directly into SQL st"},"content":{"rendered":"<p>Apache Airflow&#8217;s Teradata provider embedded cloud storage credentials directly into SQL statements. `S3ToTeradataOperator` and `AzureBlobStorageToTeradataOperator` interpolate the source bucket&#8217;s credentials as plain string literals into the `CREATE MULTISET TABLE &#8230; LOCATION` statement whenever the bucket is private and no `teradata_authorization_name` is configured \u2014 which is the default credential path for both operators. The statement is then logged and executed, so the credentials reach two places outside the operator&#8217;s control.<\/p>\n<p>The two operators expose different credentials through different channels, and deployments should check both. `S3ToTeradataOperator` takes its values from `s3_hook.get_credentials()`, which under an instance profile or IRSA returns runtime AWS credentials that were never registered with Airflow&#8217;s secrets masker \u2014 and the STS session token is runtime-generated and therefore unmasked even when an AWS connection is configured. Those credentials appear **in the Airflow task log**, readable by any user with log-view permission on the Dag. `AzureBlobStorageToTeradataOperator` takes its storage account key from the connection, so the masker usually redacts the task-log copy; its exposure is the Teradata side. **Both** operators write the credentials into Teradata&#8217;s DBQL query logs and live monitoring views, where Airflow&#8217;s masking never applies and the values persist for that system&#8217;s log retention period.<\/p>\n<p>Affects deployments using either operator against a private bucket or container without a Teradata `AUTHORIZATION` object. Users are advised to upgrade to `apache-airflow-providers-teradata` `3.7.0` or later, which keeps the credential-bearing statement out of the Airflow task log. Upgrading does not remove the credentials from Teradata&#8217;s query logs and monitoring views, which Airflow cannot redact: users should configure `teradata_authorization_name` with a Teradata `AUTHORIZATION` object so that credentials are never inlined, and should rotate any credentials previously used through the inline path.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Airflow&#8217;s Teradata provider embedded cloud storage credentials directly into SQL statements. `S3ToTeradataOperator` and `AzureBlobStorageToTeradataOperator` interpolate the source bucket&#8217;s cred<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-30447","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/30447","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=30447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=30447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=30447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}