Skip to main content

HAX open-apis EUVDEUVD-2026-34882

| CVE-2026-46391 HIGH
Permissive List of Allowed Inputs (CWE-183)
2026-05-19 https://github.com/haxtheweb/issues GHSA-4fg7-f244-3j49
8.7
CVSS 4.0 · GitHub Advisory
View

Attack ChainAIDerived

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

  1. Access
    Identify exposed open-apis endpoint
  2. Delivery
    Craft URL containing trusted substring pointing to attacker host
  3. Exploit
    Submit API request triggering server-side fetch
  4. Execution
    Server appends Basic auth header to outbound request
  5. Persist
    Capture credentials on attacker listener
  6. Impact
    Replay credentials against upstream LMS for unreleased content

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Strict input allowlisting
Exploitation Conditions

Exploitation requires only network reachability to a deployed instance of @haxtheweb/open-apis (version < 26.0.0) that exposes the affected endpoints backed by cacheAddress.js, JOSHelpers.js, or elmslnToSite.js, and a target URL parameter the attacker can influence; no authentication, no user interaction, and no non-default configuration is needed since the vulnerable substring-matching logic is present in the default code path. The practical limiting factor is the relatively narrow deployment footprint (HAX/HAXcms operators) and the fact that the leaked secret is only as valuable as the hard-coded upstream credentials configured in that specific deployment - instances that never configured Basic auth for the hard-coded domains have nothing to leak.

Impact

The CVSS 4.0 vector AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:L/SI:N yields 8.7 (High) and matches the reported behavior: network-reachable, no authentication, no user interaction, high confidentiality impact, with a subsequent low confidentiality impact on downstream systems whose credentials are leaked. There is no CISA KEV listing and no EPSS score was supplied, so this is no public exploit identified at time of analysis in terms of active in-the-wild use, but a detailed proof-of-concept with screenshots is published in the GHSA advisory, so publicly available exploit code exists at the conceptual level. The real-world blast radius is bounded by the size of the @haxtheweb/open-apis deployment footprint - primarily HAXcms hosts used in educational settings - rather than mass-internet scale, so prioritize patching wherever this package is deployed but treat the population-level urgency as moderate. The SSVC technical impact is partial (credential exfiltration, not RCE), but automatability is high because the request can be issued in a single crafted API call.

Exploit ScenarioDerived

An attacker enumerates HAXcms / open-apis endpoints reachable on the internet, then issues an API call (e.g., to the cacheAddress route) supplying a target URL such as https://trusted-haxsite.attacker.com/ or https://attacker.com/?trusted-haxsite that contains the hard-coded substring the server checks for. The server's substring validator passes, the server-side HTTP client appends the Basic Authorization header intended for the legitimate hard-coded domain, and the attacker's listener (per the published PoC, fronted by a Cloudflare tunnel) captures the credentials, which the maintainer confirmed grant access to unreleased LMS content on downstream systems.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.0% exploitation probability (EPSS)

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

Alert me

AnalysisAIv3 – Jun 05, 2026

Credential theft via SSRF in HAX open-apis (npm @haxtheweb/open-apis) before version 26.0.0 allows remote unauthenticated attackers to capture HTTP Basic authentication intended for hard-coded trusted domains. The flaw stems from substring-only hostname validation in cacheAddress.js, JOSHelpers.js, and elmslnToSite.js, which lets an attacker craft a URL containing the trusted substring but pointing to attacker infrastructure. A proof-of-concept exists and the maintainer confirmed the leaked credentials grant access to unreleased LMS content on downstream systems, though no public exploitation has been observed.

Earlier versions of this analysis (2)
v2 Jun 05, 2026 - 19:33 cvss changed CVSS 8.7

Credential theft via SSRF in HAX open-apis (npm @haxtheweb/open-apis) versions prior to 26.0.0 allows unauthenticated remote attackers to capture HTTP Basic authentication credentials intended for trusted hard-coded domains. The flaw stems from substring-only hostname validation, letting an attacker craft a URL containing the trusted substring while pointing at an attacker-controlled endpoint. Publicly available exploit code exists in the GHSA advisory, with credentials confirmed by the maintainer to grant access to unreleased LMS content.

v1 May 19, 2026 - 15:32

Server-Side Request Forgery leading to credential theft affects the @haxtheweb/open-apis npm package in versions prior to 26.0.0, where substring-only hostname validation allows attackers to redirect basic authentication credentials to attacker-controlled domains. Publicly available exploit code exists in the GHSA advisory demonstrating credential capture via crafted API calls through cloudflared tunnels, and the maintainer confirmed the leaked credentials grant access to unreleased LMS content on downstream systems. No EPSS or CVSS data is available, and the vulnerability is not currently listed in CISA KEV.

