Offensive Research. We break protocols before attackers do. We strike first.

Joined April 2026
2 Photos and videos
LBP exploit on BSC ~145k drained Root cause: token balanceOf(pair) was computed dynamically from pair.getReserves() instead of returning the raw balance. Calling sync() overwrites reserve1 with that manipulated value. Exec flow: - flashloan 2.2M USDT from PCS V3 - buy 500k USDT -> VICTIM - donate USDT VICTIM equal to reserves to the pair - skim() recovers USDT, VICTIM stays trapped (balanceOf lies) - dust raw pair.swap() pulls back the trapped VICTIM - dust sync() reserve1 collapses from 1,262 to 3.79 VICTIM - dump at the inflated price -> ~645K USDT out - repay flash, walk away with ~145K
1
1
4
370
TUB/BSC drained for ~45 BNB single tx, zero capital Pledge contract claim function (0xb45c9928) takes reward amount as user input. no validation. no accounting. attacker staked 1 LP token, claimed 4.77×10²⁷ TUB basically: tranfer(msg.sender, userInput)
4
1
6
292
3 flaws stacked: - claim amount is caller supplied (no internal accrual) - parent chain registers on any transfer (free sybils via CREATE) - 1 LP wei passes the pledge gate
78
Exec flow: flashswap 1000 wei WBNB -> buy dust TUB -> deploy 5 sybil contracts -> chain transfer to build referral tree -> mint 1 LP -> pledge -> call b45c9928 with arbitrary amount Pledge pays claimer all 5 parents (0.7x decay/level) = 8.73e27 TUB = 8.73e27 TUB = 100% of reward pool dump into pair -> ~45 BNB out, pair WBNB -98.3%
96
⚡️JUDAO Postmortem ~227k exploit Root cause: AMM reserve desync via token-side burn hooks _update() runs two ‘drain hooks’ whenever a transfer touches PancakeV2 Pair. isBurnPair -> burns JUDAO from pair Mining hook -> burns again, then calls pair.sync() sync() freezes a falsified reserve1 into pair storage while balance1 still carries the attacker just deposited JUDAO. Exec flow: - flashloan 2.29M USDT from Moolah - router buy -> 5.47M JUDAO - transfer() those JUDAO directly to the pair -> _update() burns ~3.02M out of reserves sync() - pair.swap(2.52M USDT, 0, …) directly - repay Moolah, keep the delta PancakeV2 computes amount1In = balance1 - reserve1 After the hook: reserve1 is artificialy low (post-burn) AND balance1 also dropped, but the swap K invariant is now solved against a fake skewed ratio. Pair pays USDT that no longer exists in reserves. NET: 36 BNB 205,259 USDT to attacker EOA. github.com/DK27ss/JUDAO-227k…
1
1
168
🚨🚨 The DeFi ecosystem is currently facing a serial attack, more than 6 protocols exploited in less than ~48 hours. Losses are currently estimated at ~2.8m Stay Safe.
4
2
12
5,805
🚨 Singularity Finance exploited ~$413k We investigation, this seems to be due to an oracle configuration problem allowing an attack by share inflation.
1
1
2
516
Giddy Exploit - Full breakdown 3 vaults drained to 0 in a single tx. ~16.7 LP tokens stolen. (~$1.3m) Root cause : EIP-712 signature only covers keccak256(data) in SwapInfo not fromToken, aggregator, toToken or amount. blockraider.xyz/post-mortems…
5
2
3
426
After compound() returns, attacker calls LP.transferFrom(vault, owner, vault.balance) using MAX approval from step4, ALL LP tokens DRAINED.
1
85
vault has 2 post-swap checks - fromToken balance must decrease (INVALID_SRC_BALANCE_CHANGE) - toToken balance must increase (SWAP_NO_TOKENS_RECEIVED) attacker contract handles both in its fallback. _fakeBalances[msg.sender] = 1 LP.transferFrom(vault, self, 1)
1
68
inside swapRewardTokens(), vault executes IERC20(fromToken).approve(aggregator, MAX) since fromToken = LP token and Aggregator = attacker contract, the vault just approved attacker for unlimited LP spending. Game over.
1
51
attacker grabbed a valid signature from a pending/past compound() tx and replaced - fromToken -> vault LP tokens - aggregator -> their own contract - toToken -> their own contract (fake ERC20) - amount -> type(uint256).max Signature still valid. the data blob is unchanged.
1
48
compound() function lets an authorized signer reinvest vault rewards via token swaps. - fromToken - aggregator - amount - toToken - data <-- only this is signed !
1
46
We strike first. This time, we’re striking Monaco. ⚡️ Blockraider will be at the WAIB Summit, June 9-10. Will you cross paths with us ? 🕶️ #WAIBSummit #Monaco
10
1
3
257