Chain id is not verified #57

Closed
opened 2026-04-05 16:13:05 +00:00 by Skipper · 0 comments
Owner

Info

Severity: CRITICAL
Attack vector: network-only

Impact

Allows an authorized SDK client to obtain valid signatures on chains the operator did not approve, including mainnet.

Description

Although chain is stored in the grant and covered by the HMAC, it is never enforced during grant lookup or transaction evaluation. The client controls chain_id without a matching authorization check.

Example flow

  1. Receive a grant intended for one chain, such as a testnet.
  2. Submit a transaction using a different chain_id.
  3. The grant lookup and policy evaluation ignore chain constraints.
  4. The server signs a transaction valid on the attacker-chosen chain.

Mitigation

Filter grants by chain and compare the requested transaction's chain ID against the grant before signing.

# Info **Severity**: **CRITICAL** Attack vector: network-only ## Impact Allows an authorized SDK client to obtain valid signatures on chains the operator did not approve, including mainnet. ## Description Although `chain` is stored in the grant and covered by the HMAC, it is never enforced during grant lookup or transaction evaluation. The client controls `chain_id` without a matching authorization check. ## Example flow 1. Receive a grant intended for one chain, such as a testnet. 2. Submit a transaction using a different `chain_id`. 3. The grant lookup and policy evaluation ignore chain constraints. 4. The server signs a transaction valid on the attacker-chosen chain. ## Mitigation Filter grants by chain and compare the requested transaction's chain ID against the grant before signing.
Skipper added the
Priority
Critical
1
Difficulty
Low
1
Kind
Security
labels 2026-04-05 16:13:05 +00:00
Skipper self-assigned this 2026-04-06 10:07:27 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MarketTakers/arbiter#57