Spellbook by The Web3 WizardSPELLBOOK
Community Ops & Defense2026-10-28•7 min read

The Anatomy of Stealth Wallet Drainers: Why Standard Discord Bots Fail and How to Build Real-Time Pre-Sign Defense

Deconstructing Permit2 signature phishing, off-chain allowance persistence, and sub-90-second incident response loops.

✦
Khalid MurtalaLead Web3 Engineer & Founder, The Web3 Wizard
Executive Summary & Key Findings
  • Modern wallet drainers do not rely on traditional on-chain approve transactions. They weaponize off-chain EIP-712 typed data signatures, specifically exploiting Uniswap Permit2 to sweep tokens without initial gas fees.
  • Because Permit2 holds token approvals inside its own internal mapping, standard revocation tools that only check the token contract will report zero allowance while assets remain fully exposed.
  • Discord AutoMod and static domain blacklists are fundamentally insufficient because attackers hijack authenticated admin session tokens and launch attacks from legitimate project channels.
  • Real protection requires pre-sign transaction simulation that decodes asset transfer deltas and automated alert bots that verify domain registration age and SSL provenance within 90 seconds.

In the early days of Web3 phishing, stealing assets was relatively crude. A malicious website prompted you to submit an on-chain transaction calling approve(spender, type(uint256).max). The transaction cost gas, and any user paying attention could spot the raw contract interaction in their wallet. Today, wallet drainers look completely different.

Modern drainers operate almost entirely off-chain until the exact moment of theft. Victims are presented with convincing frontends claiming to offer an airdrop verification, a staking migration, or a Discord role connection. Instead of an on-chain transaction, the victim is prompted to sign a gasless cryptographic message. Four seconds later, their wallet is empty.

The Evolution of Wallet Draining

To understand why modern drainers are so destructive, you have to look at how user experience improvements in decentralized finance created new attack surfaces. Users hated paying fifteen dollars in gas just to approve a router before every swap. In response, the industry introduced gasless signatures through EIP-2612 and later Uniswap Permit2.

These standards are engineering marvels. They allow a user to sign a structured message off-chain specifying which spender can move how many tokens before an expiration timestamp. The spender can then submit that signature along with the actual transfer call. But drainer developers quickly realized this removed the highest friction point in social engineering: the gas fee.

How Uniswap Permit2 is Weaponized

Permit2 is a canonical smart contract deployed at the exact same address across dozens of EVM chains. When a user interacts with Uniswap or any protocol integrating Permit2, they grant Permit2 a one-time token approval. After that, Permit2 manages allowances internally via cryptographic signatures.

Here is how attackers exploit that design:

  • 1. The attacker deploys a phishing frontend that checks the victim's wallet for existing Permit2 approvals on major tokens (USDC, USDT, WETH).
  • 2. If an allowance exists, the frontend requests an eth_signTypedData_v4 signature matching the PermitWitnessTransferFrom or PermitTransferFrom schema.
  • 3. The message looks like a harmless platform login or gasless captcha, but the spender parameter is the attacker's contract.
  • 4. Once the signature is captured, the attacker's backend broadcasts a batch transaction calling permitTransferFrom on Permit2, sweeping the victim's balance instantly.
Permit2 EIP-712 typed data payload used by stealth drainersjson
{
  "types": {
    "EIP712Domain": [
      { "name": "name", "type": "string" },
      { "name": "chainId", "type": "uint256" },
      { "name": "verifyingContract", "type": "address" }
    ],
    "TokenPermissions": [
      { "name": "token", "type": "address" },
      { "name": "amount", "type": "uint256" }
    ],
    "PermitTransferFrom": [
      { "name": "permitted", "type": "TokenPermissions" },
      { "name": "spender", "type": "address" },
      { "name": "nonce", "type": "uint256" },
      { "name": "deadline", "type": "uint256" }
    ]
  },
  "primaryType": "PermitTransferFrom",
  "domain": {
    "name": "Permit2",
    "chainId": 1,
    "verifyingContract": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
  },
  "message": {
    "permitted": {
      "token": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      "amount": "115792089237316195423570985008687907853269984665640564039457584007913129639935"
    },
    "spender": "0x1234567890abcdef1234567890abcdef12345678",
    "nonce": 42,
    "deadline": 1735689600
  }
}

