Arbitrary code execution via object/apply deserialization
Published Feb 19, 2020 · Updated Aug 5, 2024
Deserialization in PyYAML 5.1 through 5.1.2 allows attackers to execute arbitrary code when load or load_all parses crafted YAML. FullConstructor registers the python/object/apply YAML tag and passes its value to construct_python_object_apply, allowing a named Python class such as subprocess.Popen to be instantiated with attacker-controlled arguments. Exploitation requires an application to pass untrusted YAML to load, load_all, or FullLoader; successful execution runs with the application's privileges.
Summary
What happened
Deserialization in PyYAML 5.1 through 5.1.2 allows attackers to execute arbitrary code when load or load_all parses crafted YAML. FullConstructor registers the python/object/apply YAML tag and passes its value to construct_python_object_apply, allowing a named Python class such as subprocess.Popen to be instantiated with attacker-controlled arguments. Exploitation requires an application to pass untrusted YAML to load, load_all, or FullLoader; successful execution runs with the application's privileges.
The record
- CVE
- CVE-2019-20477
- Published
- Feb 19, 2020
- Updated
- Aug 5, 2024
- Vendor
- Unknown vendor
- Product
- Unknown product
- Classifications
- CWE-502
- Attack vector
- network
- Privileges
- unauthenticated
Timeline
How it unfolded
- Feb 19, 2020CVE publishedPublication date reported by the CVE source.
- Aug 5, 2024Record updatedLatest update available in the CVE record.
Exploitability
Present is not the same as exploitable
Compare your product and version with the public record. A matching version still requires validation against your environment.
Is a vulnerable build present?
What conditions does exploitation require?
What is affected?
Affected products and versions are unavailable in this record.
Published CVSS scores
CVSS describes severity. EPSS estimates exploitation probability.
Attacks
What attackers are doing with it
Daily unique IPs observed by Shadowserver honeypots for known exploited vulnerabilities (KEVs). Missing observations do not establish an absence of attacks.
Weakness, pattern, technique
Public exploit references
- Exploit-DB 47655 PyYAML proof of conceptproof of concept · unverified
Labels summarize the accepted research assessment. They do not indicate a test against your environment.
Technologies
Your stack
See the directory against your own environment.
Your stack
Check the software in your environment
Book a demo to see how Hinoki identifies affected software and validates exploitability in your environment.
Book a demo