Miggo Logo

CVE-2020-1747:
Improper Input Validation in PyYAML

9.8

CVSS Score

Basic Information

EPSS Score
-
Published
4/20/2021
Updated
10/31/2024
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Package NameEcosystemVulnerable VersionsFirst Patched Version
pyyamlpip>= 5.1b7, < 5.3.15.3.1

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability stemmed from insufficient validation when setting object state during deserialization. The commit diff shows critical additions:- 1) check_state_key() to block forbidden keys- 2) Modified set_python_instance_state() to enforce the blacklist. The unpatched FullLoader's set_python_instance_state allowed attackers to set arbitrary attributes (like reduce) via crafted YAML, leading to code execution. The construct_python_object_apply method triggered this unsafe state-setting process. These functions were directly modified in the security patch to add validation.

Vulnerable functions

Only Mi**o us*rs **n s** t*is s**tion

WAF Protection Rules

WAF Rule

* vuln*r**ility w*s *is*ov*r** in t** PyY*ML li*r*ry in v*rsions ***or* *.*.*, w**r* it is sus**pti*l* to *r*itr*ry *o** *x**ution w**n it pro**ss*s untrust** Y*ML *il*s t*rou** t** *ull_lo** m*t*o* or wit* t** *ullLo***r lo***r. *ppli**tions t**t us

Reasoning

T** vuln*r**ility st*mm** *rom insu**i*i*nt v*li**tion w**n s*ttin* o*j**t st*t* *urin* **s*ri*liz*tion. T** *ommit *i** s*ows *riti**l ***itions:- *) ****k_st*t*_k*y() to *lo*k *or*i***n k*ys- *) Mo*i*i** s*t_pyt*on_inst*n**_st*t*() to *n*or** t** *