Miggo Logo

CVE-2024-3651:
Internationalized Domain Names in Applications (IDNA) vulnerable to denial of service from specially crafted inputs to idna.encode

6.2

CVSS Score
3.1

Basic Information

EPSS Score
0.63122%
Published
4/11/2024
Updated
7/31/2024
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Package NameEcosystemVulnerable VersionsFirst Patched Version
idnapip< 3.73.7

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability description clearly points to idna.encode() as the entry point for the DoS. The provided commit 1d365e17e10d72d0b7876316fc7b9ca0eebdd38d is a release commit. By comparing the tags v3.6 (last vulnerable) and v3.7 (first patched), I identified commit 5beb28b9dd77912c0dd656d8b0fdba3eb80222e7 as the key patch. This commit modifies idna.core.valid_contextj and idna.core.check_label (which calls valid_contextj). The commit message for 5beb28b9dd77912c0dd656d8b0fdba3eb80222e7 explicitly states it's for "More efficient resolution of joiner contexts" to handle "pathological cases" faster, which aligns with the DoS vulnerability caused by resource exhaustion. The changes in idna.idnadata.joining_types support this by providing a more comprehensive and potentially optimized lookup for character joining types. The idna.encode function calls check_label, making it part of the vulnerable call chain. idna.core.alabel was also modified between the versions and calls check_label, so it's included with medium confidence as it's part of the encoding pipeline that was changed.

Vulnerable functions

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

WAF Protection Rules

WAF Rule

### Imp**t * sp**i*lly *r**t** *r*um*nt to t** `i*n*.*n*o**()` *un*tion *oul* *onsum* si*ni*i**nt r*sour**s. T*is m*y l*** to * **ni*l-o*-s*rvi**. ### P*t***s T** *un*tion **s ***n r**in** to r*j**t su** strin*s wit*out t** *sso*i*t** r*sour** *onsu

Reasoning

T** vuln*r**ility **s*ription *l**rly points to `i*n*.*n*o**()` *s t** *ntry point *or t** *oS. T** provi*** *ommit `****************************************` is * r*l**s* *ommit. *y *omp*rin* t** t**s v*.* (l*st vuln*r**l*) *n* v*.* (*irst p*t****),