The Allowance Persistence Trap

One of the most confusing aspects of Permit2 for affected users is what happens after an attack. A user who suspects an issue might open a standard approval inspection tool and revoke permissions on their USDC contract. But if Permit2 itself still has an allowance on the USDC contract, the user remains vulnerable to other Permit2 signature exploits in the future.

Standard ERC-20 allowances check the mapping allowance(owner, spender). Because the token contract sees Permit2 as the spender, revoking direct dApp allowances does not clear the internal allowance stored in Permit2. Security teams must educate users to revoke permissions on Permit2 itself, or use specialized tools like Revoke.cash and Scam Sniffer that explicitly query Permit2 internal storage.

Why Discord AutoMod Fails

Most crypto projects rely on Discord AutoMod rules and word filters to keep their communities safe. They ban words like 'airdrop', 'free mint', and 'claim'. But sophisticated phishing operations do not spam messages from random burner accounts in public channels. They target moderator credentials.

Attackers use session token stealers or fake game testing invites to compromise an existing moderator's Discord client. Because the session token is already authenticated, it bypasses two-factor authentication. The attacker uses the moderator account to post in the official announcements channel, using an @everyone mention with a vanity link.

  • AutoMod ignores messages sent by administrators and moderators with role exemptions.
  • The announcement uses legitimate-looking subdomains or newly registered domains that have not yet appeared on threat blocklists.
  • Community members trust announcements from official channels far more than direct messages.
  • By the time the real moderator wakes up and revokes the compromised session, hundreds of members have already signed.

Building a Pre-Sign Defense Pipeline

If keyword filters and static domain lists fail, what actually works? Real defense requires transaction and signature simulation. When a user interacts with a link, security engines fork the blockchain state at the current block, simulate the execution of the signed payload, and evaluate the net asset transfer delta.

Simulating net asset balance changes before signingtypescript
interface SimulationResult {
  assetChanges: Array<{
    token: string;
    symbol: string;
    amount: string;
    isOutbound: boolean;
  }>;
  riskScore: number;
  reasons: string[];
}

export function evaluateSignatureSafety(result: SimulationResult): {
  isSuspicious: boolean;
  warningMessage: string;
} {
  const outboundTokens = result.assetChanges.filter((a) => a.isOutbound);
  const inboundTokens = result.assetChanges.filter((a) => !a.isOutbound);

  // High risk: multiple tokens draining with zero inbound value
  if (outboundTokens.length > 0 && inboundTokens.length === 0) {
    return {
      isSuspicious: true,
      warningMessage: "Critical Risk: This signature allows an external address to transfer your tokens with zero assets received in return.",
    };
  }

  return { isSuspicious: false, warningMessage: "Transaction appears normal." };
}

The 90-Second Response Loop

When a community account is compromised, the clock is ticking. Studies show that 80 percent of victim signatures occur within the first fifteen minutes of a fake announcement being published. An effective response pipeline must operate in under ninety seconds.

This requires an automated sentinel bot that monitors webhook events and announcement channels. The moment an announcement is posted containing an external link, the bot extracts the domain, checks WHOIS registration age, verifies SSL certificates against known infrastructure patterns, and initiates a headless browser simulation of the landing page.

If the domain was registered within the last forty-eight hours and requests Permit2 signatures upon connection, the bot immediately quarantines the announcement, deletes the message, and pages the on-call security responder. This is how you stop attacks before community members fall victim.

At Spellbook, this is the exact operational philosophy behind our Community Safety Monitor and Raid Shield. We do not just build chat bots; we build real-time defense sentinels that understand on-chain mechanics and protect protocol users where the threat actually lives.

Deploy Production Web3 AI Agents in 48 Hours

Need an autonomous multisig sentinel, anti-phishing moderation bot, or custom on-chain telemetry agent for your protocol? We build, test, and hand over production agents with zero private keys.

Related Engineering Blueprints

View All