RemediationAI

Apply the vendor-released patch by upgrading @haxtheweb/open-apis to version 26.0.0 or later (npm install @haxtheweb/open-apis@^26.0.0 and redeploy), per GHSA-4fg7-f244-3j49 at https://github.com/haxtheweb/issues/security/advisories/GHSA-4fg7-f244-3j49. If immediate upgrade is not possible, patch the three call sites (api/services/website/cacheAddress.js, api/apps/haxcms/lib/JOSHelpers.js, api/apps/haxcms/convert/elmslnToSite.js) to parse the URL with the WHATWG URL API and compare the parsed hostname against the allowlist with exact equality or strict suffix matching anchored to a dot, instead of String.includes; as a network-layer compensating control, restrict the open-apis service's egress so it can only reach the explicitly trusted upstream hostnames (egress allowlist / outbound proxy), which prevents credential leakage to arbitrary attacker domains at the cost of having to maintain that allowlist when upstream integrations change. Operators should also rotate any Basic auth credentials that were previously embedded in these code paths, since they must be assumed exposed.

Affected VersionsENISA

@haxtheweb/open-apis 9.0.1, < 26.0.0

Affected Packages

npm @haxtheweb/open-apis fix: 26.0.0
euvd haxtheweb_open_apis_9_0_1 fix: 26.0.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in npm, euvd

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

Technical ContextAI · show details

The affected component is @haxtheweb/open-apis, a Node.js backend package that powers HAX/HAXcms - an open-source content authoring and learning management ecosystem. Three server-side functions attempt to gate HTTP Basic credential injection on a list of hard-coded hostnames, but use naive String.includes()-style substring matching rather than proper URL parsing and exact hostname comparison. This is CWE-183 (Permissive List of Allowed Inputs): the allowlist check passes for any URL whose hostname or path merely contains the trusted token, so a host like 'trusted-domain.attacker.tld' or a path like '/trusted-domain' satisfies the validator and the server-side fetch is sent - along with the Authorization header - to an attacker-controlled origin. The result is a textbook SSRF-meets-credential-leak primitive.

Know when the next one hits your stack

  • 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

GitHub Advisory PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:L/SI:N/SA:N

Primary rating from GitHub Advisory · only source for this CVE.

CVSS VectorGitHub Advisory

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

Lifecycle Timeline

1
CVSS changed
Jun 05, 2026 - 19:22 NVD
8.7 (HIGH)

DescriptionGitHub Advisory

Summary

Multiple functions conduct substring-only matching to validate hostnames to which basic authorization should be sent. An attacker can append the matched substrings to an attacker-controlled endpoint and capture authentication.

Details

api/services/website/cacheAddress.js, api/apps/haxcms/lib/JOSHelpers.js, and api/apps/haxcms/convert/elmslnToSite.js use similar logic to check for hard-coded site names. However, the logic only looks for the substring to be included in the user-controlled string, allowing an attacker to craft an API call and extract the credentials intended for the hard-coded domains.

PoC

Making API calls to an affected endpoint will result in credential theft. The attacker-controlled domains in these proofs of concept are cloudflared tunnels, protecting the production credentials from unencrypted exposure.

cacheAddress.js: <img width="3404" height="1656" alt="ssrf_cred_theft" src="https://github.com/user-attachments/assets/0a87cef5-3c4d-450a-8bb7-35123d5f621b" />

elmslnToSite.js: <img width="3409" height="1641" alt="theft2" src="https://github.com/user-attachments/assets/bede82cc-a613-4fc7-bbf6-76166af784f5" />

JOSHelpers.js: <img width="3407" height="1597" alt="theft3" src="https://github.com/user-attachments/assets/4f3f8bee-443e-4b22-9d41-eb9726619d36" />

Impact

This vulnerability allows internal data, including secrets, to be exfiltrated to an attacker-controlled domain. Credentials were confirmed with the maintainer to grant access to unreleased LMS content on subsequent systems; out of scope for PoC.

Executive ViewAI

Why It Matters

The @haxtheweb/open-apis npm package contains a high-severity vulnerability allowing unauthenticated attackers to steal HTTP Basic authentication credentials, with publicly available exploit code existing. Compromised credentials grant access to unreleased LMS content and downstream systems, exposing sensitive organizational data. Immediate patching is critical to prevent unauthorized access and data compromise.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.0%
Top 96% exploitable
Threat Intel
1
1 source
Social Media
1
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 No
EPSS 0.0%
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
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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