Skip to main content

Vue I18n CVE-2026-118256

| EUVDEUVD-2026-112358 LOW
Cross-site Scripting (XSS) (CWE-79)
2026-10-28 GitHub_M GHSA-8rc2-428q-7ww3
2.1
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply untrusted named value alongside a list
  2. Exploit
    escapeParams skips the named branch
  3. Execution
    Unescaped markup rendered via v-html
  4. Impact
    Inject phishing content or, when chained, run script

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Three concrete prerequisites must all hold: (1) the application enables escapeParameter (escapeParameterHtml in the Legacy API); (2) it renders translation output as HTML, e.g. with v-html; and (3) a single translate call supplies both a list and named values, e.g. t(key, ['...'], { named: { ... } }), where the named values are untrusted - because escapeParams() escapes the list branch OR the named branch (joined by else), the named values are then inserted unescaped. Limiting factors: active user interaction is required to view the rendered content (UI:A); escapeParameter is opt-in, not a default; component interpolation via <i18n-t> is NOT affected because it never passes both list and named and does not render HTML; by default the retained sanitizeTranslatedHtml() neutralizes event handlers and javascript: URLs, so script execution requires either versions without the sanitizer (before 9.14.5, 10.0.8, 11.1.10, and 12.0.0-alpha.1 to alpha.3) or chaining with the iframe srcdoc bypass (GHSA-83rm-6c8r-g728). The vendor states the complete fix is updating to 11.4.14 or 12.0.0-alpha.5; documented workarounds are not passing list and named in the same call when escapeParameter is enabled, and not rendering untrusted translations with v-html (use <i18n-t> instead).

Impact

This is a low-priority issue, consistent with the vuln.today Decision label of 'monitor' and the input CVSS 4.0 base score of 2.1. The vector (AV:N/AC:L/AT:P/PR:N/UI:A) shows a network-reachable flaw requiring active user interaction and a specific attack requirement (AT:P), with impact limited to subsequent-system integrity (SI:L) - the injected markup affects the rendered page, not confidentiality or availability. No EPSS score and no KEV status are present in the input, so there is no signal of widespread or confirmed exploitation; exploitation status is best described as a public PoC reference existing (demonstration code is in the GHSA advisory) that is not verified as a weaponized working exploit. The real-world risk is gated heavily by non-default preconditions: the application must enable the opt-in escapeParameter/escapeParameterHtml option, render translations as HTML via v-html, and pass both a list and untrusted named values in the same translate call. Even then, the retained sanitizeTranslatedHtml() (from CVE-2025-53892) neutralizes event-handler attributes and javascript: URLs, so by default the primary impact is markup injection (phishing links, forms, layout changes); full script execution (DOM-based XSS) occurs only on versions without the sanitizer or when chained with the iframe srcdoc bypass (GHSA-83rm-6c8r-g728). Net: a genuine but narrow XSS requiring an unusual code pattern - a 'fix during routine updates' item, not an emergency.

Exploit ScenarioDerived

An application enables escapeParameter and renders a translation through v-html, invoking something like t(key, ['...'], { named: { field: untrustedValue } }). Because escapeParams() escapes only the list branch (the branches are joined by else), the attacker-controlled named value reaches the DOM as raw markup - a phishing link or form - and on releases without the sanitizer, or combined with the iframe srcdoc bypass, injected script executes in the victim's browser. A PoC demonstrating the unescaped named value is published in the GHSA-8rc2-428q-7ww3 advisory.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

Cross-site scripting in the Vue I18n internationalization plugin (npm vue-i18n, plus @intlify/core and @intlify/core-base) from 9.0.0-beta.5 up to 11.4.13 and in the 12.0.0-alpha line up to alpha.4 allows attacker-supplied markup to reach HTML-rendered translations when escapeParameter (escapeParameterHtml in the Legacy API) is enabled and one translate call supplies both a list and named values. The vendor advisory includes a PoC reference; it is not verified as working exploit code, and no public exploit or active exploitation is recorded at time of analysis (CISA KEV: no; vuln.today decision label: monitor, CVSS 4.0 base 2.1). Impact is limited: three prerequisites must all hold (escapeParameter enabled, translations rendered as HTML such as via v-html, and untrusted named values passed alongside a list), user interaction is required, and the retained sanitizeTranslatedHtml() normally strips event handlers and javascript: URLs, so script execution only follows on builds without the sanitizer or by chaining the iframe srcdoc bypass GHSA-83rm-6c8r-g728; realistic outcomes without that chain are injected phishing links, forms and layout changes.

RemediationAI

