Wallet & Account Abstraction Security Checklist
20 security checks for Safe integrations, account abstraction, wallet modules, and smart account systems. Covering EIP-712 typehash mismatches, Safe version incompatibility, guard bypasses, signature replay, and recovery mechanism exploits. Derived from real audit findings including Brahma, Biconomy, and major Safe integrations.
Threat Analysis
Key statistics from analyzing wallet and account abstraction audit findings:
• 800+ findings analyzed from real smart contract audits across Safe integrations and AA wallets
• 20 vulnerability patterns identified and categorized across 4 security domains
• 13 Critical/High items require immediate attention in any wallet/AA audit
Automate with Krait CLI
60% of these checks can be automated against your codebase. 8 checks require manual review.
/krait:scan --deepInstall Krait →CATEGORIES
EIP-712 Typehash Mismatch
CriticalKraitTypehash string does not match the actual struct definition, causing signatures to validate against wrong data
Signature Replay Across Chains or Contracts
CriticalKraitEIP-712 domain separator missing chainId or verifyingContract, enabling cross-chain/cross-contract replay
Nonce Management Gaps
HighKraitNonces are not per-operation-type, enabling cross-type replay or nonce collision
Signature Malleability Acceptance
HighContract accepts both high-s and low-s ECDSA signatures, enabling signature replay with different s values
Missing Signature Deadline/Expiry
MediumSigned messages have no expiry, allowing indefinite replay of old authorizations
Safe Version Interface Incompatibility
CriticalKraitCode targets one Safe version but deploys with another — guard interfaces, module callbacks, and return data differ
Missing Validation on Module Enable/Disable
CriticalKraitModules can be enabled without proper Safe owner authorization, allowing unauthorized transaction execution
Module Transaction Gas Refund Drain
HighKraitGas refund parameters not included in policy validation, allowing executor to drain Safe ETH
Uninitialized Proxy Implementation
HighKraitSafe module or guard proxy implementation can be initialized by anyone, enabling takeover
Validator Registration Without Ownership Proof
HighKraitValidator or sub-account can be registered for a Safe without proving ownership of that Safe
Guard Bypass via Module Execution
CriticalKraitGuard protects execTransaction but modules execute via execTransactionFromModule without guard checks
Delegate Call Restriction Bypass
HighKraitPolicy restricts call operations but does not restrict delegatecall, enabling arbitrary code execution in Safe context
Fallback Handler Manipulation
HighKraitFallback handler can be changed by a module, enabling interception of all calls to the Safe
Insufficient Transaction Validation in Guard
HighGuard checks transaction parameters but not the actual call data, allowing malicious payloads
Single Owner Safe Without Recovery
MediumSafe with single owner and no recovery module — lost key means permanently locked funds
Recovery Mechanism Takeover by Colluding Guardians
HighKraitSocial recovery guardians can collude to take over the Safe without the owner's knowledge
Session Key Over-Permissioning
HighSession keys granted overly broad permissions — no amount, target, or time restrictions
UserOperation Validation Insufficient
HighERC-4337 account validates UserOperation signature but not the operation parameters
Paymaster Drain via Gas Manipulation
HighERC-4337 paymaster can be drained by submitting operations with inflated gas parameters
Upgrade Path Missing or Unprotected
MediumSmart account has no upgrade path, or upgrade can be triggered without full owner authorization
Need a Professional Wallet or AA Audit?
Smart wallets and account abstraction systems are the most security-critical code in Web3 — they directly custody user funds. Get your wallet, Safe module, or AA system audited by a team that understands EIP-712, Safe compatibility, and ERC-4337.

