CVE-2026-67587
Full vulnerability record from the local CVENow database.
Description
Apache Airflow's Task SDK rebuilt a `Callback` object from serialized data by re-running its constructor, which imports the module named by the stored callback path. Because `SyncCallback` is itself an Airflow class it passes the default `allowed_deserialization_classes` allow-list, so tightening that setting does not help. A Dag author — who controls a task instance's `next_kwargs` through the task execution API — can therefore cause an arbitrary module to be imported inside the scheduler process, when the scheduler's `awaiting_input` timeout sweep deserializes that value. No non-default configuration is required; the sweep runs unconditionally. Versions before 3.3.0 are not affected: the class existed, but the scheduler sweep that reaches it did not. This is a separate code path from CVE-2026-58076 and CVE-2026-67260, which cover different gadgets reaching deserialization — applying either of those fixes does not address this one. Users are advised to upgrade to apache-airflow 3.3.1 or later.
View original CVE JSON
{
"id": "CVE-2026-67587",
"sourceIdentifier": "[email protected]",
"published": "2026-08-12T16:17:15.090",
"lastModified": "2026-10-24T16:10:00.153",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Apache Airflow's Task SDK rebuilt a `Callback` object from serialized data by re-running its constructor, which imports the module named by the stored callback path. Because `SyncCallback` is itself an Airflow class it passes the default `allowed_deserialization_classes` allow-list, so tightening that setting does not help. A Dag author — who controls a task instance's `next_kwargs` through the task execution API — can therefore cause an arbitrary module to be imported inside the scheduler process, when the scheduler's `awaiting_input` timeout sweep deserializes that value. No non-default configuration is required; the sweep runs unconditionally. Versions before 3.3.0 are not affected: the class existed, but the scheduler sweep that reaches it did not. This is a separate code path from CVE-2026-58076 and CVE-2026-67260, which cover different gadgets reaching deserialization — applying either of those fixes does not address this one. Users are advised to upgrade to apache-airflow 3.3.1 or later."
},
{
"lang": "es",
"value": "El SDK de Tareas de Apache Airflow reconstruyó un objeto ’Callback’ a partir de datos serializados al volver a ejecutar su constructor, que importa el módulo nombrado por la ruta de callback almacenada. Debido a que ’SyncCallback’ es en sí misma una clase de Airflow, pasa la lista de permitidos predeterminada ’allowed_deserialization_classes’, por lo que ajustar esa configuración no ayuda. Un autor de Dag - que controla los ’next_kwargs’ de una instancia de tarea a través de la API de ejecución de tareas - puede, por lo tanto, hacer que se importe un módulo arbitrario dentro del proceso del planificador, cuyo el barrido de tiempo de espera ’awaiting_input’ del planificador deserializa ese valor. No se requiere ninguna configuración no predeterminada; el barrido se ejecuta incondicionalmente. Las versiones anteriores a la 3.3.0 no se ven afectadas: la clase existía, pero el barrido del planificador que la alcanza no. Esta es una ruta de código separada de CVE-2026-58076 y CVE-2026-67260, que cubren diferentes “gadgets” que alcanzan la deserialización - aplicar cualquiera de esas correcciones no aborda esta. Se aconseja a los usuarios actualizar a apache-airflow 3.3.1 o posterior."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "Apache Software Foundation",
"product": "Apache Airflow",
"defaultStatus": "unaffected",
"collectionURL": "https://pypi.python.org",
"packageName": "apache-airflow",
"packageURL": "pkg:pypi/apache-airflow",
"versions": [
{
"version": "3.3.0",
"lessThan": "3.3.1",
"versionType": "semver",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 2.8,
"impactScore": 5.9
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-08-13T12:17:23.923988Z",
"id": "CVE-2026-67587",
"options": [
{
"exploitation": "none"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-502"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:apache:airflow:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.3.0",
"versionEndExcluding": "3.3.1",
"matchCriteriaId": "F6D5F0B2-15A2-4782-8CC5-769E57D5F2F6"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/apache/airflow/pull/70704",
"source": "[email protected]",
"tags": [
"Issue Tracking",
"Patch"
]
},
{
"url": "https://lists.apache.org/thread/o00ww4n69qojvsckb464dtwd2nhzy6t0",
"source": "[email protected]",
"tags": [
"Mailing List",
"Vendor Advisory"
]
},
{
"url": "https://www.cve.org/CVERecord?id=CVE-2026-58076",
"source": "[email protected]",
"tags": [
"Not Applicable"
]
},
{
"url": "https://www.cve.org/CVERecord?id=CVE-2026-67260",
"source": "[email protected]",
"tags": [
"Not Applicable"
]
}
]
}