Upgrade to the vendor-released fixed versions: vue-i18n, @intlify/core and @intlify/core-base 11.4.14 or 12.0.0-alpha.5 (the patch, PR https://github.com/intlify/vue-i18n/pull/2680 and commit https://github.com/intlify/vue-i18n/commit/d657ce8f4b3b6b198a8f6e3d09e2b57a5d019fb8, makes escapeParams() escape both the list and the named values and no longer rewrites the caller's named object, which previously caused double-escaping on reuse). Because v9 and v10 are unsupported and will not be fixed, deployments on those majors must migrate to v11. Where an immediate upgrade is not possible, the vendor documents two workarounds, each with a cost: stop passing list and named values in the same translate call while escapeParameter is enabled, which may require restructuring message signatures and call sites; and stop rendering translations that can contain untrusted values with v-html, using component interpolation via <i18n-t> instead, which means refactoring templates away from raw HTML rendering and is the safer option since <i18n-t> is not affected. Note that updating is the only complete fix - the escaping gap remains exploitable at the library level for any call that still mixes list and named values, and remediation should also confirm the build is on a release containing sanitizeTranslatedHtml() and the GHSA-83rm-6c8r-g728 srcdoc fix so that the XSS cannot chain to script execution.

Affected VersionsENISA

vue-i18n 9.0.0-beta.5, < 11.4.14
vue-i18n 12.0.0-alpha.1, < 12.0.0-alpha.5

Affected Packages

npm @intlify/core fix: 11.4.14, 12.0.0-alpha.5
npm @intlify/core-base fix: 11.4.14, 12.0.0-alpha.5
npm @intlify/vue-i18n-core fix: 11.4.14, 12.0.0-alpha.5
npm petite-vue-i18n fix: 11.4.14, 12.0.0-alpha.5
npm vue-i18n fix: 11.4.14, 12.0.0-alpha.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 5 packages in npm

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Vue I18n is the internationalization plugin for Vue.js, and the vulnerable logic sits in escapeParams() in packages/core-base/src/translate.ts, shared by the vue-i18n, @intlify/core and @intlify/core-base packages. The function's two branches are joined by an else: if options.list is an array it maps escapeHtml over the list and never reaches the isObject(options.named) branch, so named values survive unescaped whenever a caller uses the public t(key, list, options) overload with a named field in the same call. The output-still goes through sanitizeTranslatedHtml(), added for CVE-2025-53892 (GHSA-x8qp-wqqm-57ph), which neutralizes event handler attributes and javascript: URLs but leaves other markup such as anchors and forms intact; before the fix for GHSA-83rm-6c8r-g728 an <iframe srcdoc> in a named value also survived that sanitizer and executed script, and releases predating the sanitizer (before 9.14.5, 10.0.8 and 11.1.10, and 12.0.0-alpha.1 to alpha.3) inserted named values as HTML with no further check. This is CWE-79 (and CWE-116, improper neutralization/escaping of output) in an output-escaping helper rather than a memory-safety issue: the trigger requires an application-level coding pattern (combined list and named arguments plus HTML rendering), which is why the assessed vector carries AC:H, UI:R, S:C and only I:L. Component interpolation via <i18n-t> is explicitly not affected because it passes either list or named values, never both, and does not render translations as HTML.

Know when Vue I18N gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 2.1 LOW
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N
vuln.today AI 3.4 LOW

AC:H because exploitation needs the uncommon both-list-and-named pattern plus opt-in escapeParameter and v-html rendering; UI:R and S:C for client-side DOM injection; I:L markup injection, C/A:N by default.

3.1 AV:N/AC:H/PR:N/UI:R/S:C/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:N/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Active
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
Low
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 28, 2026 - 19:03 EUVD
CVE Published
Oct 28, 2026 - 18:20 cve.org
LOW 2.1

DescriptionCVE.org

Vue I18n is the internationalization plugin for Vue.js. From 9.0.0-beta.5 until 11.4.14 and 12.0.0-alpha.5, enabling escapeParameter, called escapeParameterHtml in the Legacy API, does not escape named interpolation values when the same translation call supplies both list and named values because escapeParams() processes only the list branch. Applications that render translations as HTML and pass untrusted named values with a list can insert attacker-controlled markup, including phishing links, forms, and layout changes, and can permit script execution when combined with the srcdoc sanitizer bypass or on releases without the sanitizer. This issue is fixed in versions 11.4.14 and 12.0.0-alpha.5.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 2 npm packages depend on @intlify/vue-i18n-core (2 direct, 0 indirect)

Ecosystem-wide dependent count for version 9.2.0-alpha.7.

Threat Intelligence Overview

Prevalence
High
de facto internationalization plugin for Vue.js, heavy npm adoption
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
High

Priority Score

10
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy