Advisory details:
pypa / picklescan/PYSEC-2026-4131
| Advisory ID | pypa/picklescan/PYSEC-2026-4131 |
| Aliases |
CVE-2025-71365
GHSA-3329-ghmp-jmv5 PYSEC-2026-4131 |
| Summary | Picklescan is vulnerable to RCE through missing detection when calling numpy.f2py.crackfortran.myeval ### Summary Picklescan uses numpy.f2py.crackfortran.myeval, which is a function in numpy to execute remote pickle files. ### Details The attack payload executes in the following steps: - First, the attacker crafts the payload by calling the numpy.f2py.crackfortran.myeval function in its reduce method - Then, when the victim checks whether the pickle file is safe by using the Picklescan library and this library doesn't detect any dangerous functions, they decide to use pickle.load() on this malicious pickle file, thus leading to remote code execution. ### PoC ``` class RCE: def __reduce__(self): from numpy.f2py.crackfortran import myeval return (myeval, ("os.system('ls')",)) ``` ### Impact Any organization or individual relying on picklescan to detect malicious pickle files inside PyTorch models. Attackers can embed malicious code in pickle file that remains undetected but executes when the pickle file is loaded. Attackers can distribute infected pickle files across ML models, APIs, or saved Python objects. ### Report by Pinji Chen (cpj24@mails.tsinghua.edu.cn) from the NISL lab (https://netsec.ccert.edu.cn/about) at Tsinghua University, Guanheng Liu (coolwind326@gmail.com). |
| Status | Published |
| Exploitability | 0.5 |
| Weighted Severity | 7.3 |
| Risk | 3.6 |
| Affected and Fixed Packages | Package Details |
| Introduced and Fixed Package Commit Patches | Package Commit Patches Details |
| There are no known CWE. |
| System | Score | Found at |
|---|---|---|
| cvssv3.1 | 8.1 | https://github.com/pypa/advisory-database/blob/main/vulns/picklescan/PYSEC-2026-4131.yaml |
| cvssv4 | 7.6 | https://github.com/pypa/advisory-database/blob/main/vulns/picklescan/PYSEC-2026-4131.yaml |
| Reference id | Reference type | URL |
|---|---|---|
| https://github.com/mmaitre314/picklescan | ||
| https://github.com/mmaitre314/picklescan/commit/70c1c6c31beb6baaf52c8db1b6c3c0e84a6f9dab | ||
| https://github.com/mmaitre314/picklescan/pull/53 | ||
| https://pypi.org/project/picklescan | ||
| CVE-2025-71365 | https://nvd.nist.gov/vuln/detail/CVE-2025-71365 | |
| GHSA-3329-ghmp-jmv5 | https://github.com/advisories/GHSA-3329-ghmp-jmv5 | |
| GHSA-3329-ghmp-jmv5 | https://github.com/mmaitre314/picklescan/security/advisories/GHSA-3329-ghmp-jmv5 | |
| picklescan-arbitrary-code-execution-via-numpy-f2py-crackfortran-myeval-detection-bypass | Advisory | https://www.vulncheck.com/advisories/picklescan-arbitrary-code-execution-via-numpy-f2py-crackfortran-myeval-detection-bypass |
No EPSS data available for this advisory.
| Patch URL | |
|---|---|
| There are no known patches. | |
| Attack Vector (AV) | Attack Complexity (AC) | Privileges Required (PR) | User Interaction (UI) | Scope (S) | Confidentiality Impact (C) | Integrity Impact (I) | Availability Impact (A) |
|---|---|---|---|---|---|---|---|
network adjacent_network local physical |
low high |
none low high |
none required |
unchanged changed |
high low none |
high low none |
high low none |
| Attack Vector (AV) | Attack Complexity (AC) | Attack Requirements (AT) | Privileges Required (PR) | User Interaction (UI) | Vulnerable System Impact Confidentiality (VC) | Vulnerable System Impact Integrity (VI) | Vulnerable System Impact Availability (VA) | Subsequent System Impact Confidentiality (SC) | Subsequent System Impact Integrity (SI) | Subsequent System Impact Availability (SA) |
|---|---|---|---|---|---|---|---|---|---|---|
network adjacent local physical |
low high |
none present |
none low high |
none passive active |
high low none |
high low none |
high low none |
high low none |
high low none |
high low none |
There are no SSVC decisions available.