Skip to main content

@hapi/content EUVDEUVD-2026-113373

| CVE-2026-119202 HIGH
Inefficient Regular Expression Complexity (ReDoS) (CWE-1333)
2026-10-29 GitHub_M GHSA-8494-f6mr-cjpv
7.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Identify hapi route accepting multipart uploads
  2. Delivery
    Craft Content-Disposition header with long token, no equals
  3. Exploit
    Send single unauthenticated multipart POST
  4. Execution
    Quadratic regex scan blocks event loop
  5. Impact
    Server stops answering all clients (DoS)

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V2 - Validation and Business Logic Regex complexity limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

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

Exploitation Conditions

Exploitation requires the target to parse an untrusted Content-Disposition header via @hapi/content. The primary path is any hapi route with payload.multipart enabled (the default behavior when a route accepts multipart/form-data), because @hapi/pez invokes Content.disposition() on every part header BEFORE the route handler and before any validation, and such routes can be auth:false - so no authentication is needed. The secondary path is any application that passes untrusted headers directly to Content.disposition(). The only limiting factor is the route payload.maxBytes (default 1 MB), which caps the malicious token length and thus the per-request freeze duration; however a 64 KB token already blocks the process for more than 1 second, so this limit does not prevent exploitation. No special non-default configuration, user interaction, or platform-specific condition is required beyond accepting multipart payloads.

Impact

This is a genuine, actionable availability risk rather than an inflated high-CVSS score. The provided CVSS:3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 7.5) is internally consistent with the mechanism described: a remote, unauthenticated attacker triggers quadratic-time regex processing in Content.disposition() with a single normal-sized multipart request, blocking the Node.js single-threaded event loop for seconds to minutes (the reporter measured 542 s for a ~1 MB token). Because Node.js is single-threaded, blocking the event loop halts ALL clients, so impact is a full service freeze, not degradation - this justifies A:H with C:N/I:N. Signal cross-reference: no EPSS score was supplied, and KEV status is not present (not listed), so there is no evidence of active exploitation; the vuln.today decision label is 'this_week' (urgent but not emergency/act_now), aligning with a high-impact DoS that is trivially exploitable but not confidence-/integrity-affecting. A working proof-of-concept with reproduction timings is published in the GHSA advisory, which raises practical risk materially above a theoretical ReDoS. No SSVC machine-readable decision block (exploitation/automatable/technical-impact) was supplied, so that framework cannot be independently applied beyond the 'this_week' label. Net: prioritize patching this week; it is a real, easy, repeatable DoS against any hapi service accepting multipart uploads, but it cannot be used for data theft or RCE.

Exploit ScenarioDerived

An unauthenticated attacker sends a single, normal-sized HTTP POST to any hapi route that accepts multipart/form-data (payload.multipart enabled), with a Content-Disposition part header containing a long run of token characters and no '=' (e.g. name="f"; followed by 64 KB of 'a'). @hapi/pez calls Content.disposition() on that header before the handler or validation runs, and the unanchored global regex scan backtracks quadratically, freezing the event loop so the process answers no clients for seconds to minutes. A working proof-of-concept with measured timings (0.42 s at 32 KB, 7.17 s at 128 KB, 542 s near the 1 MB default maxBytes) is published in the GHSA advisory, and a small number of such requests keeps the service unavailable.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
1 PoC candidate (unverified) Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 29, 2026

@hapi/content 3.0.6 through 6.0.2 parse Content-Disposition parameters in time that grows with the square of a single parameter token's length, so one unauthenticated multipart/form-data request can freeze the Node.js event loop for seconds to minutes. Because @hapi/pez calls Content.disposition() on every part header before the route handler and before any validation, every hapi route with payload.multipart enabled - including auth:false routes - is remotely reachable by an unauthenticated attacker (CVSS:3.1/AV:N/AC:L/PR:N/UI:N, availability-only impact); applications that hand untrusted headers straight to Content.disposition() are exposed the same way. The GitHub advisory ships a runnable proof-of-concept that measured roughly 7.2 seconds of blocking from a 128 KB token against the 1 MB default payload.maxBytes, and no CISA KEV entry or active-exploitation reporting accompanies this CVE; the flaw is fixed in @hapi/content 6.0.3.

RemediationAI

Upgrade to @hapi/content 6.0.3, the vendor-released fix (release tag v6.0.3, commit 0993851dc7234976a3fce3a7c31662b213c940fd); the advisory is at github.com/hapijs/content/security/advisories/GHSA-8494-f6mr-cjpv. Installations still on the unscoped content package (vulnerable >= 3.0.6, <= 4.0.6) have no patched release listed for that line and must migrate to @hapi/content 6.0.3. The vendor states there is no workaround that removes the risk and that upgrading is required; the only interim reduction is setting a low payload.maxBytes on routes that accept multipart payloads to shorten the per-request freeze, with the trade-off that this caps legitimate upload size and does not eliminate the issue - a 64 KB token still blocks the process for more than a second. Applications that pass untrusted headers directly to Content.disposition() are only fully protected by the 6.0.3 upgrade.

Affected VersionsENISA

content < 6.0.3

Affected Packages

npm @hapi/content fix: 6.0.3
npm content fix: 6.0.3

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in npm

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

Technical ContextAI · show details

CWE-1333 (inefficient regular expression complexity) in @hapi/content's HTTP Content-* header parser. Content.disposition() extracts Content-Disposition parameters with a global regular expression applied through String.prototype.replace(); the parameter-name group ([^\=\*\s]+) is unanchored, so when a run of name characters is not followed by =, the match attempt consumes the whole run and fails, the global scan restarts one character later, and the remaining run is re-read again - total work proportional to the square of the run length. @hapi/pez invokes this on the header of every part in a multipart/form-data body, which in hapi means every route configured with payload.multipart, executed before the handler and before validation; the only bound is the route's payload.maxBytes (1 MB by default), and a 64 KB token already blocks the process for more than a second. The upstream fix (commit 0993851dc7234976a3fce3a7c31662b213c940fd) adds a trailing alternative |[^\=\*\s]+ that consumes an entire un-equals-suffixed name run so the scan resumes after it, plus a $1 === undefined guard in the replace callback to skip that synthetic match; later start positions within the same run would fail identically, so parse results are unchanged while parse time becomes linear. The vulnerable package is identified by CPE cpe:2.3:a:hapijs:content:*:*:*:*:*:*:*:*, consumed by the hapi Node.js web framework ecosystem.

Know when Hapi 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 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Remote unauthenticated single request (AV:N/AC:L/PR:N/UI:N) blocks the shared event loop for a full availability loss (A:H) with no confidentiality or integrity impact and no scope change.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

2
Patch available
Oct 29, 2026 - 21:03 EUVD
CVE Published
Oct 29, 2026 - 20:24 cve.org
HIGH 7.5

DescriptionCVE.org

@hapi/content provides HTTP Content-* header parsing. From 3.0.6 until 6.0.3, Content.disposition() uses an unanchored parameter-name expression in a global regular-expression scan, causing repeated failed matching over the remaining input when a Content-Disposition parameter contains a long token without an equals sign. The resulting quadratic processing can block the Node.js event loop before route handlers or validation when @hapi/pez parses multipart/form-data headers, including unauthenticated hapi routes with payload.multipart enabled, and also affects applications that pass untrusted headers directly to Content.disposition(). This issue is fixed in @hapi/content version 6.0.3.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 516 npm packages depend on @hapi/content (4 direct, 512 indirect)

Ecosystem-wide dependent count for version 6.0.3.

Technical POC Analysis

CWE-1333 (Inefficient Regular Expression Complexity).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Latest POC

1 PoC candidate from github (unverified)

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

A high-severity vulnerability in the @hapi/content library, used by hapi-based Node.js applications, allows unauthenticated attackers to freeze servers with a single malicious request. This availability-only flaw affects any organization running vulnerable hapi applications with multipart file uploads enabled, potentially causing service outages and disrupting critical business operations. Leadership should prioritize patching due to the ease of exploitation and the risk of downtime.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 65% exploitable
Prevalence
Medium
@hapi/content underpins the popular-but-second-tier hapi Node.js framework
Threat Intel
1
1 source
Social Media
2
Sightings
Data Quality
5 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 HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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