Reproduced Exploit

InfinitySix — Stale 1-min TWAP + Instant Referral Bonus Over-Mint

invest() immediately credits the sponsor with directBonus += 5% of the invest amount. withdraw() pays that USDT-denominated bonus in i6 tokens priced by twapPrice, but updateTwap() refuses to update more than once per minute. Inside one transaction the attacker:

Mar 2026BNB Chainoracle3 min read

Loss

~$273.8K USDT attacker profit (PoC net ~$277.2K without flash fees)

Chain

BNB Chain

Category

oracle

Date

Mar 2026

EVM Playground

Source-level debugger — step opcodes and Solidity in sync

evm-hack-analyzer

The attack is replayed in an in-browser EVM preloaded with the exact dumped fork state. The execution tree shows every call; step by Solidity line or by opcode across all depths — source, Stack, Memory, Storage, Transient storage and Return value stay in sync. Click a tree node, opcode, or source line to jump. No backend, no live RPC.

Loading fork state…

Source & credit. Exploit reproduction, trace data, and analysis adapted from DeFiHackLabs by SunWeb3Sec — an open registry of reproduced on-chain exploits. Standalone Foundry PoC and full write-up: 2026-03-InfinitySix_exp in the evm-hack-registry mirror. Upstream DeFiHackLabs PoC: src/test/…/InfinitySix_exp.sol.


Vulnerability classes: vuln/oracle/price-manipulation · vuln/logic/incorrect-calculation

Reproduction: Foundry PoC in this project folder — ONLINE archive fork (BSC). Verbose run: output.txt. Verified source: sources/InfinitySix.sol.


Key info#

Loss~$273.8K USDT attacker profit (PoC net ~$277.2K without flash fees)
Vulnerable contractInfinitySix (direct) — 0x1cb36b0f1efd9b738997da3d5525364c7e82a18a
i6 token0xd7684971afe4c231fa9af6b53e18eaf86438a0e6
USDT0x55d398326f99059ff775485246999027b3197955
i6/USDT pair0xdc769f4d941408ab5c12db981e50ed3e69357e36
Attacker EOA0x6d1cafc890cc7dd6bf3718453367f8e0fd9851e4
Attack contract0xb38cba2562b70309fc19d06b6b0468c8fd89b025
Attack tx0xc1b9a237…ab2f16
Chain / block / dateBSC / 89,703,286 (fork at 89,703,285) / Mar 31, 2026
Bug classInstant directBonus + same-tx stale TWAP settlement

TL;DR#

invest() immediately credits the sponsor with directBonus += 5% of the invest amount. withdraw() pays that USDT-denominated bonus in i6 tokens priced by twapPrice, but updateTwap() refuses to update more than once per minute. Inside one transaction the attacker:

  1. Does a small self-invest under GENESIS_USER (locks TWAP ≈ 1.05 USDT/i6).
  2. Routes $124M USDT through a helper that invests with the attacker as referrer → **$6.2M directBonus** + floods the LP (spot ≈ 15,528).
  3. Calls withdraw() — TWAP still ~1.05 → mints ~5.6M i6 from the project reserve (fair amount at spot would be ~399 i6).
  4. Dumps i6 into the USDT-heavy LP for ~$125.2M, repays capital, keeps ~$274K.

Vulnerable code#

Instant referral bonus (sources/InfinitySix.sol)#

SOLIDITY
if (user.referrer != address(0)) {
    User storage refUser = users[user.referrer];
    if (!refUser.isCapped) {
        refUser.directBonus += (usdtAmount * DIRECT_BONUS_RATE) / 1000; // 5%, immediate
    }
}

Stale TWAP floor#

SOLIDITY
uint32 public constant TWAP_UPDATE_INTERVAL = 1 minutes;

function updateTwap() public {
    // ...
    if (timeSinceLastUpdate < TWAP_UPDATE_INTERVAL) return; // same-tx: always early-return
    // ...
}

function withdraw() external nonReentrant {
    if (uniswapPair != address(0)) { updateTwap(); }
    // ...
    uint256 effectivePrice = twapPrice > minTwapPrice ? twapPrice : minTwapPrice;
    uint256 tokensToTransfer = (totalUsdtToWithdraw * WAD) / effectivePrice;
    // transfer i6 to msg.sender (minus 5% burn)
}

The sponsor’s 7× payout cap is sized so sponsorInvest * 7 ≈ referralInvest * 5% (885,815.60 × 7 = 6,200,709.20 = 5% of 124,014,184.40).


Attack flow#

sequenceDiagram participant A as Attacker participant H as Referral helper participant I as InfinitySix participant LP as Pancake i6/USDT A->>I: invest(885.8k USDT, GENESIS) Note over I: TWAP observation ~1.05 A->>H: fund 124M USDT H->>I: invest(124M, sponsor=A) Note over I: directBonus[A]+=6.2M; LP spot→15k A->>I: withdraw() Note over I: updateTwap early-return; pay ~5.6M i6 @ 1.05 A->>LP: dump i6 → ~125.2M USDT Note over A: net ~$274K after capital return

PoC notes#

  • ONLINE fork via BSC_RPC_URL (default https://bsc-mainnet.public.blastapi.io).
  • Capital is deal’d USDT (live attack used Moolah WBNB flash → Venus → PancakeV3 flash).
  • Run: BSC_RPC_URL=... forge test --match-contract InfinitySix_exp -vv
  • Expected: [PASS], net profit > 100k USDT (observed ~277k).

Offline anvil_state.json not shipped (large multi-protocol state; ONLINE only).


References#


Sources & further analysis#

Reproductions & code

Alerts & third-party analyses

These dashboards index community alerts tweets, post-mortems, and independent write-ups. Reach them through the protocol name above to cross-check this reproduction against other analyses.