CVE-2026-22609: Incomplete Blocklist in Fickling Pickle Analyzer Leads to Arbitrary Code Execution
Vulnerability ID: GHSA-5HWF-RC88-82XM
CVSS Score: 8.9
Published: 2026-03-04
A critical logic vulnerability exists in Fickling versions prior to 0.1.7, allowing attackers to bypass the library's security analysis. Fickling, a static analysis tool designed to detect malicious Python pickle files, relied on an incomplete blocklist (denylist) of dangerous modules. The analysis engine failed to flag imports of high-risk standard library modules such as ctypes, runpy, and importlib. Consequently, an attacker can craft a malicious pickle file that executes arbitrary code while Fickling erroneously classifies the file as "LIKELY_SAFE." This effectively neutralizes the tool's purpose as a security gate for untrusted serialized data.
TL;DR
Fickling < 0.1.7 fails to detect malicious pickle files that utilize dangerous standard library modules like ctypes and runpy due to an incomplete hardcoded blocklist. This allows attackers to bypass the security scanner and achieve Arbitrary Code Execution (ACE) on systems relying on Fickling for validation.
⚠️ Exploit Status: POC
Technical Details
- CWE ID: CWE-184
- CWE Name: Incomplete List of Disallowed Inputs
- Attack Vector: Network / Local (File)
- CVSS v4.0: 8.9 (High)
- CVSS v3.1: 7.8 (High)
- Exploit Status: PoC Available
Affected Systems
- Fickling < 0.1.7
- Machine Learning pipelines using Fickling for model validation
- Python applications using Fickling to scan untrusted pickles
-
fickling: < 0.1.7 (Fixed in:
0.1.7)
Code Analysis
Commit: 9a2b3f8
Add runpy to unsafe imports
UNSAFE_IMPORTS = (..., 'runpy')
Commit: 29d5545
Add importlib, code, and multiprocessing to unsafe imports
UNSAFE_IMPORTS = (..., 'importlib', 'code', 'multiprocessing')
Commit: b793563
Add pydoc and ctypes to unsafe imports
UNSAFE_IMPORTS = (..., 'pydoc', 'ctypes')
Commit: 3e52ae6
Check all components of package imports
if node.module and any(component in UNSAFE_IMPORTS for component in node.module.split('.')):
Exploit Details
- GitHub: Verified PoC in test suite demonstrating runpy bypass
Mitigation Strategies
- Upgrade Fickling to version 0.1.7 or later immediately.
- Transition from Pickle serialization to safer formats like Safetensors or ONNX for ML models.
- Implement strict sandboxing for any service that deserializes untrusted data.
- Use allowlists (whitelists) for imports if adhering to pickle, rather than relying solely on blocklists.
Remediation Steps:
- Run
pip show ficklingto check the installed version. - If the version is below 0.1.7, execute
pip install --upgrade fickling. - Review any pickle files ingested during the vulnerable window.
References
Read the full report for GHSA-5HWF-RC88-82XM on our website for more details including interactive diagrams and full exploit analysis.
Top comments (0)