CryptoKeySafe CK bracket markCRYPTOKEYSAFE
Back to Blog
DeFi SecurityJanuary 20266 min read

Token Approval Risks: What You Are Really Signing

Every time you interact with a DeFi protocol, you grant token approvals. Many users have unlimited approvals active on contracts they used once. How to audit and revoke risky permissions.

Every time you interact with a DeFi protocol, you grant it permission to spend your tokens. Most users grant unlimited approvals without knowing it. Those approvals persist indefinitely. An exploit on the approved contract months later can drain your tokens - no new signature required. This article covers how approvals work, what unlimited approvals mean in practice, and how to audit and reduce your exposure.

How Token Approvals Work

ERC-20 tokens use a two-step model for DEX interactions. First, you approve the DEX contract to spend a specific amount of your token. Then, the DEX uses that allowance to execute the trade on your behalf. This design lets the DEX contract pull tokens from your wallet directly rather than requiring you to send tokens to the contract first - which enables atomic swaps and composable DeFi interactions.

The approval is stored in the token contract itself, not in the DEX. Calling the ERC-20 allowance(owner, spender)function returns the current approved amount for any address pair. You can check Etherscan's “Token Approvals” tab for your address to see all active approvals on any ERC-20 token you hold.

The approval does not expire automatically. It stays active until you revoke it or until it's consumed by a transaction that depletes the allowance. Unlimited approvals - the type most protocols request - never deplete from use.

Why Protocols Request Unlimited Approvals

Requesting an unlimited approval (the maximum uint256 value: 115,792,089,237,316,195,423,570,985,008,687,907,853,269,984,665,640,564,039,457,584,007,913,129,639,935) is a UX decision, not a security one. If the protocol only approved the exact amount for each swap, every future swap would require an additional approval transaction, costing extra gas and requiring two confirmations instead of one. Most protocols request unlimited approval once, then execute subsequent swaps without additional approvals.

This is fine for the protocol in normal operation. The problem is the residual approval. After you stop using a protocol, the unlimited approval to its contract remains active. If that contract is later exploited, upgraded with malicious code, or compromised through an admin key, the attacker can use your existing approval to transfer all tokens you hold - up to your current balance - without any action from you.

The Badger DAO Attack: $120M from Token Approvals

In December 2021, Badger DAO lost approximately $120 million to an exploit that required no smart contract vulnerability. Attackers compromised Cloudflare's API key used by Badger's frontend and injected JavaScript that requested additional token approvals from users visiting the site. Users who approved these transactions gave the attackers permission to drain their tokens. The attack worked entirely through legitimate approval mechanics - no cryptography was broken. It succeeded because users had existing approvals to the Badger contracts and didn't question the new approval requests.

What setApprovalForAll Means for NFTs

NFTs use a different approval model. The ERC-721 and ERC-1155 standards include setApprovalForAll(operator, approved), which grants a contract permission to transfer any token from a given collection that you own - not just a specific token. This is used legitimately by NFT marketplaces (you approve OpenSea to transfer your NFTs when they sell).

Phishing sites exploit this. A malicious site presents a “mint” or “claim” transaction that is actually a setApprovalForAllcall granting the attacker's contract permission to transfer your entire NFT collection. Once approved, the attacker can transfer your NFTs instantly without further interaction from you. This is how most high-value NFT phishing drains work.

Your wallet will display the setApprovalForAll request. If you see this in a transaction from a site that claimed to be offering a mint or airdrop, reject it. Legitimate mints usemint() functions, not approval grants.

How to Audit Your Current Approvals

Three tools let you review and revoke token approvals across different chains:

Revoke.cash

The most widely used approval manager. Connect your wallet or paste your address (read-only mode requires no wallet connection). Revoke.cash shows all ERC-20 approvals and NFT approvals for your address on Ethereum mainnet and dozens of other chains. Each approval shows the spender contract, the approved amount, and a revoke button. The tool is open source (github.com/RevokeCash/revoke.cash).

Etherscan Token Approvals

Etherscan's “Token Approvals” page (etherscan.io/tokenapprovalchecker) shows all ERC-20 approvals for a given address on Ethereum. It's more limited than Revoke.cash (Ethereum only, no NFT approvals) but requires no additional tool installation and uses Etherscan's verified contract labels to help identify known spenders.

De.Fi Shield

De.Fi Shield (de.fi) provides approval management with risk scoring. It flags approvals to contracts that have been exploited or flagged by security researchers, adding context beyond the raw approval list. Useful for identifying historical approvals where the context isn't obvious from the contract address alone.

Revoking Approvals

Revocation is an on-chain transaction that sets the approved amount to zero. It costs gas - typically a small amount, but it's not free. If you have many approvals to revoke, batch revocation tools (available in Revoke.cash) let you revoke multiple approvals in a single transaction, reducing total gas cost.

Priority for revocation: unlimited approvals to contracts you no longer use, any approval to a contract that has been exploited or is otherwise flagged, and setApprovalForAllgrants to any contract you didn't knowingly authorize for your entire NFT collection.

Active approvals to protocols you use regularly (Uniswap, Aave, Curve, etc.) can be left in place if the amount is reasonable for your use. Revoking them means re-approving next time you use the protocol, which costs additional gas. The risk calculation depends on your assessment of the protocol's ongoing security.

EIP-2612 Permit: A Different Approval Model

USDC, DAI, USDT (on some chains), and many newer tokens support EIP-2612 permit - off-chain signatures that grant approvals without a separate on-chain transaction. Permit approvals don't appear in Revoke.cash until the permit is submitted on-chain. If you signed a permit request and the attacker hasn't submitted it yet, it won't show as an active approval. This is why permit-based phishing is harder to detect and audit after the fact.

Reducing Approval Risk Going Forward

When a protocol requests an unlimited approval, you can manually set a lower amount. MetaMask and Rabby both let you edit the approval amount before confirming. Setting the approval to exactly the amount needed for the current transaction means the approval is consumed in one use - subsequent transactions require new approvals, but your exposure window is minimal.

The gas cost of extra approvals is real. For protocols you use frequently with tokens you hold in small amounts, the risk of an ongoing unlimited approval may be acceptable. For large holdings or infrequent protocol use, setting exact-amount approvals is a meaningful risk reduction.

Rabby wallet automatically suggests limiting approvals and shows the implications of each approval request before you confirm. For active DeFi users, Rabby's pre-approval display reduces the likelihood of unknowingly granting excessive permissions.

Approval Hygiene Routine

Run a monthly approval audit on Revoke.cash covering all chains where you have active DeFi positions. Revoke unlimited approvals to protocols you no longer use. Use exact-amount approvals for large token holdings or infrequently used protocols. Check NFT approvals and revoke any setApprovalForAllgrants you don't recognize. This 15-minute monthly habit eliminates the largest category of DeFi losses that aren't direct exploits.