omermaksutii/rugproof/erc4337-account-abstraction
Claude Code and agent skill by omermaksutii/rugproof
- community
Checking that the SKILL.md file is still in the repository.
Detect ERC-4337 account-abstraction bugs — validateUserOp storage-rule violations, paymaster postOp DoS, session-key scope bypasses, signature aggregation issues, EIP-7702 delegation risks. Activate on `validateUserOp`, `validatePaymasterUserOp`, `postOp`, `UserOperation`, `EntryPoint`, `IAccount`, `IPaymaster`, session-key modules, ERC-7579 modules, EIP-7702 authorization payloads.
Install
npx vskill@latest install omermaksutii/rugproof/erc4337-account-abstractionSKILL.md
The same SKILL.md was published earlier as iktok90-design/ai-smart-contract-auditor/erc4337-account-abstraction.
ERC-4337 / Account Abstraction detection
When this applies
- Smart-wallet implementations (SimpleAccount, Safe-AA, Kernel, Biconomy, Light Account, custom)
- Paymaster contracts (verifying, deposit, token-paying, sponsorship)
- Module systems (ERC-7579, ERC-6900) and session-key managers
- Bundler / mempool-side relayer logic (rare in app code, but watch for)
- EIP-7702 delegated EOAs
Detection patterns
validateUserOp storage-rule violation (HIGH)
ERC-4337 §6 forbids SLOAD on storage slots outside the wallet's own contract during validation. Bundlers reject non-compliant UserOps. Beyond compliance, accessing external state during validate is a banner attack surface (e.g. reading from an attacker-controlled contract).
Missing msg.sender == entryPoint() check (CRITICAL)
Paymaster postOp revert risk (HIGH)
postOp should be revert-free. Use try/catch or never revert.
Paymaster oracle manipulation for token-paying (HIGH)
Token-paying paymaster converts ERC20 → ETH at validate time. If oracle is spot AMM, sandwichable. See [[oracle-manipulation]].
Sponsorship-paymaster missing nonce/deadline (HIGH)
Sponsorship sig replayable. See [[signature-replay]].
Session-key scope bypass (HIGH)
Session keys grant limited authority (allowed selectors, allowed targets, time bounds). Bypass paths:
- Multicall router that the session key approves → key calls arbitrary fns via the router
- Fallback function not scoped
- ERC-7579 module installation while session-key active
- Approval to swap router → token-drain via the approval
EIP-7702 chainId-less authorization (CRITICAL)
EIP-7702 delegations replayable across chains if chainId == 0 or missing chainId binding.
EIP-7702 delegation to attacker (CRITICAL)
User signs an authorization to a contract address. If that contract is upgradeable / attacker-controlled, the EOA's nonce-aware delegated-call grants full control.
Aggregated sig replay (HIGH)
BLS-aggregated UserOps with aggregator field — if aggregator's verifier doesn't include chainId, cross-chain replay possible.
Nonce-key collision (MEDIUM)
ERC-4337 uses 192-bit "nonce-key" for parallel UserOps. If multiple session keys / dapps share key 0, they serialize unnecessarily. Worse: if key encoding collides with another semantic, a stuck UserOp can DoS.
Permit2 + AA collision (MEDIUM)
Meta-tx with permit can collide on nonces with regular UserOp.
Module install with missing auth check (CRITICAL)
ERC-7579 / ERC-6900 module install paths sometimes lack onlyEntryPointOrOwner. Install path → arbitrary module → arbitrary execution.
Severity rubric
| Pattern | Severity | |
|---|---|---|
validateUserOp callable by non-EntryPoint | Critical | |
| Module install lacks auth check | Critical | |
| EIP-7702 missing chainId in authorization | Critical | |
| EIP-7702 delegation to mutable contract | Critical | |
| Paymaster postOp can revert | High | |
| Session-key scope bypass via multicall/fallback | High | |
| Storage-rule violation in validate | High | |
| Token-paymaster spot-oracle dependency | High | |
| Sponsorship-paymaster sig without nonce/deadline | High | |
| Aggregated sig missing chainId | High | |
| Nonce-key naming collision | Medium |
Remediation patterns
- Wallet:
require(msg.sender == address(entryPoint()), "only EP");. - Paymaster: never revert in postOp; use try/catch internally.
- Module install: gate behind
onlyEntryPointOrOwnerand a per-module validation step. - Session keys: explicit allowlist of (selector, target) tuples; no fallback fallthrough.
- EIP-7702: include chainId in EIP-7702 authorization payload; delegate only to immutable, audited code.
- Storage rules: only
SLOADfrom self during validate; cache external state into self-state before validate.
False-positive notes
- Canonical SimpleAccount-style impls from eth-infinitism are reference; safe.
- "Account Factory" pre-deployment patterns sometimes look risky but are well-understood.
Related
- [[signature-replay]]
- [[delegatecall-risks]]
- [[aa-specialist]] (subagent)
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/erc4337-account-abstraction/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/omermaksutii/rugproof/erc4337-account-abstraction)