Forensic Report

Wallet Drain
Investigation

0x8c76A394D736422CD0590d57f165b05E4e117835
Date: February 23, 2026 Chains: Ethereum, Base
Section 01

Root Cause

The victim pushed a private key to a public GitHub repository while using Claude Code. Automated bots that continuously scrape GitHub for exposed secrets — private keys, API keys, seed phrases — found the key and immediately compromised the wallet.

This was not a phishing attack, malicious signature, or social engineering. The attacker had full private key access from the start.

Attack Vector
GitHub automated key scraper → private key extraction → full wallet compromise within minutes of push.
Section 02

Victim Wallet Profile

1,879
Ethereum Txns
212
Base Txns
311
Deployed Contracts
~$0
Current Balance
FieldValue
Address0x8c76A394D736422CD0590d57f165b05E4e117835
TypeEOA with ERC-7702 delegation Attacker-installed
Ethereum Txns1,879
Base Txns212
Deployed Contracts311
Current BalanceDust and spam tokens only — effectively $0
Section 03

Attack Sequence

Step 1 — Key Compromise

Attacker's bot scraped the exposed private key from the public GitHub repository.

Step 2 — Asset Drain

Using the private key, the attacker drained all liquid assets (ETH, ERC-20 tokens, NFTs) across both Ethereum and Base.

Step 3 — Persistence via ERC-7702

The attacker set ERC-7702 delegations on both chains, pointing the victim's wallet to malicious smart contracts that act as a permanent drain trap.

withdrawETH() // sends all ETH to 0x52c9...6b (hardcoded) BatchExecuted // arbitrary call execution (address, value, data tuples) getTokenBalance(address) // scout token balances Unresolved_07144458(uint256, address) // transfer ERC-20 tokens nonce() // track execution count
Delegation Contracts:
Ethereum 0x47e747f5e8cb5819c966292dd969d989ae9dea5e
Base 0xdde8ac2d2d69b7e52419ea1503b6ce8d5e699add

Both contracts are unverified/decompiled, identical in structure, with the attacker address hardcoded.

Section 04

Attacker Identity

Primary Wallet

Attacker
0x52c99accbaf0659df23ddbfbe9dfa64fb2732e6b
ChainTxnsETHUSDC
Ethereum861.49 (~$2,767)8.49
Base552.12 (~$3,935)112

Secondary Wallet

Consolidation
0x98b9...f2ce743

Received 0.118 ETH + 174.78 POL from primary

Sweeper Bot

Base
0xbc1d...d86c973

Automated approve-swap-transfer loops

Section 05

Fund Flow — Ethereum

ActionDestinationDetails
ETH + POL consolidation 0x98b9...43 Secondary 0.118 ETH + 174.78 POL
Token swaps (BSSB, WAMPL) TransitSwap DEX Swapped to ETH
Yearn V3 vault redemption Attacker primary Redeemed for USDC
AXOME transfer 0xb868...3b Separate recipient
Section 06

Fund Flow — Base

The attacker deployed a sweeper bot that executed automated loops on Base:

1
Approve
Token spending on victim's behalf
2
Swap
Tokens on DEX for liquid assets
3
Transfer
Proceeds to attacker primary
Sweeper bot: 0xbc1d9760bd6ca468ca9fb5ff2cfbeac35d86c973
Section 07

Checks NFTs — Stolen

Victim held Checks VV Originals. Current balance: 0.

Drain Transaction
FieldValue
Tx Hash0x60e9bb5e...fba951a92
DateFebruary 15, 2026 — 23:27:59 UTC
Checks Moved3  (#23, #42, #2020)
Recipient0x2e7581ad...207778e7
DateRecipientStatus
Feb 4, 20260x66d5...35Unconfirmed
Feb 3, 20260x052c...52Unconfirmed
Jan 1, 20260xd416...01Unconfirmed
Section 08

Fund Flow Diagram

Fund flow diagram
Section 09

All Known Attacker-Linked Addresses

RoleAddressChain
Primary attacker 0x52c99accbaf0659df23ddbfbe9dfa64fb2732e6b Both
Secondary wallet 0x98b971f59b21b08988cd2274f996bc09af2ce743 Ethereum
Sweeper bot 0xbc1d9760bd6ca468ca9fb5ff2cfbeac35d86c973 Base
NFT recipient 0x2e7581ad773438db872415c2faa7895a207778e7 Ethereum
AXOME recipient 0xb868645fedba6961ddd099d48c4bc4728a4d113b Ethereum
Malicious delegation 0x47e747f5e8cb5819c966292dd969d989ae9dea5e Ethereum
Malicious delegation 0xdde8ac2d2d69b7e52419ea1503b6ce8d5e699add Base
Section 10

Current Attacker Holdings

$2,767
1.49 ETH · Ethereum
$3,935
2.12 ETH · Base
$8.49
USDC · Ethereum
$112
USDC · Base
Total Liquid Holdings
~$6,825
+ Checks #23, #42, #2020 at 0x2e75...e7
Section 11

Recommendations

  1. 1
    Do NOT deposit any funds to the victim wallet — ERC-7702 delegation means the attacker can drain anything sent there.
  2. 2
    Revoke the ERC-7702 delegation — but the wallet should be considered permanently compromised since the attacker holds the private key.
  3. 3
    Monitor 0x2e7581ad...e7 — the stolen Checks NFTs may not have been sold yet and could be recoverable.
  4. 4
    Rotate all secrets in the same repository or environment as the leaked key.
  5. 5
    Report attacker addresses to exchanges and on-chain analytics providers (Chainalysis, Etherscan labels).
Section 12

Attacker Identity Analysis

Deep-dive investigation into the attacker's operational patterns, infrastructure, and potential identity markers.

The NFT recipient wallet 0x2e7581ad...e7 is not a one-off recipient. It has 94 transactions and is ERC-7702 delegated — the same infrastructure the attacker uses on victims. Analysis reveals NFTs being drained from 5+ different victim wallets using identical 0xbca8c7b5 batch execution calls.

The NFT recipient's delegation contract (0x882d5e30...) tips block.coinbase in its batch execution flow. This is a hallmark of MEV/flashbot private transaction submission — the attacker pays block proposers directly to ensure their drain transactions are included privately, avoiding detection and front-running.

Every token swap performed by the attacker across all wallets goes through TransitSwap V5. This is a behavioral fingerprint — TransitSwap is a cross-chain DEX aggregator popular primarily in Asian markets. No Uniswap, no 1inch, no CoW Protocol. Exclusively TransitSwap.

The secondary wallet 0x98b9...43 has exactly 1 transaction — it received 0.118 ETH + 174.78 POL and went dormant. This is a classic dead-drop pattern: receive stolen funds at a fresh address and let it cool off before moving it further.

No funds from any attacker-linked wallet have moved to known centralized exchange deposit addresses. All liquidity remains in self-custodied wallets. The attacker is either waiting for the trail to cool, using P2P OTC channels, or hasn't cashed out yet — which means exchange-based identification is not currently possible.

Transaction history on the attacker's primary wallet dates back to September 2025. This is not a new operation — it's a sustained, professional key-scraping operation that has been actively draining compromised wallets for at least 5 months.

🔎
Operational Profile
Professional serial operation. Automated GitHub key scraping pipeline, ERC-7702 persistence, MEV-protected drain transactions, dedicated NFT liquidation address, exclusive TransitSwap usage (Asian market fingerprint), no CEX exposure, active 5+ months. Multiple confirmed victims.