Miggo Logo

CVE-2024-52809:
vue-i18n has cross-site scripting vulnerability with prototype pollution

5.3

CVSS Score
4.0

Basic Information

EPSS Score
0.43037%
Published
12/2/2024
Updated
12/2/2024
KEV Status
No
Technology
TechnologyJavaScript

Technical Details

CVSS Vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Package NameEcosystemVulnerable VersionsFirst Patched Version
@intlify/core-basenpm>= 9.3.0, < 9.14.29.14.2
vue-i18nnpm>= 9.3.0, < 9.14.29.14.2
@intlify/corenpm>= 9.3.0, < 9.14.29.14.2
@intlify/vue-i18n-corenpm>= 9.3.0, < 9.14.29.14.2
petite-vue-i18nnpm>= 10.0.0, < 10.0.510.0.5
@intlify/core-basenpm>= 10.0.0, < 10.0.510.0.5
vue-i18nnpm>= 10.0.0, < 10.0.510.0.5
@intlify/corenpm>= 10.0.0, < 10.0.510.0.5
@intlify/vue-i18n-corenpm>= 10.0.0, < 10.0.510.0.5

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability stems from prototype pollution affecting AST node property access. The commit diff shows critical changes in format.ts and compilation.ts where property access was modified to use hasOwn() and resolveProps() instead of prototype-based checks. Key functions like formatMessageParts previously accessed properties like 'static' through node.s/node.static without ownership checks, allowing attackers to inject malicious properties via Object.prototype. The fix introduced resolveProps() to check own properties explicitly, confirming these were the vulnerable points.

Vulnerable functions

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

WAF Protection Rules

WAF Rule

### Vuln*r**ility typ* XSS ### **s*ription vu*-i**n **n ** p*ss** lo**l* m*ss***s to `*r**t*I**n` or `us*I**n`. w* **n t**n tr*nsl*t* t**m usin* `t` *n* `$t`. vu*-i**n **s its own synt*x *or lo**l m*ss***s, *n* us*s * m*ss*** *ompil*r to **n*r*t* *S

Reasoning

T** vuln*r**ility st*ms *rom prototyp* pollution *****tin* *ST no** prop*rty ****ss. T** *ommit *i** s*ows *riti**l ***n**s in `*orm*t.ts` *n* `*ompil*tion.ts` w**r* prop*rty ****ss w*s mo*i*i** to us* `**sOwn()` *n* `r*solv*Props()` inst*** o* proto