omermaksutii/rugproof/delegatecall-risks
Claude Code and agent skill by omermaksutii/rugproof
- community
Checking that the SKILL.md file is still in the repository.
Detect delegatecall risks — uninitialized proxies, malicious implementations, storage-slot collisions, delegatecall to user-controlled addresses, library delegatecall pitfalls. Activate on `delegatecall`, UUPS proxy upgrades, multicall implementations, diamond facets, governor-execute patterns.
Install
npx vskill@latest install omermaksutii/rugproof/delegatecall-risksSKILL.md
Delegatecall risk detection
When this applies
- Any
delegatecallsite - Proxy implementations (UUPS, Transparent, Beacon, Diamond)
Multicall/Multicall3/ batch-execute on the contract itself- Governor's
execute()flow - Library
using X for *where X uses delegatecall - Generic call-forwarder / Safe modules
Detection patterns
delegatecall to user-controlled address (CRITICAL)
Uninitialized UUPS implementation (CRITICAL)
The implementation contract, if uninitialized, can be initialized by anyone, then UUPS-upgraded to a selfdestruct impl, bricking the implementation. (Famous: Parity multisig.) Always _disableInitializers() in constructor.
Storage slot collision in proxy (CRITICAL)
Proxy uses slot 0 for admin, impl uses slot 0 for owner → impl writes corrupt proxy admin. Use EIP-1967 namespaced slots.
delegatecall + msg.value (MEDIUM-HIGH)
Forwarding msg.value via delegatecall to a function that doesn't expect ether → trapped funds or double-accounting.
Multicall + delegatecall + msg.sender confusion (HIGH)
Multicall via delegatecall preserves msg.sender, so signed-payload-based functions (permit, ERC-2771) can be combined in surprising ways. Audit each function for "what if called via multicall with attacker-controlled previous step?"
Diamond facet self-destruct (HIGH — pre-EIP-6780)
A malicious or buggy facet that calls selfdestruct deletes the diamond. EIP-6780 limits this to same-tx-deploy, but old diamonds remain at risk. See [[selfdestruct-eip6780]].
Library marked internal actually compiled with delegatecall (HIGH)
Solidity compiles "linked" libraries to delegatecall. Linking the wrong library (or address) bricks downstream contracts.
_authorizeUpgrade missing or weak (CRITICAL)
UUPS upgrade gate. If unguarded, anyone can upgrade the proxy.
Cross-contract delegatecall to read-only function (LOW)
Used (rarely) for pattern obfuscation; usually a code smell.
Severity rubric
| Pattern | Severity | |
|---|---|---|
| delegatecall to user-supplied address | Critical | |
UUPS _authorizeUpgrade unguarded | Critical | |
Uninitialized UUPS impl with no _disableInitializers | Critical | |
| Storage collision proxy/impl | Critical | |
Forwarding msg.value to non-payable target | High | |
| Multicall + signed-msg sender ambiguity | High | |
| Library linkage to wrong address | High | |
| Diamond facet with selfdestruct path | High (see [[selfdestruct-eip6780]]) |
Remediation patterns
- Never delegatecall a non-allowlisted address. Hardcode or maintain a strict allowlist of valid implementations.
- UUPS:
_authorizeUpgradeMUST checkonlyOwner(or stricter). - Implementation constructor:
_disableInitializers(). - Use EIP-1967 / EIP-7201 namespaced slots for proxy admin / impl.
- Multicall guard: forbid permit/auth-changing functions in batch, or limit to a non-delegatecall variant.
- After upgrading: verify storage layout via
forge inspect.
False-positive notes
- Solady
LibClone.deployERC1967and similar canonical proxy libraries are well-tested. - delegatecall to an
immutableimplementation address (set in constructor, not changeable) is much lower risk.
Related
- [[initialization]]
- [[storage-layout]]
- [[access-control]]
- [[selfdestruct-eip6780]]
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/delegatecall-risks/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/delegatecall-risks)