CVE-2026-44966
High · 8.3CVSS
8.3
EPSS
0.6%
Published
May 26, 2026
CISA due date
—
Cloudanix analysis
A template library some applications use can be abused to crash or take over the app if it is allowed to process templates written by outsiders.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Data Tampering
- Component
- Library
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Velocity.js 2.1.5 and earlier can pollute Object.prototype while evaluating #set directives. If a template the attacker influences is rendered, inherited properties on every object can be overwritten, causing application-wide logic failures. Impact ranges from denial of service to remote code execution depending on how the Node.js host uses polluted properties.
Why it matters to the business
Products that let users supply or edit Velocity templates risk outages and, in some server-side JavaScript environments, unauthorized code execution with confidentiality and integrity effects. shepherdwind velocity.js is a shared template engine, so any application embedding 2.1.5 or earlier is in scope. The issue has been public for about 140 days, is not on CISA KEV, has no known exploit maturity, and a low EPSS (~0.006, up ~11% over 30 days). Treat as high severity where untrusted templates are rendered; mass exploitation is not currently indicated.
How an attack unfolds
An attacker who can influence a Velocity template processed by a vulnerable velocity.js instance uses a #set directive to write attacker-controlled keys onto Object.prototype. After render, later application logic that trusts object shape or inherited properties may crash, take unintended branches, or—in some server environments—reach dangerous sinks. No authentication is required if templates or template fragments are accepted from unauthenticated clients. No named threat actors or ransomware campaigns are associated with this CVE.
How to fix it
No patched version was listed with this intelligence. Stop rendering templates or #set content supplied or influenced by untrusted users. Inventory shepherdwind velocity.js (npm package velocity.js) at 2.1.5 and earlier and upgrade as soon as an upstream security release is published. Compensating controls: reject templates that reference prototype-related keys, isolate the template engine in a least-privilege process, and avoid passing polluted objects into dangerous sinks. Apply vendor updates if a downstream product embeds this library.
How to confirm the fix worked
Scan lockfiles, SBOM, and images for velocity.js 2.1.5 or earlier. Confirm production flows do not accept user-controlled Velocity templates. After an upgrade, verify the resolved version is newer than 2.1.5 and re-run dependency and container scans. In staging, render only trusted templates and confirm #set cannot change Object.prototype.
Typical attack path
- Identify an application that renders Velocity templates with velocity.js 2.1.5 or earlier and accepts template content or fragments from untrusted input.
- Submit a template whose #set directive targets the object prototype rather than a normal variable.
- Cause the application to render that template so polluted properties apply globally for the process.
- Trigger follow-on application behavior that inherits the polluted properties, producing denial of service or further code execution depending on the runtime.
How to detect it
There is no public exploit maturity and no named actors, so look for attempted prototype pollution in template traffic rather than a known implant. Review HTTP and API logs for template upload, preview, or render endpoints; inspect bodies and parameters for #set directives that mention prototype-related keys. On hosts running Node.js with velocity.js, review application error spikes, unexpected inherited properties, and process crashes after template renders. Check package manifests and node_modules for velocity.js <= 2.1.5 as exposure evidence, not proof of compromise.
- #set($__proto__
- #set(${__proto__
- #set($constructor.prototype
- __proto__
- constructor.prototype
- velocity.js
What your security team should do
- Immediately inventory all uses of shepherdwind velocity.js / npm velocity.js at 2.1.5 and earlier.
- Disable or tightly restrict rendering of untrusted Velocity templates until a patch is available and deployed.
- Subscribe to upstream velocity.js releases and patch as soon as a fixed version is published.
- Hunt retrospectively for prototype-pollution style #set content in template-related request logs (see detection_guidance).
- Prioritize internet-facing services that accept templates from unauthenticated users; KEV and exploit-maturity signals do not currently justify emergency mass-exploitation response.
The record
Velocity.js is a JavaScript implementation of the Apache Velocity template engine. In 2.1.5 and earlier, a prototype pollution vulnerability was discovered in velocityjs. This issue occurs during the processing of #set directives in Velocity templates. If an application renders a template controlled by an attacker, it is possible to modify Object.prototype, potentially leading to Denial of Service (DoS) or Remote Code Execution (RCE) depending on the server environment.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | velocityjs | 0 | No fix |
Related vulnerabilities
- GHSA-j658-c2gf-x6pq Velocity.js has a Prototype Pollution vulnerability through #set path assignment Same vulnerability
- CVE-2026-104852 GraphQL Tools provides utilities for building, stitching, and mocking GraphQL schemas. CWE-1321
- CVE-2026-104849 Tinypool is a minimal Node.js worker thread pool implementation. CWE-1321
- CVE-2026-104848 Tinypool is a minimal Node.js worker thread pool implementation. CWE-1321
- CVE-2026-104183 stream-json is a micro-library of stream components for processing JSON and JSONC with a… CWE-1321
- CVE-2026-102992 piscina is a node.js worker pool implementation. CWE-1321
- CVE-2026-101908 Axios is a promise-based HTTP client for the browser and Node.js. CWE-1321
- CVE-2026-101909 Axios is a promise-based HTTP client for the browser and Node.js. CWE-1321