Skip to main content

Fickling CVE-2025-67747

HIGH
Incomplete List of Disallowed Inputs (CWE-184)
2025-12-16 security-advisories@github.com
7.1
CVSS 4.0 · Vendor: github
Share

Severity by source

Vendor (github) PRIMARY
7.1 HIGH
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/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
vuln.today AI
7.8 HIGH

File-based local vector (AV:L) needing the victim to scan then unpickle the crafted file (UI:R); no attacker privileges needed (PR:N); arbitrary code execution yields full C/I/A.

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
P
Scope
X

Lifecycle Timeline

2
Analysis Generated
Oct 07, 2026 - 19:38 vuln.today
CVE Published
Dec 16, 2025 - 01:15 cve.org
HIGH 7.1

DescriptionCVE.org

Fickling is a Python pickling decompiler and static analyzer. Versions prior to 0.1.6 are missing marshal and types from the block list of unsafe module imports. Fickling started blocking both modules to address this issue. This allows an attacker to craft a malicious pickle file that can bypass fickling since it misses detections for types.FunctionType and marshal.loads. A user who deserializes such a file, believing it to be safe, would inadvertently execute arbitrary code on their system. This impacts any user or system that uses Fickling to vet pickle files for security issues. The issue was fixed in version 0.1.6.

AnalysisAI

Deserialization of an attacker-supplied pickle file that has been vetted by Fickling versions prior to 0.1.6 can execute arbitrary code because the analyzer's unsafe-import block list omitted the 'marshal' and 'types' modules, allowing payloads built on marshal.loads and types.FunctionType to pass the scan as 'LIKELY_SAFE'. The flaw affects any user or pipeline that trusts Fickling as a safety gate for untrusted pickles and then unpickles the file; because Fickling is the inspection tool rather than the execution sink, code only runs when the file is subsequently loaded, and the CVSS 4.0 vector (AV:L/AC:L/PR:N/UI:P) and the independent assessment (AV:L/AC:L/PR:N/UI:R) both confirm that unauthenticated attackers need the victim to run the scan and then choose to deserialize the file. Publicly available exploit code exists - the upstream GHSA advisory itself includes a disassembled malicious pickle and a regression test - but there is no confirmed active exploitation (no CISA KEV listing), and the vendor-released patch fixes the issue in Fickling 0.1.6.

Technical ContextAI

Fickling, maintained by Trail of Bits, is a Python pickle decompiler and static analyzer that inspects pickle bytecode (opcodes such as STACK_GLOBAL, REDUCE, and BUILD) to flag dangerous constructs before a file is ever deserialized. Its safety checks work largely by maintaining a block list of unsafe module/attribute names that can be reached through STACK_GLOBAL; when a payload references any of those names, Fickling raises the reported severity above LIKELY_SAFE. Before 0.1.6 that list was missing 'marshal' and 'types', so two powerful primitives went undetected: marshal.loads, which turns attacker-supplied bytes into a live Python code object, and types.FunctionType, which wraps that code object into a callable function. The advisory PoC chains these with pickle REDUCE opcodes - marshal.loads(code_bytes) followed by types.FunctionType(code, globals), then a final REDUCE with an empty argument tuple - to build and invoke a function that runs os.system('id'). This is a classic CWE-184 incomplete-block-list defect: the detection logic is sound in principle but its deny-list is not exhaustive, so the analyzer emits a false-negative 'LIKELY_SAFE' verdict. Fickling itself is not the execution sink; the arbitrary code runs only in the victim's process at the later unpickling step, when the crafted file is actually loaded. The fix in commit 4e34561301bda1450268d1d7b0b2b151de33b913 adds 'marshal' and 'types' to the unsafe-import set in fickling/fickle.py.

RemediationAI

Vendor-released patch: upgrade to Fickling 0.1.6 (for example 'pip install --upgrade "fickling>=0.1.6"' or pin fickling==0.1.6), which adds 'marshal' and 'types' to the unsafe-import block list; the fix landed in PR https://github.com/trailofbits/fickling/pull/186 via commit https://github.com/trailofbits/fickling/commit/4e34561301bda1450268d1d7b0b2b151de33b913 and is described in advisory GHSA-565g-hwwr-4pp3. Because this is a detection bypass rather than a flaw in the deserialization sink, patching Fickling alone does not make unpickling untrusted data safe - treat any 'LIKELY_SAFE' verdict as a heuristic and never deserialize an untrusted pickle solely because Fickling cleared it. Where unpickling is unavoidable, load through a restricted Unpickler with an explicit find_class allow-list that excludes marshal, types, os, subprocess, and similar modules, accepting that legitimate pickles using those names will fail; alternatively, perform the unpickle inside a disposable sandbox or container with no network access, a read-only filesystem, and least-privilege credentials, which contains the damage but adds operational overhead and does not prevent the initial code execution. Adding your own pre-scan for STACK_GLOBAL references to marshal.loads and types.FunctionType can close the gap on unpatched versions, but maintaining a local deny-list carries the same risk of incomplete coverage that caused this CVE.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

Share

CVE-2025-67747 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy