TOCTOU атака в 2026 полностью вымерла? что думаете? у меня последний код с toctou откис после апдейта, у кого жив?
TOCTOU-атака (Time-of-Check-Time-of-Use) на Solana, один из самых опасных типов wallet drainer'ов в 2024–2025 годах. Она эксплуатирует разрыв между симуляцией транзакции (когда кошелёк, например Phantom или Solflare, показывает пользователю "safe" изменения, типа +0.01 SOL) и реальным исполнением на сети.
TOCTOU-атака (Time-of-Check-Time-of-Use) на Solana, один из самых опасных типов wallet drainer'ов в 2024–2025 годах. Она эксплуатирует разрыв между симуляцией транзакции (когда кошелёк, например Phantom или Solflare, показывает пользователю "safe" изменения, типа +0.01 SOL) и реальным исполнением на сети.
Как работает атака (классический сценарий с "proxy program")
- Атакующий разворачивает malicious program (прокси-программу) на Solana. Эта программа имеет встроенную логику TOCTOU: поведение зависит от текущего on-chain state (например, от значения в PDA или другом аккаунте).
- dApp показывает "safe" сценарий:
- Пользователь подключает кошелёк к фишинговому сайту (fake airdrop, mint, swap и т.д.).
- dApp генерирует транзакцию, которая вызывает эту программу.
- На момент симуляции в кошельке state программы "safe" (например, флаг = 0) → программа выполняет безвредное действие (начисляет +0.01 SOL или просто ничего вредного).
- Кошелёк симулирует tx, видит баланс safe (+0.01 SOL, без дрена), показывает зелёный чек и пользователь подписывает.
- После подписи — смена state:
- Атакующий (контролирует dApp и знает signed transaction) быстро отправляет предварительную tx, которая меняет state программы на "malicious" (флаг = 1, или устанавливает delegate authority на свой адрес).
- Это может быть:
- SetAuthority (делегирует authority токен-аккаунтов атакующему).
- Approve delegate для большого/неограниченного amount (или permanent delegate в Token-2022).
- Другие изменения, позволяющие дренаж.
- Исполнение signed tx жертвы:
- Атакующий отправляет уже подписанную жертвой tx на сеть.
- Теперь, при реальном исполнении, программа видит malicious state → вместо safe действия выполняет дренаж: переносит все токены/SOL на адрес атакующего.
- Или, если делегировали authority — атакующий потом отдельной tx (уже со своим authority) дрейнит всё максимально (все токены, NFT и т.д.).
- Почему кошелёк не ловит:
- Симуляция использует текущий state на момент симуляции (safe).
- Реальное исполнение — через секунды/блоки, после смены state.
- Solana быстрая, окно для атаки — несколько секунд.