Crypto exploits

CashCowCoin exploit analysis

On 2026-08-27, an attacker on BNB Chain looped 80 public sell calls on the CashCowCoin trading proxy to drain ~165.47 WBNB (~$117.4K) from the CCC/WBNB PancakeSwap pair.

Reported loss
~165.47 WBNB (~$117.4K), per DeFiHackLabs
Occurred
Logged

Logged as “2026-08-27: Privileged Burn Premature Sync Drains Pancakeswap Pair on CashCowCoin”.

Analysis2 min read

The CashCowCoin trading proxy at 0xf523224c6171f81c54b93f474ed4c78de91241c7 (EIP-1967 proxy, implementation at 0x4287742E50fAd6d3351000fD31632412ab29A9ac) exposes public, permissionless buy() and sell() entry points. sell(amount, minOut, deadline) runs in this order: transferFrom of CCC from the caller into the proxy, a normal CCC to WBNB swap through the PancakeSwap V2 pair at 0x1DBE9458A6840784 (with proceeds sent to the caller as BNB), then a call into the CCC token's privileged function 0xb20a0b6f (labeled TreasuryRefilled) that burns the freshly-arrived post-tax CCC straight out of the pair to 0x...dEaD, then a final pair.sync(). The burn selector is gated so that only the proxy may call it, but that gate protects nothing, because the proxy's own public sell() is the thing that calls it on the caller's behalf.

Each sell therefore removes the CCC that was just added back into the pair and re-syncs, leaving the pair's CCC reserve roughly flat while its WBNB reserve is bled out cycle after cycle. The attacker can re-sell the same CCC indefinitely because the post-tax share of each sell is returned to the caller before the next cycle begins.

The attacker (EOA 0x7977BDeeE3A79Dc85Cc18739692e796B5D2513C4, with on-chain helper 0x7738b4D7c25E9A7092AE1AB402343B20340DaEaf) ran the drain in a single transaction on block 118384061 of BNB Chain (0x89d8050641019a5a75fa3dafb4f64fb153e4dd30c0f1f51d06a6cc206d3ead43). The attacker flash-loaned 416,831.487 WBNB from the Moolah lending pool (0x8F73b65B4caAf64FBA2aF91cC5D4a2A1318E5D8C, impl 0x9321587EA0DC8247f8F03E8696C047b2713bB79A), free of fee and repayable 1:1 at the end of the transaction. Then the attacker donated 13,999.890 WBNB into the pair and called pair.sync() to inflate the WBNB reserve as working float, called buy{value: 402,831.596 BNB} to receive 8,805,839.807 CCC (after fee-on-transfer tax), and ran 80 cycles of sell(8,805,839.807 / 80). Each sell swapped CCC to WBNB to the attacker as BNB, the proxy burned ~104,569 CCC out of the pair through 0xb20a0b6f, and the pair's WBNB reserve ratcheted from 165.4899 to 0.0179 while the CCC reserve stayed around 326,767. The attacker wrapped all BNB proceeds (416,996.958), repaid the 416,831.487 WBNB flash loan, and kept the 165.4719 WBNB surplus.

The fix is to remove the privileged burn from the public sell() path entirely, or to make sell() take a freshly-taxed share of CCC into the protocol's treasury rather than out of the pair. Either change breaks the cycle that lets the same caller repeatedly drain the pair's WBNB side.

Sources read (3)

Other exploits

Query every incident yourself — free, no signup

Updated 14 Oct 2026. Figures are as reported by the sources listed above and are not independently verified.