Skip to content

Latest commit

 

History

History
460 lines (325 loc) · 20.4 KB

File metadata and controls

460 lines (325 loc) · 20.4 KB

Security Policy

Security Updates

This repository has been updated to address critical security vulnerabilities across multiple dependencies. All dependencies, dev dependencies, peer dependencies, and package overrides have been configured to use secure versions where available.


CVE-2026-23864 - Next.js and React Server Components

Overview

CVE-2026-23864 - Critical security vulnerability affecting Next.js and React Server Components.

Vulnerability Details

This vulnerability could potentially allow:

  • Remote code execution (RCE) through unsafe deserialization
  • Denial of Service (DoS) attacks
  • Source code exposure

Remediation

All affected packages have been upgraded to the following secure versions:

  • Next.js: 15.5.10 (upgraded from 15.4.10)
  • React: 19.2.4 (upgraded from 19.0.1)
  • react-dom: 19.2.4 (upgraded from 19.0.1)
  • eslint-config-next: 15.5.10 (upgraded from 15.4.10)

References


h3 Request Smuggling (TE.TE) Vulnerability

Overview

Issue #59 - Critical HTTP Request Smuggling vulnerability in h3 v1.

Vulnerability Details

  • Affected versions: <= 1.15.4
  • Patched version: >= 1.15.5
  • Severity: Critical

The vulnerability occurs because readRawBody performs a strict case-sensitive check for the Transfer-Encoding header. It explicitly looks for "chunked", but per RFC, this header should be case-insensitive. If a request is sent with Transfer-Encoding: ChuNked (mixed case), h3 misses it and assumes the body is empty, leaving the actual body on the socket. This triggers a classic TE.TE Desync (Request Smuggling) attack when running behind Layer 4 proxies or anything that doesn't normalize headers.

Impact

Since H3/Nuxt/Nitro is often used in containerized setups behind TCP load balancers, an attacker can use this to smuggle requests past WAFs or desynchronize the socket to poison other users' connections.

Remediation

  • h3: Overridden to >= 1.15.5 via pnpm overrides
  • Transitive dependencies: Fixed via @rainbow-me/rainbowkit, @walletconnect/core, @walletconnect/utils, and wagmi

References


Preact JSON VNode Injection Vulnerability

Overview

Issue #56 - HTML Injection via JSON Type Confusion in Preact.

Vulnerability Details

  • Affected versions: >= 10.26.5, < 10.26.10 | >= 10.27.0, < 10.27.3 | >= 10.28.0, < 10.28.2
  • Patched versions: 10.26.10 | 10.27.3 | 10.28.2
  • Severity: Low to Medium

A regression introduced in Preact 10.26.5 caused JSON serialization protection to be softened. In applications where values from JSON payloads are assumed to be strings and passed unmodified to Preact as children, a specially-crafted JSON payload could be constructed that would be incorrectly treated as a valid VNode, resulting in HTML injection.

Impact

  • Applications are vulnerable if they:
    • Pass unmodified, unsanitized values from user-modifiable data sources directly into the render tree
    • Assume these values are strings but the data source could return actual JavaScript objects
    • Have insecure API design (no type validation) or a compromised data source

Remediation

  • preact: Overridden to patched versions via pnpm overrides:
    • >= 10.26.5 < 10.26.10>= 10.26.10
    • >= 10.27.0 < 10.27.3>= 10.27.3
    • >= 10.28.0 < 10.28.2>= 10.28.2

References


@coinbase/wallet-sdk Security Vulnerability

Overview

Security vulnerability in outdated versions of Coinbase Wallet SDK.

Vulnerability Details

  • Affected versions: >= 4.0.0-beta.0, < 4.3.0
  • Patched version: >= 4.3.0
  • Impact: Does not directly affect users' keys, smart contracts, or funds

Remediation

  • @coinbase/wallet-sdk: Overridden to >= 4.3.0 via pnpm overrides
  • Transitive dependencies: Fixed via @rainbow-me/rainbowkit and wagmi

Elliptic Cryptographic Vulnerability

Overview

Issue #57 - ECDSA implementation vulnerability in Elliptic package.

