/

CVE-2026-104891

Severity:

HIGH RISK

(7.5)

Wallet Verification Bypass (CWE-290) in mppx Gates

CVE-2026-104891

Deferred

Vulnerability type

Category:

Authentication and Authorization Bypass

CWE:

CWE-290, CWE-863

Impact:

Unauthorized access to paid content

Severity:

HIGH RISK

(7.5)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

mppx condition and token gates could trust a wallet address supplied by the client without verifying that the caller controlled it or invoking the wrapped payment verifier. An unauthenticated attacker could therefore identify a qualifying wallet and obtain content intended to require payment, with cached grants potentially extending access for the configured cache lifetime.

mppx condition and token gates could trust a wallet address supplied by the client without verifying that the caller controlled it or invoking the wrapped payment verifier. An unauthenticated attacker could therefore identify a qualifying wallet and obtain content intended to require payment, with cached grants potentially extending access for the configured cache lifetime.

Affected context

The vulnerability occurs in deployments using mppx-condition-gate or mppx-token-gate for conditional free access. It becomes risky when client-provided credential.source values are treated as proof of wallet ownership, on-chain eligibility is checked without payer authentication, and successful grants can be cached before control of the wallet is established.

The vulnerability occurs in deployments using mppx-condition-gate or mppx-token-gate for conditional free access. It becomes risky when client-provided credential.source values are treated as proof of wallet ownership, on-chain eligibility is checked without payer authentication, and successful grants can be cached before control of the wallet is established.

Exploit preconditions

  • Attack surface: Application endpoints protected by mppx payment or condition gates
  • Required access: No authentication is required beyond the ability to submit a client credential
  • Trigger point: Processing a credential.source wallet address during free-access authorization
  • Why exploitation is possible: The gate may validate whether a named public wallet meets configured conditions without proving that the requester controls that wallet or requiring the wrapped payment verifier to authorize the request
  • Attack surface: Application endpoints protected by mppx payment or condition gates
  • Required access: No authentication is required beyond the ability to submit a client credential
  • Trigger point: Processing a credential.source wallet address during free-access authorization
  • Why exploitation is possible: The gate may validate whether a named public wallet meets configured conditions without proving that the requester controls that wallet or requiring the wrapped payment verifier to authorize the request

Why this happens

The underlying issue is a failure to distinguish an asserted wallet identity from authenticated ownership of that wallet. Treating a client-supplied public address as sufficient authorization allows an attacker to impersonate any qualifying account, which maps to CWE-290: Authentication Bypass by Spoofing and can also result in CWE-863: Incorrect Authorization. Caching can further preserve an authorization decision that was never bound to a verified payer identity.

The underlying issue is a failure to distinguish an asserted wallet identity from authenticated ownership of that wallet. Treating a client-supplied public address as sufficient authorization allows an attacker to impersonate any qualifying account, which maps to CWE-290: Authentication Bypass by Spoofing and can also result in CWE-863: Incorrect Authorization. Caching can further preserve an authorization decision that was never bound to a verified payer identity.

Potential impact

  • Unauthorized users may access paid or restricted content
  • Service operators could lose payment revenue
  • Cached grants could extend unauthorized access for their configured lifetime
  • Attackers could impersonate qualifying wallet holders
  • Downstream authorization and usage metrics may become unreliable
  • Unauthorized users may access paid or restricted content
  • Service operators could lose payment revenue
  • Cached grants could extend unauthorized access for their configured lifetime
  • Attackers could impersonate qualifying wallet holders
  • Downstream authorization and usage metrics may become unreliable

General mitigation guidance

Mitigation generally focuses on making wallet control a prerequisite for authorization rather than treating a submitted address as proof of identity.

Common defensive patterns include:

  • Require cryptographic proof of wallet control before granting free access
  • Route authorization through the wrapped payment verifier or an equivalent trusted verification boundary
  • Bind grants to a verified payer identity, request context, and intended resource
  • Avoid caching authorization decisions until authentication and policy checks have completed
  • Use short, narrowly scoped grant lifetimes and provide safe invalidation controls
  • Apply least-privilege access policies to payment and content services
  • Treat all client-supplied wallet addresses and eligibility claims as untrusted input

Mitigation generally focuses on making wallet control a prerequisite for authorization rather than treating a submitted address as proof of identity.

Common defensive patterns include:

  • Require cryptographic proof of wallet control before granting free access
  • Route authorization through the wrapped payment verifier or an equivalent trusted verification boundary
  • Bind grants to a verified payer identity, request context, and intended resource
  • Avoid caching authorization decisions until authentication and policy checks have completed
  • Use short, narrowly scoped grant lifetimes and provide safe invalidation controls
  • Apply least-privilege access policies to payment and content services
  • Treat all client-supplied wallet addresses and eligibility claims as untrusted input

How teams detect issues like this

Detection can include static and behavioral checks for authorization paths that accept wallet addresses directly from client credentials. Code review should flag condition checks performed before payer verification, successful responses that bypass payment verifiers, and caches keyed only by public wallet addresses or mutable client claims. Integration tests can attempt to request access while naming an unrelated qualifying wallet, and policy enforcement can require proof-of-control checks before issuing free-access receipts. Automated code review tools may help identify these patterns.

Detection can include static and behavioral checks for authorization paths that accept wallet addresses directly from client credentials. Code review should flag condition checks performed before payer verification, successful responses that bypass payment verifiers, and caches keyed only by public wallet addresses or mutable client claims. Integration tests can attempt to request access while naming an unrelated qualifying wallet, and policy enforcement can require proof-of-control checks before issuing free-access receipts. Automated code review tools may help identify these patterns.

Sources

SourceLink
github.comgithub.com/insumerapi/mppx-condition-gate/commit/b1d9935a57ba6d32da49eead1bfb459ad0cd55ab
github.comgithub.com/insumerapi/mppx-condition-gate/commit/ec43a2fcd443a0fa102b6d4203abed2b785bd954
github.comgithub.com/insumerapi/mppx-condition-gate/security/advisories/GHSA-jg6q-3qfh-r9f8

Frequently asked

questions

Yes. An attacker generally only needs to submit a client-controlled credential containing the address of a qualifying wallet.

No. The vulnerable authorization flow checks the wallet's eligibility but does not establish that the caller controls it.

Require cryptographic proof of wallet ownership and complete trusted payment or authorization verification before issuing a free-access receipt.

Treat client-supplied identities as untrusted, bind grants to verified principals, test impersonation scenarios, and ensure caching occurs only after authorization has been securely established.

Yes. An attacker generally only needs to submit a client-controlled credential containing the address of a qualifying wallet.

No. The vulnerable authorization flow checks the wallet's eligibility but does not establish that the caller controls it.

Require cryptographic proof of wallet ownership and complete trusted payment or authorization verification before issuing a free-access receipt.

Treat client-supplied identities as untrusted, bind grants to verified principals, test impersonation scenarios, and ensure caching occurs only after authorization has been securely established.

Find out what's already
exploitable in your codebase.