CVE-2026-14534
Full vulnerability record from the local CVENow database.
Description
Trail of Bits fickling versions up to and including 0.1.10 do not include the Python standard library modules _posixsubprocess, site, and atexit in the UNSAFE_IMPORTS denylist (fickle.py). Because these modules are absent from the denylist, fickling's check_safety() function returns LIKELY_SAFE with zero findings for pickle payloads that invoke dangerous functions including _posixsubprocess.fork_exec (C-level process spawner capable of executing arbitrary binaries), site.execsitecustomize (executes arbitrary site customization code), and atexit._run_exitfuncs (triggers all registered exit handler callbacks). The fickling.load() API chains check_safety() into pickle.loads() as an explicit security gate; a LIKELY_SAFE verdict causes the payload to be deserialized and executed. This shares the same root cause as CVE-2026-22607 (cProfile), CVE-2025-67748 (pty), and CVE-2025-67747 (marshal/types). OvertlyBadEvals does not flag these modules because they are standard library imports. UnsafeImports does not flag them because they are not in the denylist. The UnusedVariables heuristic is defeated by the SETITEMS opcode pattern.
View original CVE JSON
{
"id": "CVE-2026-14534",
"sourceIdentifier": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"published": "2026-07-04T14:16:28.400",
"lastModified": "2026-10-25T15:10:00.147",
"vulnStatus": "Analyzed",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Trail of Bits fickling versions up to and including 0.1.10 do not include the Python standard library modules _posixsubprocess, site, and atexit in the UNSAFE_IMPORTS denylist (fickle.py). Because these modules are absent from the denylist, fickling's check_safety() function returns LIKELY_SAFE with zero findings for pickle payloads that invoke dangerous functions including _posixsubprocess.fork_exec (C-level process spawner capable of executing arbitrary binaries), site.execsitecustomize (executes arbitrary site customization code), and atexit._run_exitfuncs (triggers all registered exit handler callbacks). The fickling.load() API chains check_safety() into pickle.loads() as an explicit security gate; a LIKELY_SAFE verdict causes the payload to be deserialized and executed. This shares the same root cause as CVE-2026-22607 (cProfile), CVE-2025-67748 (pty), and CVE-2025-67747 (marshal/types). OvertlyBadEvals does not flag these modules because they are standard library imports. UnsafeImports does not flag them because they are not in the denylist. The UnusedVariables heuristic is defeated by the SETITEMS opcode pattern."
},
{
"lang": "es",
"value": "Las versiones de fickling de Trail of Bits hasta la 0.1.10 inclusive no incluyen los módulos de la biblioteca estándar de Python _posixsubprocess, site y atexit en la lista de denegación UNSAFE_IMPORTS (fickle.py). Debido a que estos módulos están ausentes de la lista de denegación, la función check_safety() de fickling devuelve LIKELY_SAFE con cero hallazgos para cargas útiles de pickle que invocan funciones peligrosas, incluyendo _posixsubprocess.fork_exec (generador de procesos a nivel de C capaz de ejecutar binarios arbitrarios), site.execsitecustomize (ejecuta código de personalización de sitio arbitrario) y atexit._run_exitfuncs (activa todas las devoluciones de llamada de los gestores de salida registrados). La API fickling.load() encadena check_safety() en pickle.loads() como una puerta de seguridad explícita; un veredicto LIKELY_SAFE hace que la carga útil sea deserializada y ejecutada. Esto comparte la misma causa raíz que CVE-2026-22607 (cProfile), CVE-2025-67748 (pty) y CVE-2025-67747 (marshal/types). OvertlyBadEvals no marca estos módulos porque son importaciones de la biblioteca estándar. UnsafeImports no los marca porque no están en la lista de denegación. La heurística UnusedVariables es eludida por el patrón de código de operación SETITEMS."
}
],
"affected": [
{
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"affectedData": [
{
"vendor": "trailofbits",
"product": "fickling",
"defaultStatus": "unaffected",
"collectionURL": "https://pypi.org/project/fickling/",
"packageName": "fickling",
"versions": [
{
"version": "0",
"lessThanOrEqual": "0.1.10",
"versionType": "custom",
"status": "affected"
},
{
"version": "0.1.11",
"versionType": "custom",
"status": "unaffected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H",
"baseScore": 8.8,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "REQUIRED",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"availabilityImpact": "HIGH"
},
"exploitabilityScore": 2.8,
"impactScore": 5.9
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-07-06T14:59:25.631510Z",
"id": "CVE-2026-14534",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "total"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-184"
},
{
"lang": "en",
"value": "CWE-502"
}
]
}
],
"configurations": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:a:trailofbits:fickling:*:*:*:*:*:python:*:*",
"versionEndIncluding": "0.1.10",
"matchCriteriaId": "7D2B4444-58DC-4227-BBD7-D68FB61FA761"
}
]
}
]
}
],
"references": [
{
"url": "https://github.com/trailofbits/fickling/commit/e8408615b63adf034f891f653692ab9b51f0f5af",
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"tags": [
"Patch"
]
},
{
"url": "https://github.com/trailofbits/fickling/pull/272",
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"tags": [
"Issue Tracking",
"Patch"
]
},
{
"url": "https://github.com/trailofbits/fickling/releases/tag/v0.1.11",
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"tags": [
"Release Notes"
]
},
{
"url": "https://github.com/trailofbits/fickling/security/advisories/GHSA-m6fh-58r7-x697",
"source": "aa17e1a1-c329-4d6e-a1ed-8d0188aea082",
"tags": [
"Exploit",
"Vendor Advisory"
]
},
{
"url": "https://github.com/trailofbits/fickling/security/advisories/GHSA-m6fh-58r7-x697",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"tags": [
"Exploit",
"Vendor Advisory"
]
}
]
}