AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Reentrancy

skill-omermaksutii-rugproof-reentrancy · by omermaksutii

Detect reentrancy vulnerabilities — classic, cross-function, and cross-contract (especially read-only reentrancy). Activate whenever Solidity/Vyper code performs external calls, low-level call/transfer/send, ERC-721 safeTransfer with a receiver hook, or any pattern where control flow leaves the contract before state finalization.

No reviews yet
0 installs
14 views
0.0% view→install

Install

$ agentstack add skill-omermaksutii-rugproof-reentrancy

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-omermaksutii-rugproof-reentrancy)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Reentrancy? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Reentrancy detection

When this applies

Trigger on any of:

  • External calls via call, delegatecall, staticcall, transfer, send
  • safeTransferFrom / onERC721Received / onERC1155Received callbacks
  • ERC-777 tokensReceived / tokensToSend hooks
  • Cross-contract calls preceding state writes
  • View functions that read state which is mid-update (read-only reentrancy)
  • Custom token callbacks, governance vote-cast hooks, flash-loan callbacks
  • Compound/Aave-style accounting that updates user balances after external transfers

Detection patterns

Classic reentrancy (CRITICAL / HIGH)

function withdraw() external {
    uint256 amt = balance[msg.sender];
    (bool ok,) = msg.sender.call{value: amt}("");   // ← external call
    require(ok);
    balance[msg.sender] = 0;                         // ← state update AFTER call
}

Signal: state mutation after external call. CEI (Checks-Effects-Interactions) violated.

Cross-function reentrancy (HIGH)

Two functions sharing state where one calls externally and the other reads/mutates the same state. Attacker re-enters via the second function.

Cross-contract reentrancy (HIGH)

Contract A updates state, calls B; B calls back into a different contract C that reads A's stale state.

Read-only reentrancy (HIGH — frequently missed)

Victim contract reads getReserves() / getPrice() from a pool mid-callback, before the pool finalizes its state. Example: Curve pools, Balancer vaults, Uniswap V2 mid-removeLiquidity.

// Pool callback hits this view function before pool state is consistent.
function priceOf(address token) external view returns (uint256) {
    return pool.getVirtualPrice();   // ← stale during reentrant call
}

ERC-777 / ERC-721 hook reentrancy (HIGH)

_safeTransfer calls onERC721Received on the recipient — if recipient is a contract, it can re-enter.

Severity rubric

| Pattern | Severity | Notes | |---|---|---| | Funds-draining classic reentrancy | Critical | Direct loss of funds, no preconditions | | Cross-function with shared balance state | High | Requires specific call sequence | | Read-only reentrancy on price/oracle read | High | Common pattern, often missed | | Reentrancy gated by onlyOwner / trusted role | Medium | Centralization-bounded | | ERC-777 hook with no state-after-call writes | Low | Defense-in-depth issue | | Single-actor self-reentrancy with no value flow | Info | |

Remediation patterns

  1. CEI ordering — effects before interactions, always.
  2. nonReentrant modifier (ReentrancyGuard from OpenZeppelin). Add per-function.
  3. For read-only reentrancy — guard the view function too, or use a separate "settled price" cache that only updates outside callbacks. Curve's solution: withdraw_admin_fees lock, Balancer's ensureNotInVaultContext.
  4. Pull over push payments — let users withdraw rather than pushing transfers.
  5. Token whitelist — avoid ERC-777 and rebasing tokens in untested paths.

False-positive notes

  • A function that uses nonReentrant from a known-good library and only calls trusted contracts is generally safe — note it but don't flag as Critical.
  • transfer (2300 gas) blocks classic reentrancy but is brittle on L2s with higher base gas costs — flag as a separate issue, not as reentrancy resolved.
  • Reentrancy into a function that only reads (no state writes downstream) and that read isn't used in a check — Info, not High.

Related

  • [[oracle-manipulation]] — read-only reentrancy often is an oracle issue
  • [[token-compatibility]] — ERC-777 / rebasing tokens widen the attack surface
  • [[delegatecall-risks]] — delegatecall through untrusted target = reentrancy + storage corruption combo

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.