Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessPay for cheapest SIWX-protected route
-
DeliverySet PaymentPayload.resource.url to expensive route
-
ExploitServer records settlement against mismatched route
-
ExecutionReplay SIGN-IN-WITH-X header
-
ImpactRepeatedly access unpaid premium route
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Exploitation requires that the x402 SIWX (Sign-In-With-X) server extension be enabled and that at least two SIWX-protected routes with differing prices exist (a cheap route and an expensive route). The attacker must be a genuine paying client who completes a real payment for the cheapest route and holds a valid SIGN-IN-WITH-X session, then supplies a mismatched PaymentPayload.resource.url pointing at the expensive route. Limiting factors that reduce real-world risk: the attack only affects routes guarded by this specific extension, it requires a legitimate authenticated SIWX session plus an initial payment (so it is not truly anonymous despite the CVSS PR:N), and it is confined to vulnerable versions - @x402/extensions 2.3.1 through 2.28.0, x402 PyPI 2.11.0 through 2.25.0, and the Go module 2.16.0 through 2.28.0. |
| Impact | This is a moderate-severity authorization/payment bypass (CVSS 4.0 base 6.9, Medium) rather than a critical infrastructure flaw. The vendor vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes network-reachable, low-complexity exploitation with no user interaction, but impact is deliberately scoped to Low confidentiality and Low integrity with no availability impact (VC:L/VI:L/VA:N) - consistent with unauthorized access to paid content and revenue loss, not code execution or data compromise. A key signal conflict must be flagged: the vector asserts PR:N (unauthenticated), yet the description makes clear the attacker must already be a legitimate PAYING client who completes a genuine payment for the cheapest SIWX route and presents a valid SIGN-IN-WITH-X header - this is effectively an authenticated, economically-gated abuse, so PR:N overstates ease of mass exploitation. No EPSS score, KEV listing, or public exploit was provided in the input, so there is no evidence of active or widespread exploitation; the realistic threat model is targeted abuse by paying customers of a specific x402-monetized API rather than opportunistic internet-wide attacks. A vendor patch (PR #3840) is available and the root cause is confirmed by source diff, so this is a patch-now item for the small population actually running the affected SIWX extension, but it is not a high-urgency emergency for the broader ecosystem. |
| Exploit ScenarioDerived | An attacker who is a paying client of an x402 SIWX-protected API pays once for the cheapest protected route while setting PaymentPayload.resource.url to point at an expensive premium route. Because settlement is incorrectly recorded against the client-supplied resource URL rather than the actual server request path, the server treats the premium route as paid, letting the attacker repeatedly access it using only a replayed SIGN-IN-WITH-X header without any further payment. No public weaponized exploit was identified, though the vendor fix ships a regression test demonstrating the flow. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 20, 2026
Payment bypass in the x402 Sign-In-With-X (SIWX) server extension lets a client that has paid for one cheap protected route unlock a more expensive route by supplying a mismatched PaymentPayload.resource URL and then reusing only its SIGN-IN-WITH-X header for repeat access. The flaw spans three implementations of the same extension - the npm package @x402/extensions 2.3.1 through 2.28.0, the x402 PyPI package 2.11.0 through 2.25.0, and the Go module github.com/x402-foundation/x402/go/v2 2.16.0 through 2.28.0 - and only manifests when at least two SIWX-protected routes exist at different price points. Exploitation is not anonymous: the attacker must complete a genuine payment for the cheapest route and hold a valid SIWX session, and no public exploit code or confirmed active exploitation was identified at time of analysis; an upstream fix exists in pull request #3840.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed - the remediation is carried in https://github.com/x402-foundation/x402/pull/3840, which changes SIWX to record settlements against the server request path and to use a client-supplied resource URL only when the settlement has no HTTP request, while passing HTTP transport into settle hooks. Because 2.28.0 (npm and Go) and 2.25.0 (PyPI) are the last versions listed as affected, you must move to a release newer than those that actually contains PR #3840 and confirm the fixed tag with the vendor before treating the deployment as remediated; also re-run integration tests that exercise SIWX across multiple price tiers, since the fix changes settle-hook behavior. If an immediate upgrade is not possible, add a compensating control in front of the SIWX extension that rejects any PaymentPayload.resource URL whose path does not exactly match the server-side request path being served, and verify that settlement records are keyed on the request path rather than on client-asserted values - the trade-off is a bespoke middleware patch that must be maintained and re-validated against each upstream release. As a lower-effort containment, collapse SIWX protection to a single price tier (or one protected route per price) so that a mismatched resource URL cannot yield anything more valuable than the route already paid for; this reduces monetization granularity and does not fix the underlying trust of client-supplied resource identifiers. Monitor settlement logs for recorded resources that differ from the request path observed at the HTTP layer, which is the direct signature of this bypass. See https://github.com/x402-foundation/x402/issues/3838 and https://www.vulncheck.com/advisories/x402-x402-extensions-2.3.1-through-2.28.0-siwx-payment-bypass-via-paymentpayload-resource for vendor status.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
x402 is an HTTP-native payment protocol in which resources return 402 Payment Required and clients satisfy the challenge with a PaymentPayload containing payment requirements and a resource URL. The Sign-In-With-X (SIWX) extension adds a post-payment session layer: after a successful settlement the server issues a SIGN-IN-WITH-X header (a SIWE-style signed payload with domain, address, nonce, chain ID, and resource list) that the client replays to reach the resource without paying again. The root cause is CWE-639, Authorization Bypass Through User-Controlled Key: the settle hooks recorded a successful settlement keyed on the client-supplied PaymentPayload.resource.url rather than on the server-side request path actually being served. Because the paid-session record was stored against whatever resource URL the client claimed, a client could pay for the cheapest SIWX route and then assert the expensive route's URL in the payload, with the server subsequently treating the expensive route as already settled. The affected code lives in typescript/packages/extensions/src/sign-in-with-x/hooks.ts, python/x402/extensions/sign_in_with_x/hooks.py, and go/extensions/signinwithx/server.go, so the same logic defect is replicated across the three language SDKs. Pull request #3840 corrects the design by having Sign-In-With-X record settlement against the server request path, honoring a client-supplied resource URL only when the settlement has no associated HTTP request, and by passing HTTP transport information into settle hooks so that settlement and route identity cannot diverge.
Know when X402 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Network-reachable and low-complexity, but the attacker must hold a valid SIWX session and make a legitimate payment, so PR:L not PR:N; impact is limited to paid-content access and payment-integrity bypass with no availability effect.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
The x402 SIWX server extension in @x402/extensions 2.3.1 through 2.28.0, x402 PyPI 2.11.0 through 2.25.0, and Go module 2.16.0 through 2.28.0 contains an authorization bypass vulnerability that allows paying clients to unlock unpaid routes by supplying a mismatched PaymentPayload.resource URL. Attackers can pay for the cheapest SIWX-protected route while setting resource.url to an expensive route, then repeatedly access it using only a SIGN-IN-WITH-X header without further payment.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-105169
GHSA-vxw2-vmfp-vrg3
NVD
CVE.org
EPSS
Exploit-DB