Fickling check_safety() bypass via unlisted standard library modules (_posixsubprocess, site, atexit)
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- Required
- Attack complexity
- Low
- Impact type
- Code execution
- Confidentiality · integrity · availability
- High · High · High
- Fix status
- Partial Red Hat: 2 without a fix
Attack profile from CVSS 3.1 · CNA. Fix status from CNA and Red Hat. Impact type from CWE-502.
Summary
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.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| trailofbits | fickling | up to 0.1.10 | 0.1.11 | Patch available | CNA |
- fickling Vendortrailofbits Affected up to 0.1.10 Fixed in 0.1.11 Patch available CNA
CPE configurations NVD · 1
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:trailofbits:fickling:*:*:*:*:*:python:*:* | up to 0.1.10 | Vulnerable | trailofbits |
- cpe:2.3:a:trailofbits:fickling:*:*:*:*:*:python:*:* Versions up to 0.1.10 Vulnerable ·trailofbits
Remediation
- Fix · CNA fickling (trailofbits) Fixed in 0.1.11
Vendor assessments
Red Hat
Red Hat rating: Important. Red Hat's page for this CVE →
| Product | Status | Plan or fix |
|---|---|---|
| Exploit Intelligence | Affected | No fix yet |
| Red Hat Hardened Images | Affected | No fix yet |
Not affected: 1 product
- Red Hat Hardened Images
Timeline
- 2026-10-02 Threatist record created from CVE-2026-14534
- 2026-10-03 Alias added: GHSA-v8cr-9jrc-fwf9
References
More trailofbits Fickling vulnerabilities
- TI-2026-18173 Fickling vulnerable to detection bypass due to "builtins" blindness CVSS 4.0HIGH 8.9
- TI-2026-18170 Fickling has Static Analysis Bypass via Incomplete Dangerous Module Blocklist CVSS 4.0HIGH 8.9
- TI-2026-18169 Fickling vulnerable to use of ctypes and pydoc gadget chain to bypass detection CVSS 4.0HIGH 8.9
- TI-2026-18168 Fickling Blocklist Bypass: cProfile.run() CVSS 4.0HIGH 8.9
- TI-2026-18167 Fickling has a bypass via runpy.run_path() and runpy.run_module() CVSS 4.0HIGH 8.9
- TI-2026-12265 Fickling MLAllowlist analysis pass rendered inoperative by shared mutable state in AnalysisContext.shorten_code() CVSS 3.1CRITICAL 9.8
Sources
- CVE-2026-14534 · CVE Program
- CVE-2026-14534 · NVD
- FIRST EPSS
- GHSA-v8cr-9jrc-fwf9 · GitHub Advisory Database · CC BY 4.0
- CVE-2026-14534 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences