Encrypted key material not bound to wallet address — cross-wallet signing possible #54

Open
opened 2026-04-05 16:07:17 +00:00 by Skipper · 0 comments
Owner

Description

The evm_wallet table is not integrity-protected, and the encrypted key material is not cryptographically bound to the wallet address. During signing, the code does not verify that the decrypted private key actually corresponds to the requested address.

Details

  • Severity: CRITICAL
    • Attack Vector: Offline

Impact

Allows an attacker to make the server sign transactions with another wallet's private key and spend funds from that wallet.

Example Flow

  1. Obtain any valid wallet access for wallet A.
    1. Modify the SQLite database so wallet A's row points to wallet B's encrypted private key.
    1. Request signing for wallet A.
    1. The server decrypts wallet B's key, skips key-to-address verification, and signs a transaction valid for wallet B.

Mitigation

Add integrity protection to evm_wallet, bind ciphertexts to wallet addresses using AAD or equivalent, and verify after decryption that the derived address matches the expected wallet address.

## Description The `evm_wallet` table is not integrity-protected, and the encrypted key material is not cryptographically bound to the wallet address. During signing, the code does not verify that the decrypted private key actually corresponds to the requested address. ## Details - **Severity:** CRITICAL - - **Attack Vector:** Offline ## Impact Allows an attacker to make the server sign transactions with another wallet's private key and spend funds from that wallet. ## Example Flow 1. Obtain any valid wallet access for wallet A. 2. 2. Modify the SQLite database so wallet A's row points to wallet B's encrypted private key. 3. 3. Request signing for wallet A. 4. 4. The server decrypts wallet B's key, skips key-to-address verification, and signs a transaction valid for wallet B. ## Mitigation Add integrity protection to `evm_wallet`, bind ciphertexts to wallet addresses using AAD or equivalent, and verify after decryption that the derived address matches the expected wallet address.
Skipper added the
Priority
Critical
1
Kind
Security
labels 2026-04-05 16:07:17 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: MarketTakers/arbiter#54