171 lines
8.1 KiB
JSON
171 lines
8.1 KiB
JSON
{
|
|
"dataType": "CVE_RECORD",
|
|
"dataVersion": "5.2",
|
|
"cveMetadata": {
|
|
"cveId": "CVE-2026-45426",
|
|
"assignerOrgId": "f0158376-9dc2-43b6-827c-5f631a4d8d09",
|
|
"state": "PUBLISHED",
|
|
"assignerShortName": "apache",
|
|
"dateReserved": "2026-05-12T03:06:09.587Z",
|
|
"datePublished": "2026-06-01T07:47:16.636Z",
|
|
"dateUpdated": "2026-11-03T06:57:11.563Z"
|
|
},
|
|
"containers": {
|
|
"cna": {
|
|
"providerMetadata": {
|
|
"orgId": "f0158376-9dc2-43b6-827c-5f631a4d8d09",
|
|
"shortName": "apache",
|
|
"dateUpdated": "2026-11-03T06:57:11.563Z"
|
|
},
|
|
"title": "Apache Airflow: Log server JWT authorization bypass via Python lstrip() character stripping allows cross-Dag log access",
|
|
"problemTypes": [
|
|
{
|
|
"descriptions": [
|
|
{
|
|
"description": "CWE-863: Incorrect Authorization",
|
|
"lang": "en",
|
|
"cweId": "CWE-863",
|
|
"type": "CWE"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"source": {
|
|
"discovery": "UNKNOWN"
|
|
},
|
|
"affected": [
|
|
{
|
|
"vendor": "Apache Software Foundation",
|
|
"product": "Apache Airflow",
|
|
"collectionURL": "https://pypi.python.org",
|
|
"packageName": "apache-airflow-core",
|
|
"versions": [
|
|
{
|
|
"status": "affected",
|
|
"version": "3.0.0",
|
|
"lessThan": "3.2.2",
|
|
"versionType": "semver"
|
|
}
|
|
],
|
|
"defaultStatus": "unaffected",
|
|
"packageURL": "pkg:pypi/apache-airflow-core"
|
|
}
|
|
],
|
|
"descriptions": [
|
|
{
|
|
"value": "Exploitation requires the attacker to already be an authenticated Airflow worker holding a valid Log-server JWT issued for at least one Dag. Apache Airflow's Log server authorized JWT tokens against Dag IDs by applying Python's `str.lstrip()` to the requested path segment when verifying the JWT's `sub` claim. `str.lstrip()` strips any of a *set* of characters from the left (not a prefix), so a JWT issued for a Dag named e.g. `dag_a` would authorize log access to any other Dag whose name began with any subset of the characters `{d, a, g, _}` (e.g. `dag_attacker`, `aaaa_target`, `_dag_secret`). Such an authenticated worker could enumerate and read worker logs of other Dags whose names happened to share that character-class prefix, leaking task output and error traces beyond the documented per-Dag isolation boundary. Affects deployments relying on per-Dag log-access scoping (multi-team, shared-executor, shared-worker topologies). Users are advised to upgrade to `apache-airflow` 3.2.2 or later.",
|
|
"lang": "en",
|
|
"supportingMedia": [
|
|
{
|
|
"type": "text/html",
|
|
"base64": false,
|
|
"value": "Exploitation requires the attacker to already be an authenticated Airflow worker holding a valid Log-server JWT issued for at least one Dag. Apache Airflow's Log server authorized JWT tokens against Dag IDs by applying Python's `str.lstrip()` to the requested path segment when verifying the JWT's `sub` claim. `str.lstrip()` strips any of a *set* of characters from the left (not a prefix), so a JWT issued for a Dag named e.g. `dag_a` would authorize log access to any other Dag whose name began with any subset of the characters `{d, a, g, _}` (e.g. `dag_attacker`, `aaaa_target`, `_dag_secret`). Such an authenticated worker could enumerate and read worker logs of other Dags whose names happened to share that character-class prefix, leaking task output and error traces beyond the documented per-Dag isolation boundary. Affects deployments relying on per-Dag log-access scoping (multi-team, shared-executor, shared-worker topologies). Users are advised to upgrade to `apache-airflow` 3.2.2 or later."
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"references": [
|
|
{
|
|
"url": "https://github.com/apache/airflow/pull/66749",
|
|
"tags": [
|
|
"patch"
|
|
]
|
|
},
|
|
{
|
|
"url": "https://lists.apache.org/thread/hz1q7vg65vq2h4fobv5ww8tp257fbqj9",
|
|
"tags": [
|
|
"vendor-advisory"
|
|
]
|
|
}
|
|
],
|
|
"metrics": [
|
|
{
|
|
"other": {
|
|
"type": "Textual description of severity",
|
|
"content": {
|
|
"text": "low"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"credits": [
|
|
{
|
|
"lang": "en",
|
|
"value": "Michael Lip (theluckystrike)",
|
|
"type": "finder"
|
|
},
|
|
{
|
|
"lang": "en",
|
|
"value": "Jarek Potiuk (@potiuk)",
|
|
"type": "remediation developer"
|
|
}
|
|
],
|
|
"x_generator": {
|
|
"engine": "airflow-s/generate_cve_json.py"
|
|
}
|
|
},
|
|
"adp": [
|
|
{
|
|
"title": "CVE Program Container",
|
|
"references": [
|
|
{
|
|
"url": "http://www.openwall.com/lists/oss-security/2026/05/31/13"
|
|
}
|
|
],
|
|
"providerMetadata": {
|
|
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
|
|
"shortName": "CVE",
|
|
"dateUpdated": "2026-06-01T07:47:51.797Z"
|
|
}
|
|
},
|
|
{
|
|
"metrics": [
|
|
{
|
|
"cvssV3_1": {
|
|
"scope": "UNCHANGED",
|
|
"version": "3.1",
|
|
"baseScore": 3.1,
|
|
"attackVector": "NETWORK",
|
|
"baseSeverity": "LOW",
|
|
"vectorString": "CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N",
|
|
"integrityImpact": "NONE",
|
|
"userInteraction": "NONE",
|
|
"attackComplexity": "HIGH",
|
|
"availabilityImpact": "NONE",
|
|
"privilegesRequired": "LOW",
|
|
"confidentialityImpact": "LOW"
|
|
}
|
|
},
|
|
{
|
|
"other": {
|
|
"type": "ssvc",
|
|
"content": {
|
|
"timestamp": "2026-06-01T14:58:23.963511Z",
|
|
"id": "CVE-2026-45426",
|
|
"options": [
|
|
{
|
|
"Exploitation": "none"
|
|
},
|
|
{
|
|
"Automatable": "no"
|
|
},
|
|
{
|
|
"Technical Impact": "partial"
|
|
}
|
|
],
|
|
"role": "CISA Coordinator",
|
|
"version": "2.0.3"
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"title": "CISA ADP Vulnrichment",
|
|
"providerMetadata": {
|
|
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
|
|
"shortName": "CISA-ADP",
|
|
"dateUpdated": "2026-06-01T14:59:56.586Z"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
} |