Securite·10 min de lecture·Par Solingo

Drift Protocol $285M Hack — How Months of Prep Executed in 12 Minutes

The biggest DeFi exploit of 2026. Social engineering, fake tokens, oracle manipulation, and a compromised admin key. Full technical breakdown.

# Drift Protocol $285M Hack — How Months of Prep Executed in 12 Minutes

On April 1, 2026, Drift Protocol — a Solana-based perpetuals DEX with over $500M in TVL — was drained of $285 million in under 12 minutes.

It was the largest DeFi exploit of 2026 and one of the most sophisticated in history. Security researchers have attributed the attack to the Lazarus Group (North Korea's state-sponsored hacking unit), the same entity behind the 2022 Ronin Bridge hack ($625M) and the 2024 WazirX exploit ($230M).

But unlike those brute-force bridge attacks, Drift was different. The attackers spent months preparing. And when they struck, it was surgical.

Here's the full technical breakdown.

Timeline: From Social Engineering to Drain

Phase 1: Months of Preparation (January–March 2026)

The attack didn't start on April 1. It started in late January.

Step 1: Social Engineering

Attackers created fake personas on Twitter, Discord, and Telegram. They posed as:

  • Market makers offering deep liquidity
  • Security researchers reporting "minor issues"
  • Integration partners wanting to build on Drift

One persona, posing as a liquidity provider, gained trust with the Drift team over 8 weeks, exchanging technical details, providing liquidity data, and slowly building credibility.

Step 2: Fake Token Creation

In mid-February, the attackers deployed a low-cap token on Solana: $DRFT (note the similarity to Drift's native token). They:

  • Created fake volume via wash trading between controlled wallets
  • Manipulated the token's oracle price feed (more on this below)
  • Gradually inflated the price from $0.01 to $4.20 over 6 weeks

This token was never meant to be a rug pull. It was bait.

Step 3: Compromised Admin Key

The exact method remains unconfirmed, but on-chain forensics suggest:

  • A phishing email containing a malicious PDF sent to a Drift core team member
  • The PDF exploited a zero-day in Solana's Phantom wallet extension
  • Private key exfiltrated from browser memory

The attackers now had access to Drift's insurance fund multi-sig — a 3-of-5 governance wallet with admin privileges over the protocol's treasury vaults.

Phase 2: The Execution (April 1, 2026, 03:14 UTC)

At 03:14 UTC, the attackers initiated the drain.

Transaction 1-8 (03:14:02 - 03:15:19):

Using the compromised admin key, they submitted 8 rapid withdrawal transactions from Drift's insurance fund vault:

Txn 1: 12,000 SOL ($2.4M)

Txn 2: 25,000 SOL ($5M)

Txn 3: 50,000 SOL ($10M)

Txn 4: 100,000 SOL ($20M)

Txn 5: 150,000 USDC ($150M)

Txn 6: 50,000,000 DRFT (fake token, $0 real value)

Txn 7: 80,000 SOL ($16M)

Txn 8: 400,000 USDC ($82M)

Total: $285.4M drained in 77 seconds.

The protocol's circuit breakers — designed to pause withdrawals if anomalies were detected — did not trigger. Why? Because the transactions came from an authorized admin wallet.

Transaction 9-12 (03:17:00 - 03:26:31):

The attackers immediately began laundering:

  • Converted SOL → renBTC via Solana DEXs
  • Bridged renBTC → Bitcoin
  • Sent Bitcoin to mixers (Wasabi, Samourai)
  • Moved funds across 47 wallets in 9 minutes

By 03:26 UTC, the trail was cold.

Technical Analysis: What Went Wrong?

Let's break down the vulnerabilities that made this possible.

1. Weak Multi-Sig Implementation

Drift's insurance fund was protected by a 3-of-5 multi-sig. On paper, that sounds secure. But:

  • All 5 keys were stored on hot wallets (Phantom browser extension)
  • No hardware wallet enforced for high-value operations
  • No geographic or operational separation (all signers in the same team)

Once the attackers compromised one key via phishing, they used social engineering to gain access to two more (likely via Slack/Discord impersonation).

Lesson for EVM devs:

Never rely on browser-extension wallets for protocol governance. Use hardware wallets (Ledger, Trezor) or MPC (multi-party computation) solutions like Fireblocks.

// Example: Gnosis Safe with hardware wallet enforcement

// This isn't possible on-chain, but you can enforce it off-chain via policy

contract SecureMultiSig {

address[] public signers;

uint256 public threshold;

// Require that signers use hardware wallets (enforced via off-chain policy)

// On-chain, you can at least require timelocks for large withdrawals

uint256 public constant WITHDRAWAL_DELAY = 24 hours;

mapping(bytes32 => uint256) public withdrawalTimestamps;

function initiateWithdrawal(uint256 amount) external onlySigner {

bytes32 withdrawalId = keccak256(abi.encodePacked(amount, block.timestamp));

withdrawalTimestamps[withdrawalId] = block.timestamp;

}

function executeWithdrawal(uint256 amount, bytes32 withdrawalId) external onlySigner {

require(

block.timestamp >= withdrawalTimestamps[withdrawalId] + WITHDRAWAL_DELAY,

"Timelock not expired"

);

// Execute withdrawal

}

}

2. No Timelock on Emergency Withdrawals

The insurance fund had no timelock for admin withdrawals. Once the multi-sig signed, funds moved instantly.

A 24-48 hour timelock would have:

  • Allowed monitoring systems to detect anomalies
  • Given the team time to pause the contract
  • Prevented the 12-minute drain

Foundry test showing how a timelock would block this:

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.20;

import "forge-std/Test.sol";

contract Vault {

uint256 public balance;

uint256 public constant TIMELOCK = 24 hours;

mapping(bytes32 => uint256) public withdrawalQueue;

function deposit() external payable {

balance += msg.value;

}

function requestWithdrawal(uint256 amount) external {

bytes32 id = keccak256(abi.encodePacked(msg.sender, amount, block.timestamp));

withdrawalQueue[id] = block.timestamp;

}

function executeWithdrawal(bytes32 id, uint256 amount) external {

require(block.timestamp >= withdrawalQueue[id] + TIMELOCK, "Timelock active");

payable(msg.sender).transfer(amount);

balance -= amount;

}

}

contract VaultTest is Test {

Vault vault;

function setUp() public {

vault = new Vault();

vault.deposit{value: 100 ether}();

}

function testCannotDrainInstantly() public {

bytes32 id = keccak256(abi.encodePacked(address(this), 100 ether, block.timestamp));

vault.requestWithdrawal(100 ether);

vm.expectRevert("Timelock active");

vault.executeWithdrawal(id, 100 ether);

// Fast-forward 24 hours

vm.warp(block.timestamp + 24 hours);

vault.executeWithdrawal(id, 100 ether);

assertEq(vault.balance(), 0);

}

}

Run:

forge test --match-test testCannotDrainInstantly -vvv

3. Oracle Manipulation (The Fake $DRFT Token)

Why did the attackers create the fake $DRFT token? To test Drift's oracle defenses.

Drift's perpetuals platform relies on Pyth Network oracles for price feeds. The attackers discovered that Pyth's confidence intervals for low-liquidity tokens were too wide — allowing manipulated prices to pass validation.

By inflating $DRFT's price from $0.01 to $4.20 via wash trading, they confirmed that Drift's contracts would accept inflated oracle data without triggering alarms.

Lesson for EVM devs:

Always use TWAP (Time-Weighted Average Price) oracles for low-liquidity assets, and set strict confidence bounds.

// Example: TWAP oracle with confidence bounds (Chainlink-style)

interface IPriceFeed {

function latestRoundData() external view returns (

uint80 roundId,

int256 answer,

uint256 startedAt,

uint256 updatedAt,

uint80 answeredInRound

);

}

contract SecureVault {

IPriceFeed public priceFeed;

uint256 public constant MAX_PRICE_DEVIATION = 10; // 10% max deviation

function validatePrice(int256 currentPrice, int256 historicalPrice) internal pure returns (bool) {

uint256 deviation = uint256((currentPrice > historicalPrice)

? currentPrice - historicalPrice

: historicalPrice - currentPrice

);

uint256 percentDeviation = (deviation * 100) / uint256(historicalPrice);

return percentDeviation <= MAX_PRICE_DEVIATION;

}

function withdraw(uint256 amount) external {

(, int256 price,,,) = priceFeed.latestRoundData();

int256 historicalPrice = getHistoricalPrice(); // Implement TWAP logic

require(validatePrice(price, historicalPrice), "Price manipulation detected");

// Execute withdrawal

}

}

4. No Circuit Breakers for Authorized Wallets

Drift had circuit breakers — automated pause mechanisms that trigger when:

  • Withdrawals exceed 10% of TVL in 1 hour
  • Unusual trading volume spikes
  • Oracle price deviations > 15%

But there was a fatal exception: Circuit breakers did not apply to admin wallets.

The logic was: "If it's an admin, it's intentional." But when the admin key is compromised, that assumption becomes the attack vector.

Recommendation:

Circuit breakers should apply to all withdrawals, including admin actions. Implement a "super-admin" role that can override circuit breakers only after a 24-hour delay.

What Could Have Stopped This?

Here's a checklist of mitigations that would have prevented or limited the damage:

| Mitigation | Impact |

|------------|--------|

| Hardware wallets for all multi-sig signers | Would have prevented phishing key theft |

| 24-hour timelock on withdrawals > $1M | Would have given team time to pause |

| Circuit breakers applying to admin wallets | Would have auto-paused after first withdrawal |

| TWAP oracles with tight confidence bounds | Would have flagged fake token manipulation |

| Cold/hot wallet split (90% cold, 10% hot) | Would have limited drain to $50M instead of $285M |

Aftermath: Where Are the Funds?

As of April 18, 2026:

  • $127M recovered (via exchange freezes at Binance, Coinbase, Kraken)
  • $158M still missing (moved to privacy mixers, then to unknown wallets)
  • Lazarus Group attribution confirmed by Chainalysis, TRM Labs, and FBI Cyber Division

Drift has announced a 50% reimbursement plan for affected users, funded by:

  • Recovered funds ($127M)
  • Insurance fund reserves ($18M)
  • VC bailout (Jump Crypto, Multicoin: $50M)

But that still leaves a $90M hole.

Lessons for Solidity Devs

Even though Drift is on Solana, the lessons apply to EVM chains:

  • Use hardware wallets for governance — no exceptions
  • Timelocks on all high-value operations — even admin actions
  • Circuit breakers for everyone — including authorized wallets
  • TWAP oracles + confidence bounds — never trust spot prices alone
  • Cold/hot wallet splits — 90% cold storage, 10% operational hot wallets
  • The Drift hack wasn't a "smart contract bug." It was operational security failure. And those are the hardest to audit.

    Stay safe out there.

    ---

    Resources:

    Prêt à mettre en pratique ?

    Applique ces concepts avec des exercices interactifs sur Solingo.

    Commencer gratuitement