-
-
Notifications
You must be signed in to change notification settings - Fork 9
fix(deps): update dependency vue-i18n to v9.14.5 [security] #26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Join our Discord community for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR/Issue comments)Type Other keywords and placeholders
CodeRabbit Configuration File (
|
✅ Deploy Preview for uni-typed ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
@uni-helper/uni-app-components
@uni-helper/uni-app-types
@uni-helper/uni-cloud-types
@uni-helper/uni-types
@uni-helper/uni-ui-types
commit: |
e432653
to
85b7a39
Compare
85b7a39
to
afc3827
Compare
afc3827
to
9a777c2
Compare
9a777c2
to
a050baa
Compare
27df567
to
ef4b50d
Compare
ef4b50d
to
658270f
Compare
658270f
to
9e8324b
Compare
9e8324b
to
65ec865
Compare
65ec865
to
13399c8
Compare
13399c8
to
dcc2e60
Compare
0ff8517
to
9ef83c6
Compare
9ef83c6
to
97f4b62
Compare
97f4b62
to
a32ccc7
Compare
a32ccc7
to
485e95d
Compare
e8d1ea4
to
31658a7
Compare
31658a7
to
690fb1e
Compare
Coming soon: The Renovate bot (GitHub App) will be renamed to Mend. PRs from Renovate will soon appear from 'Mend'. Learn more here.
This PR contains the following updates:
9.14.1
->9.14.5
GitHub Vulnerability Alerts
CVE-2024-52809
Vulnerability type
XSS
Description
vue-i18n can be passed locale messages to
createI18n
oruseI18n
.we can then translate them using
t
and$t
.vue-i18n has its own syntax for local messages, and uses a message compiler to generate AST.
In order to maximize the performance of the translation function, vue-i18n uses bundler plugins such as
@intlify/unplugin-vue-i18n
and bulder to convert the AST in advance when building the application.By using that AST as the locale message, it is no longer necessary to compile, and it is possible to translate using the AST.
The AST generated by the message compiler has special properties for each node in the AST tree to maximize performance. In the PoC example below, it is a
static
property, but that is just one of the optimizations.About details of special properties, see https://github.com/intlify/vue-i18n/blob/master/packages/message-compiler/src/nodes.ts
In general, the locale messages of vue-i18n are optimized during production builds using
@intlify/unplugin-vue-i18n
,so there is always a property that is attached during optimization like this time.
But if you are using a locale message AST in development mode or your own, there is a possibility of XSS if a third party injects.
Reproduce (PoC)
Workarounds
Before v10.0.0, we can work around this vulnerability by using the regular compilation (
jit: false
of@intlify/unplugin-vue-i18n
plugin configuration) way instead of jit compilation.References
CVE-2024-52810
Vulnerability type: Prototype Pollution
Affected Package:
Product: @intlify/shared
Version: 10.0.4
Vulnerability Location(s):
node_modules/@​intlify/shared/dist/shared.cjs:232:26
Description:
The latest version of
@intlify/shared (10.0.4)
is vulnerable to Prototype Pollution through the entry function(s)lib.deepCopy
. An attacker can supply a payload withObject.prototype
setter to introduce or modify properties within the global prototype chain, causing denial of service (DoS) the minimum consequence.Moreover, the consequences of this vulnerability can escalate to other injection-based attacks, depending on how the library integrates within the application. For instance, if the polluted property propagates to sensitive Node.js APIs (e.g., exec, eval), it could enable an attacker to execute arbitrary commands within the application's context.
PoC:
References
Prototype Pollution Leading to Remote Code Execution - An example of how prototype pollution can lead to command code injection.
OWASP Prototype Pollution Prevention Cheat Sheet - Best practices for preventing prototype pollution.
PortSwigger Guide on Preventing Prototype Pollution - A detailed guide to securing your applications against prototype pollution.
CVE-2025-27597
Vulnerability type:
Prototype Pollution
Vulnerability Location(s):
Description:
The latest version of
@intlify/message-resolver (9.1)
and@intlify/vue-i18n-core (9.2 or later)
, (previous versions might also affected), is vulnerable to Prototype Pollution through the entry function(s)handleFlatJson
. An attacker can supply a payload with Object.prototype setter to introduce or modify properties within the global prototype chain, causing denial of service (DoS) a the minimum consequence.Moreover, the consequences of this vulnerability can escalate to other injection-based attacks, depending on how the library integrates within the application. For instance, if the polluted property propagates to sensitive Node.js APIs (e.g., exec, eval), it could enable an attacker to execute arbitrary commands within the application's context.
PoC:
CVE-2025-53892
Summary
The escapeParameterHtml: true option in Vue I18n is designed to protect against HTML/script injection by escaping interpolated parameters. However, this setting fails to prevent execution of certain tag-based payloads, such as
<img src=x onerror=...>
, if the interpolated value is inserted inside an HTML context using v-html.This may lead to a DOM-based XSS vulnerability, even when using escapeParameterHtml: true, if a translation string includes minor HTML and is rendered via v-html.
Details
When escapeParameterHtml: true is enabled, it correctly escapes common injection points.
However, it does not sanitize entire attribute contexts, which can be used as XSS vectors via:
<img src=x onerror=alert(1)>
PoC
In your Vue I18n configuration:
Use this interpolated payload:
const payload = '<script>alert("xss")</script>';
Render the translation using v-html (even not using v-html):
<p v-html="$t('vulnerable', { payload })"></p>
Expected: escaped content should render as text, not execute.
Actual: script executes in some environments (or the payload is partially parsed as HTML).
Impact
This creates a DOM-based Cross-Site Scripting (XSS) vulnerability despite enabling a security option (escapeParameterHtml) .
Release Notes
intlify/vue-i18n (vue-i18n)
v9.14.5
Compare Source
What's Changed
🔒 Security Fixes
Full Changelog: intlify/vue-i18n@v9.14.4...v9.14.5
v9.14.4
Compare Source
What's Changed
🐛 Bug Fixes
Full Changelog: intlify/vue-i18n@v9.14.3...v9.14.4
v9.14.3
Compare Source
What's Changed
🔒 Security Fixes
handleFlatJson
, about details see GHSA-p2ph-7g93-hw3mFull Changelog: intlify/vue-i18n@v9.14.2...v9.14.3
v9.14.2
Compare Source
What's Changed
🔒 Security Fixes
Full Changelog: intlify/vue-i18n@v9.14.1...v9.14.2
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - Between 12:00 AM and 03:59 AM, on day 1 of the month ( * 0-3 1 * * ) (UTC).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.