CVE-2025-56005
Published: 20 January 2026
Description
An undocumented and unsafe feature in the PLY (Python Lex-Yacc) library 3.11 allows Remote Code Execution (RCE) via the `picklefile` parameter in the `yacc()` function. This parameter accepts a `.pkl` file that is deserialized with `pickle.load()` without validation. Because `pickle`…
more
allows execution of embedded code via `__reduce__()`, an attacker can achieve code execution by passing a malicious pickle file. The parameter is not mentioned in official documentation or the GitHub repository, yet it is active in the PyPI version. This introduces a stealthy backdoor and persistence risk. NOTE: A third-party states that this vulnerability should be rejected because the proof of concept does not demonstrate arbitrary code execution and fails to complete successfully.
Mitigating Controls (NIST 800-53 r5)AI
Directly mandates risk-based remediation of identified flaws like the unsafe deserialization in PLY 3.11 to eliminate the RCE vulnerability.
Requires validation of untrusted inputs such as the picklefile parameter prior to deserialization to block malicious pickle data execution.
Enforces least functionality by restricting or prohibiting unsafe undocumented features like the picklefile parameter in the yacc function.
Security SummaryAI
CVE-2025-56005 is an undocumented feature in the PLY (Python Lex-Yacc) library version 3.11 that enables remote code execution through the `picklefile` parameter in the `yacc()` function. This parameter accepts a `.pkl` file, which is deserialized using `pickle.load()` without any validation. Since Python's `pickle` module permits code execution via the `__reduce__()` method, a malicious `.pkl` file can trigger arbitrary code execution. The parameter is not referenced in official documentation or the project's GitHub repository but remains active in the PyPI-distributed version, posing a stealthy backdoor and persistence risk. The vulnerability, published on 2026-01-20, carries a CVSS v3.1 score of 9.8 and is classified under CWE-502 (Deserialization of Untrusted Data).
A remote attacker can exploit this vulnerability by supplying a crafted `.pkl` file to the `picklefile` parameter when the `yacc()` function is invoked, requiring no privileges, user interaction, or special access (AV:N/AC:L/PR:N/UI:N). Successful exploitation leads to high-impact confidentiality, integrity, and availability violations (C:H/I:H/A:H), allowing full remote code execution on the target system running affected PLY code.
References indicate significant controversy regarding the vulnerability's validity, with no official patches or mitigations detailed. A proof-of-concept is provided in repositories like https://github.com/bohmiiidd/Undocumented-RCE-in-PLY and https://github.com/bohmiiidd/Undocumument_RCE_PLY-yacc-CVE-2025-56005, but a third-party analysis at https://github.com/tom025/ply_exploit_rejection and https://github.com/tom025/ply_exploit_rejection/issues/1 argues for rejection, stating the PoC fails to demonstrate arbitrary code execution. An oss-security mailing list discussion at http://www.openwall.com/lists/oss-security/2026/01/23/4 further highlights this debate. Practitioners should avoid the `picklefile` parameter and monitor for updates from PLY maintainers.
Details
- CWE(s)
Affected Products
AI Security AnalysisAI
- AI Category
- Other AI Platforms
- Risk Domain
- N/A
- OWASP Top 10 for LLMs 2025
- None mapped
- MITRE ATLAS Techniques
- None mapped
- Classification Reason
- Matched keywords: backdoor
MITRE ATT&CK Enterprise TechniquesAI
Why these techniques?
Vulnerability enables unauthenticated remote code execution through unsafe pickle deserialization in Python PLY library's yacc() function, facilitating T1190 for public-facing app exploitation and T1059.006 for Python code execution; medium confidence due to reported controversy over PoC validity.