Vulnerability Details

  • Affected versions: <= 6.6.1 (all known versions)
  • Patched version: None available at this time
  • Severity: High

The ECDSA implementation generates incorrect signatures if an interim value of 'k' (as computed based on step 3.2 of RFC 6979) has leading zeros and is susceptible to cryptanalysis, which can lead to secret key exposure. The byte-length of 'k' is incorrectly computed, resulting in truncation during computation.

Impact

  • Legitimate transactions or communications will be broken
  • Under certain conditions, attackers could derive the secret key if they obtain both a faulty signature generated by a vulnerable version and a correct signature for the same inputs

Current Status

⚠️ No patch available - This affects all known versions of Elliptic (versions less than or equal to 6.6.1).

Transitive Dependencies

  • Introduced via @rainbow-me/rainbowkit and wagmi

Recommendations

  • Monitor for updates from the Elliptic maintainers
  • Consider alternative cryptographic libraries if possible
  • Review usage of affected packages and assess risk based on your use case

References


jsdiff (diff) Denial of Service Vulnerability

Overview

Issue #61 - Denial of Service vulnerability in parsePatch and applyPatch methods.

Vulnerability Details

  • Affected versions: < 4.0.4 or < 8.0.3 (depending on major version)
  • Patched versions: >= 4.0.4 or >= 8.0.3
  • Severity: Medium

Attempting to parse a patch whose filename headers contain the line break characters \r, \u2028, or \u2029 can cause the parsePatch method to enter an infinite loop, consuming memory without limit until the process crashes.

Impact

  • Applications are vulnerable to denial-of-service attacks if they call parsePatch with user-provided patches
  • A large payload is not needed to trigger the vulnerability
  • Some applications may be vulnerable even when calling parsePatch on patches generated by the application itself if users can control filename headers

Remediation

  • diff/jsdiff: Overridden to secure versions via pnpm overrides in root package.json:
    • < 4.0.4>= 4.0.4
    • >= 5.0.0 < 8.0.3>= 8.0.3
  • Transitive dependency: Fixed via ts-node

References


minimatch Regular Expression DoS Vulnerabilities

Overview

  • Issue #73 - ReDoS via repeated wildcards with non-matching literal
  • Issue #79 - ReDoS via multiple non-adjacent GLOBSTAR segments
  • Issue #78 - ReDoS via nested *() / +() extglobs generating catastrophic backtracking regexes

Vulnerability Details

  • Affected versions: < 3.1.3 and < 3.1.4 (depending on the specific issue)
  • Patched versions: >= 3.1.4
  • Severity: Medium to High (DoS)

minimatch compiles glob patterns into regular expressions. Certain patterns (many consecutive *, multiple ** segments, or nested extglobs like *(*(*(a|b)))) result in regexes that exhibit catastrophic backtracking in V8, causing CPU to spike and the Node.js event loop to stall for seconds to minutes on relatively small inputs.

Impact

  • Any code path that accepts attacker-controlled glob patterns and passes them into minimatch() is vulnerable to Denial of Service
  • Realistic surfaces include configuration-driven tooling or multi-tenant systems where one tenant controls glob rules used in a shared process

In this repo, minimatch is only pulled in transitively via eslint / @eslint/eslintrc / eslint-config-next, which are used as dev tooling. They are not part of the production runtime of the Next.js app.

Remediation

  • minimatch: Overridden to >= 3.1.4 via pnpm overrides in ui/package.json:
    • minimatch@<3.1.4>= 3.1.4

This ensures ESLint and related tooling use the patched version even if their own dependency ranges are looser.


@isaacs/brace-expansion Uncontrolled Resource Consumption

Overview

Issue #64 - Uncontrolled resource consumption via unbounded brace range expansion.

Vulnerability Details

  • Affected versions: <= 5.0.0
  • Patched version: >= 5.0.1
  • Severity: Medium (DoS)

@isaacs/brace-expansion eagerly and synchronously expands brace patterns like {0..99}{0..99}{0..99}{0..99}{0..99} into all combinations, causing exponential growth in CPU and memory usage and potentially crashing the Node.js process.

Impact

  • Any feature that allows untrusted input to be passed into brace expansion can be used for a Denial of Service attack
  • In this repo, it is only used via tailwindcss / tailwindcss-animate build tooling, not in the production request path

Remediation

  • @isaacs/brace-expansion: Overridden to >= 5.0.1 via pnpm overrides in ui/package.json:
    • @isaacs/brace-expansion@<=5.0.0>=5.0.1

flatted DoS via Unbounded Recursion in parse() Revive Phase

Overview

Issue #80 - DoS via unbounded recursion in flatted.parse() when reviving circular references.

Vulnerability Details

  • Affected versions: < 3.4.0
  • Patched version: >= 3.4.0
  • Severity: Medium (DoS)

flatted.parse() previously used a deeply recursive revive strategy that could overflow the stack or consume excessive resources when given specially crafted payloads with deeply nested or self-referential indices.

Impact

  • Any code that passes attacker-controlled payloads into flatted.parse() can be crashed
  • In this repo, flatted is pulled in via ESLint tooling (via eslint / eslint-config-next), not the production app runtime

Remediation

  • flatted: Overridden to >= 3.4.0 via pnpm overrides in ui/package.json:
    • flatted@<3.4.0>=3.4.0

ajv ReDoS When Using $data Option

Overview

Issue #68 - ReDoS in ajv when the $data option is enabled.

Vulnerability Details

  • Affected versions: < 6.14.0 (for the v6 line)
  • Patched version: >= 6.14.0
  • Severity: Medium to High (DoS) when $data: true is used

When $data is enabled, ajv allows runtime data to be used as patterns and passes them directly to RegExp() without validation. A malicious pattern (for example, ^(a|a)*$) combined with crafted input can cause catastrophic backtracking and long CPU stalls.

Impact

  • Any code using ajv with $data: true on untrusted input is vulnerable
  • In this repo, ajv is only introduced transitively through ESLint-related tooling and is not used directly by the runtime app

Remediation

  • ajv: Overridden to >= 6.14.0 via pnpm overrides in ui/package.json:
    • ajv@<6.14.0>=6.14.0

bn.js Infinite Loop in maskn(0)

Overview

Issue #71 - Infinite loop / process hang in bn.js when maskn(0) is called.

Vulnerability Details

  • Affected versions: < 4.12.3 and < 5.2.3
  • Patched versions:
    • >= 4.12.3 for the 4.x line
    • >= 5.2.3 for the 5.x line
  • Severity: Medium (DoS) but potentially higher if used in critical crypto flows

Calling maskn(0) on a BN instance in vulnerable versions corrupts internal state and can cause methods like toString() and divmod() to enter infinite loops, hanging the process.

Impact

  • In this repo, bn.js is introduced transitively via @rainbow-me/rainbowkit and wagmi, which are used in the wallet/connector stack of the UI
  • That means this is part of the runtime client/web3 interaction layer, not just tooling

Remediation

  • bn.js: Overridden to >= 4.12.3 via pnpm overrides in ui/package.json:
    • bn.js@<4.12.3>=4.12.3

This ensures the patched version is used even if upstream packages haven't yet bumped their dependency ranges.


Axios advisories (#126, #128, GHSA-gcfj-64vw-6mp9)

Overview

Multiple axios (npm) advisories remediations are stacked behind one override to 1.18.0:

  • #126 / #128 — CRLF header injection chain (IMDSv2 bypass) and NO_PROXY hostname normalisation bypass (SSRF); originally affected >= 1.0.0, < 1.15.0 (patched floor was 1.15.0).
  • GHSA-gcfj-64vw-6mp9 — Node HTTP adapter can inherit a polluted Object.prototype.proxy after interceptor config cloning; affected >= 1.15.2, < 1.18.0 (patched floor 1.18.0).

Vulnerability Details

  • CVE / Issues: #126 (CRLF header injection chain → IMDSv2 bypass, CVSS 9.9), #128 (NO_PROXY hostname normalisation bypass → SSRF), GHSA-gcfj-64vw-6mp9 (inherited proxy after interceptor cloning)
  • Affected versions (union currently mitigated): >= 1.0.0, < 1.18.0 (plus the 0.x band handled separately below)
  • Current patched floor: 1.18.0
  • Severity: Critical (#126), High (#128 / GHSA-gcfj-64vw-6mp9)

#126 — CRLF Header Injection: If any dependency in the stack has a prototype-pollution vulnerability, polluted Object.prototype properties are merged into Axios request headers without CRLF sanitisation. A crafted \r\n sequence in a header value becomes a request-smuggling payload, enabling AWS IMDSv2 bypass and IAM credential theft.

#128 — NO_PROXY Bypass: Axios performs literal string comparison for NO_PROXY rules. Hostnames with a trailing dot (localhost.) or IPv6 literals ([::1]) bypass the check and are incorrectly proxied through any configured HTTP proxy, undermining SSRF protections.

GHSA-gcfj-64vw-6mp9 — Inherited proxy after interceptor cloning: Axios hardens merged request config with a null-prototype object, but a common interceptor pattern ({...config} / Object.assign({}, config)) re-materialises a regular object. The Node HTTP adapter then reads config.proxy through the prototype chain, so a polluted Object.prototype.proxy can redirect plaintext HTTP requests.

Remediation

  • Mitigation date: 2026-04-16 (updated 2026-08-05 for GHSA-gcfj-64vw-6mp9)
  • Mitigation type: pnpm override (transitive — blocked from direct parent upgrade)
  • axios: Overridden to 1.18.0 via root pnpm-workspace.yaml (axios@>=1.0.0 <1.18.0)
  • Note: Prior redirect target 1.16.0 (from an earlier advisory) fell inside the new vulnerable range >=1.15.2 <1.18.0 and was refreshed to 1.18.0
  • Transitive paths fixed: @rainbow-me/rainbowkit → axios and wagmi → axios
  • Validation: pnpm lockfile regenerated; axios@1.16.0 no longer present

Impact Surface

axios is a runtime dependency of @rainbow-me/rainbowkit and wagmi (wallet connection stack). These libraries run client-side in the browser. GHSA-gcfj-64vw-6mp9 specifically affects the Node HTTP adapter after interceptor config cloning; browser adapters are not the primary impact path. Residual risk remains if any server-side Node axios usage inherits a polluted Object.prototype.proxy.


CVE-2026-45409 — idna DoS via incomplete length checks

Overview

CVE-2026-45409 / GHSA-65pc-fj4g-8rjx — specially crafted inputs to idna.encode() (and lesser-used alternate helpers) can bypass the CVE-2024-3651 length guard and consume excessive CPU.

Vulnerability Details

  • Affected versions: < 3.15
  • Patched version: >= 3.15
  • Severity: Medium
  • Previously locked version: 3.14 (above the incomplete 3.14 partial fix for encode(), but still below the 3.15 floor covering alternate entry points)

Remediation

  • Mitigation date: 2026-08-05
  • Mitigation type: uv override-dependencies (transitive)
  • idna: idna>=3.15 under [tool.uv] override-dependencies
  • Validation: uv lock regenerated; lockfile resolves idna to >=3.15

Impact Surface

Transitive via requests / aiohttp / yarl used by the Python minting client for HTTP calls. Exploitation requires attacker-controlled domain-like strings of extreme length; normal DNS hostnames are capped at 253 characters.


web3.py SSRF via CCIP Read / EIP-3668 OffchainLookup (#121, #122)

Overview

Issues #121 (requirements.txt) and #122 (uv.lock) — SSRF in web3.py's CCIP Read implementation.

Vulnerability Details

  • Affected versions: >= 6.0.0b3, < 7.15.0
  • Patched version: 7.15.0
  • Severity: High (SSRF — blind and redirect-amplified)

web3.py's handle_offchain_lookup() and async_handle_offchain_lookup() issue HTTP requests to URLs supplied by smart contracts via OffchainLookup reverts (EIP-3668), without:

  • Restricting to https://
  • Blocking private/reserved IP ranges (loopback, link-local, RFC1918)
  • Validating redirect targets

CCIP Read is enabled by default (global_ccip_read_enabled = True). A malicious contract can force the web3.py process to probe or exfiltrate from internal services (including AWS cloud metadata endpoints).

Remediation

  • Mitigation date: 2026-04-16
  • Mitigation type: Direct dependency upgrade
  • web3: Bumped from 7.14.17.15.0 in pyproject.toml and requirements.txt
  • Validation: uv lock regenerated; web3 v7.14.1 no longer present

Impact Surface

web3.py is used in the Python minting client for on-chain interactions (eth_call / contract calls). Any call against an untrusted contract address could trigger CCIP Read. Post-upgrade the library applies destination validation and redirect controls per the EIP-3668 security recommendations.


Package Overrides Summary

ui/package.json Overrides

The following overrides are configured in ui/package.json:

{
  "h3@<=1.15.4": ">=1.15.5",
  "preact@>=10.26.5 <10.26.10": ">=10.26.10",
  "preact@>=10.27.0 <10.27.3": ">=10.27.3",
  "preact@>=10.28.0 <10.28.2": ">=10.28.2",
  "@coinbase/wallet-sdk@>=4.0.0-beta.0 <4.3.0": ">=4.3.0",
  "react@>=19.2.0 <19.2.4": ">=19.2.4",
  "react-dom@>=19.2.0 <19.2.4": ">=19.2.4",
  "next@>=15.5.0 <15.5.10": ">=15.5.10",
  "minimatch@<3.1.4": ">=3.1.4",
  "@isaacs/brace-expansion@<=5.0.0": ">=5.0.1",
  "flatted@<3.4.0": ">=3.4.0",
  "ajv@<6.14.0": ">=6.14.0",
  "bn.js@<4.12.3": ">=4.12.3",
  "axios@>=1.0.0 <1.18.0": "1.18.0"
}

Root package.json Overrides

The following overrides are configured in root package.json:

{
  "diff@<4.0.4": ">=4.0.4",
  "diff@>=5.0.0 <8.0.3": ">=8.0.3"
}

CVE-2026-13149 - brace-expansion DoS

  • Date: 2026-08-07
  • Package: brace-expansion (npm, transitive)
  • Vulnerable range: <1.1.16 | >=2.0.0 <2.1.2 | >=3.0.0 <5.0.7
  • Fixed/blocked target: 1.1.16 / 2.1.2 / 5.0.7 via pnpm overrides (>=3.0.0 <5.0.75.0.7; no patched 3.x/4.x release exists)
  • Mitigation type: override (fail-closed); prior lockfile had 1.1.14 and 5.0.6
  • Validation status: pnpm install --lockfile-only

GHSA-f88m-g3jw-g9cj - sharp libvips inherited CVEs

  • Date: 2026-08-14
  • Package: sharp (npm, transitive via Next.js image pipeline)
  • Vulnerable range: < 0.35.0
  • Fixed/blocked target: 0.35.3 via pnpm override sharp@<0.35.0
  • Mitigation type: override (fail-closed); prior lockfile had 0.34.5
  • Validation status: pnpm install --lockfile-only

CVE-2026-41907 - uuid buffer bounds (11.x only)

  • Date: 2026-08-14
  • Package: uuid (npm, transitive)
  • Vulnerable range (patched here): >=11.0.0 <11.1.1
  • Fixed/blocked target: 11.1.1 via pnpm override uuid@>=11.0.0 <11.1.1
  • Mitigation type: override (fail-closed) for 11.x only
  • MAJOR BUMP DEFERRED: residual uuid@8 / 9 have no same-major patch; forcing 11.1.1 is a major jump (wallet/connector chains). Residual Dependabot alert accepted until parents can upgrade.
  • Validation status: pnpm install --lockfile-only

Installation

After these updates, run:

# Install UI dependencies
cd ui
pnpm install

# Install root dependencies
cd ..
pnpm install

This will ensure all dependencies are resolved to the secure versions specified in the package.json files and overrides.


Reporting Security Issues

If you discover a security vulnerability in this repository, please report it responsibly by contacting the maintainers directly rather than opening a public issue.


References