Атака на оракул: як у DeFi підробляють ціну активу — і чому TWAP не рятує

22 хв. читання

Коротко (TL;DR)

Смартконтракт не вміє дивитися на біржовий графік. Ціну йому приносить окремий механізм — оракул. Якщо зловмисник зуміє підсунути туди неправильне число бодай на один блок, протокол сам віддасть йому чужі гроші: видасть позику під завищену заставу або ліквідує здорову позицію як проблемну.

Головне, що варто винести:

  • Атака не ламає код. Контракт відпрацьовує рівно так, як написаний — просто на хибних вхідних даних.
  • Спотова ціна з одного пулу ліквідності — фатальна помилка проєктування. Вона дозволяє зробити все в одній транзакції, а капітал узяти флеш-позикою.
  • Усереднення ціни за вікно (TWAP) піднімає вартість атаки, але не закриває питання: за розрахунками дослідників ETH Zurich вартість зростає як квадратний корінь від довжини вікна, а не лінійно.
  • У 2026 році профіль загрози змінився: найбільша атака року — не маніпуляція ринком, а компрометація ключа того, хто підписує ціну.
  • Вкладнику треба дивитися не на слово «оракул» у документації, а на три речі: звідки береться ціна, чи є обмежувачі відхилення і що відбувається при зависанні фіда.

Що таке ціновий оракул і чому він — слабке місце

Блокчейн — закрита система. Усередині немає ні курсу долара, ні ціни акції, ні котирування з біржі: він знає лише те, що записано в його власних блоках. Оракул — це міст, яким зовнішнє число потрапляє всередину.

Звучить буденно, поки не подивитися, що на цьому числі тримається. Кредитний протокол за ним вирішує, кого ліквідувати. Майданчик безстрокових контрактів — хто в прибутку. Синтетичні активи — скільки токенів випустити. Одне число керує всіма грішми в контракті.

OWASP виділяє маніпуляцію оракула в окрему позицію свого рейтингу вразливостей смартконтрактів — SC02:2025. Формулювання гранично коротке: це вразливість контрактів, які покладаються на зовнішні джерела даних, і «якщо дані оракула спотворені, це призводить до некоректної поведінки контракту».

Важливо одразу зафіксувати різницю, яку багато хто не помічає. Це не злам у звичному сенсі. Ніхто не знаходить переповнення буфера й не обходить перевірку прав. Смартконтракт виконує свою логіку бездоганно. Просто логіка спирається на цифру, яку зловмисник навчився підробляти.

Як влаштована атака: три кроки

Класичний сценарій, який аналітики Chainalysis описують як типовий, складається з трьох рухів.

Крок 1. Розгін. Зловмисник вкидає велику суму в торгівлю низьколіквідним токеном — зазвичай просто в той пул, звідки протокол бере ціну. У тонкому пулі навіть помірна купівля зсуває котирування на десятки відсотків. Ринок загалом цього не помітив, а конкретний пул уже показує іншу ціну.

Крок 2. Вилучення. Поки ціна спотворена, зловмисник виконує потрібну дію: позичає під роздуту заставу, забирає прибуток за позицією або ліквідує чужу.

Крок 3. Повернення. Ціну відпускають назад. Токени, куплені на першому кроці, продаються — частина грошей повертається.

Окремої розмови заслуговує капітал. Раніше для першого кроку потрібні були власні мільйони. Флеш-позика цю вимогу зняла: вона дозволяє позичити величезну суму без застави за однієї умови — повернути в тій самій транзакції. Як зазначають дослідники безпеки Nethermind, зловмисник вливає цю ліквідність у пул децентралізованої біржі, створює тимчасову розбіжність цін і видобуває з неї вартість.

Саме зв’язка «атомарна транзакція + флеш-позика» перетворила теоретичну вразливість на масову практику. Один з ранніх прикладів: 26 жовтня 2020 року зловмисник вивів $34 млн з Harvest Finance приблизно за сім хвилин.

Два сценарії: позичити зайве і ліквідувати чуже

Робота ETH Zurich формально поділяє атаки на кредитний протокол на два типи — і захищаються від них по-різному.

Атака на недозабезпечену позику. Зловмисник грає роль позичальника і завищує ціну застави. Числовий приклад з тієї ж роботи: за коефіцієнта забезпечення 0,8 і ринкової ціни ETH у $3000 під 1 ETH можна позичити $2400. Піднявши ціну до $4000, позичальник отримує вже $3200 — і не повертає їх. Різниця у $200 на одиницю застави і є прибутком, якщо вартість розгону ціни виявилася меншою.

Атака на ліквідацію. Тут зловмисник грає роль ліквідатора і занижує ціну застави, щоб здорова позика виглядала проблемною. Протокол дозволяє погасити її зі знижкою і забрати заставу. Позиція жертви була в порядку — її вбило підроблене котирування.

Другий сценарій підступніший для звичайного користувача: у першому страждає скарбниця протоколу, у другому — конкретна людина, яка нічого не порушувала і навіть не стежила за ринком у цей момент.

Скільки коштує підробити ціну

Економіка — єдине, що реально обмежує зловмисника. Розгін ціни коштує грошей: що товщий пул, то дорожче його зсунути. Атака має сенс, лише якщо здобич більша за витрати на маніпуляцію.

Звідси перше практичне правило: небезпеку створює не сам оракул, а тонка ліквідність заставного активу. Протокол може використовувати бездоганне джерело ціни і все одно бути вразливим, якщо приймає в заставу токен, чий пул можна зрушити на сотню тисяч доларів.

Chainlink у своїй документації формулює це прямо і перекладає відповідальність на розробника: активи з високим ринковим ризиком, «зокрема низьколіквідні», найбільш вразливі до маніпуляції, і враховувати це зобов’язаний той, хто вбудовує фід, а не оператор вузлів.

Спот, TWAP і чому «поставили TWAP» — не відповідь

Відповідь галузі на атомарні атаки — усереднення. Замість миттєвої ціни протокол бере середньозважену за часом за вікно (TWAP). Логіка така: щоб зсунути середнє за 135 блоків, маніпуляцію доведеться утримувати всі 135 блоків, оплачуючи арбітражерам можливість повертати ціну на місце щоблока. Дорого — отже невигідно.

Галузеві розбори досі подають це як розв’язання: 30-хвилинний TWAP, пишуть у ChainScore Labs, вимагає утримувати ціну великого пулу всю цю тривалість, і така вартість «часто заборонна».

Проте є результат, який у популярні гайди майже не потрапив. Дослідники ETH Zurich (Mackinga, Nadahalli, Wattenhofer) показали два способи обійти цю логіку:

  1. Одноблокова атака. Замість того щоб тримати відхилення ε усі LT блоків, зловмисник один раз рухає ціну на LT·ε — середнє виходить те саме. Для вікна у 135 блоків точка беззбитковості — ε = 0,574: за великих відхилень одноблокова атака дешевша за багатоблокову. Загальний висновок авторів: вартість маніпуляції TWAP зростає як квадратний корінь, а не лінійно з довжиною вікна.
  2. Змова з тим, хто пропонує блоки (MMEV). Якщо зловмисник контролює два блоки поспіль, маніпуляція стає «на порядки дешевшою за відомі атаки».

Підкреслимо чесно: це результат однієї академічної роботи, і він сперечається з робочою засновкою галузі. Ми наводимо його не як установлений факт, а як аргумент, який варто тримати в голові: фраза «у нас TWAP» не є відповіддю на питання про безпеку. Правильне питання — яке вікно, яка ліквідність пулу і що відбувається за різкого відхилення.

Є і друга ціна усереднення, про яку кажуть рідше. Що довше вікно, то сильніше оракул відстає від реального ринку. На обвалі протокол з довгим TWAP бачить учорашню ціну і не ліквідує позиції вчасно — так народжується безнадійний борг. Між стійкістю до маніпуляції і свіжістю даних доводиться вибирати, безкоштовного варіанта немає.

І ще один доказ з роботи ETH Zurich, який рідко проговорюють: проти повільної багатоблокової атаки в команди є час помітити недобре і зупинити протокол. Проти одноблокової часу немає взагалі — оракул віддає спотворену ціну вже в наступному блоці.

Другий клас відмови: коли бреше не ринок, а сам фід

Усе описане вище — маніпуляція ринку. Зловмисник чесно торгує, просто в масштабі, який ламає котирування. Але 2026 рік вивів на перший план інший клас відмови, і плутати їх не можна, бо захист різний.

Найбільша оракульна атака року — Ostium, майданчик безстрокових контрактів на реальні активи. 15 липня 2026 року зі сховища на Arbitrum вивели близько $18 млн у USDC за загального обсягу заблокованих коштів близько $37,8 млн — майже половину. Ми писали про цей інцидент одразу після зупинки торгів.

Механіка виявилася принципово іншою. Жодного ринку не рухали. Зловмисник контролював скомпрометований ключ підписанта і користувався двома привілеями одразу: зареєстрованим форвардером, який міг сам виконувати ордери, і правом випускати цінові звіти з відмітками часу з майбутнього. Далі він надіслав підроблені звіти, через які збиткові угоди виглядали прибутковими, і прогнав близько двадцяти зациклених операцій. Кожен цикл виплачував зі сховища як за справжній ринковий прибуток.

Різниця принципова. У класичній атаці поверхня — глибина ліквідності; закривається вона вибором джерела ціни та обмежувачами. Тут поверхня — керування ключами, і жоден TWAP від неї не захищає.

Що це не випадковість, видно із загальної картини: у звіті CertiK за перше півріччя 2026 року компрометація гаманців і ключів стала найдорожчою категорією — $444,5 млн на 33 інциденти.

Що показав 2026 рік: леджер інцидентів

Тепер до цифр, яких у більшості англомовних гайдів немає: вони досі оперують статистикою 2022 року.

За ончейн-підрахунком DEXTools на 16 липня 2026 року, за рік зафіксовано 12 оракульних експлойтів приблизно на $46,3 млн — близько 4,6% від порядку $1,0 млрд, втрачених DeFi за 2026-й.

ПротоколВтратиТехніка
Ostium$18,0 млнКомпрометація ключа підписанта
Blend Pools V2$11,0 млнМаніпуляція цінового оракула
Bonzo Lend$10,1 млнМаніпуляція цінового оракула
Makina$4,2 млнФлеш-позика + оракул
Aave V3$0,9 млнПомилка налаштування фіда (CAPO)
Edel Finance$0,4 млнФлеш-позика + оракул
Інші (6 інцидентів)$1,7 млнVelar, Ploutos, Singularity, Stake DAO та ін.
Оракульні експлойти 2026 року за сумою втрат

З цієї таблиці видно те, що не читається із заголовків. Класична флеш-позикова атака пішла в дрібний калібр: Makina та Edel разом — $4,6 млн. Великі суми тепер приносять відмови інфраструктури та помилки конфігурації. Випадок Aave V3 показовий окремо: $0,9 млн втрачено не через атаку на ринок, а через неправильно налаштований обмежувач.

Для контексту: загальні втрати Web3 у першому півріччі 2026 року становили $1,315 млрд на 344 інциденти. Формально це на 46,8% менше, ніж роком раніше, але порівняння оманливе — H1 2025 визначався разовим зламом Bybit на $1,45 млрд. Без нього база зіставна, і поточний період виявляється приблизно на 28% вищим. Другий квартал 2026-го став найбільш «зламуваним» кварталом в історії бази DefiLlama — 99 інцидентів.

Оракули, таким чином, не головний за грошима вектор. Але один з найупертіших: 12 інцидентів за неповний рік попри те, що і механіка атаки, і захист від неї відомі з 2020-го.

Окрема цифра, корисна для оцінки наслідків. За даними DefiLlama, кореляція між украденою сумою і відтоком коштів з протоколу за 30 днів близька до нуля: той, хто втратив $250 тис., втрачає приблизно ту саму частку депозитів, що й той, хто втратив $25 млн. З 59 історичних зламів переважна більшість протоколів утримала менше ніж 10% дозламного обсягу. Іншими словами, розмір дірки майже не впливає на результат — впливає сам факт.

Як захищається протокол

OWASP у розборі SC02:2025 приписує чотири заходи:

  1. Агрегувати дані кількох незалежних оракулів — щоб одне спотворене джерело не вирішувало результат.
  2. Задати мінімальний і максимальний поріг ціни — різкий стрибок за межі коридору відхиляється.
  3. Ввести часову затримку між оновленнями — миттєва підміна перестає працювати.
  4. Вимагати криптографічні підписи довірених сторін — підтвердження справжності даних.

Chainlink формулює свою позицію жорсткіше, ніж заведено думати. В офіційній документації прямо сказано: розробники, які вбудовують фіди, «несуть виняткову відповідальність» за впровадження заходів зниження ризику — перевірок якості даних, запобіжників і резервної логіки. Самі фіди поділені на категорії за рівнем ринкового ризику: від низького до дуже високого, плюс окремі позначки для нових токенів і кастомних фідів. Тобто «ми взяли Chainlink» — це теж не відповідь, якщо взято фід категорії високого ризику і без обмежувачів.

Про запобіжник (circuit breaker) варто сказати окремо, бо це найбільш недооцінений захід. Ідея проста: контракт стежить за відхиленням нової ціни від попередньої і, якщо поріг пробито, автоматично ставить протокол на паузу. У Chainlink є готовий шаблон з двома тригерами — на подію оновлення ціни і періодичний за розкладом. Аудитори 0xMacro зазначають, що багато розробників просто не знали про таку можливість, поки їм на неї не вказували.

Практичний чекліст для команди протоколу:

  • Не читати спотову ціну з одного пулу. Ніколи.
  • Обмежити набір заставних активів: тонка ліквідність = дешева маніпуляція.
  • Поставити коридор допустимого відхилення і паузу при його пробої.
  • Перевіряти свіжість даних: завислий фід небезпечніший за відсутній, бо виглядає робочим.
  • Окремо захищати ключі підписантів — це відмова, від якої дизайн оракула не рятує.
  • Пам’ятати про аварійну зупинку: проти одноблокової атаки час реакції дорівнює нулю, отже зупинка має бути автоматичною.

Що може зробити звичайний вкладник

Тут доведеться бути чесними: повністю перевірити оракульний дизайн протоколу людина без досвіду читання смартконтрактів не зможе. Але відсіяти найнебезпечніші варіанти — цілком.

Дивіться на заставні активи, а не на протокол. Якщо майданчик приймає в заставу токени з тонкою ліквідністю, ризик маніпуляції вбудований у нього за задумом, яким би відомим не було ім’я.

Шукайте відповідь на три питання в документації. Звідки береться ціна (зовнішній фід чи власний пул)? Чи є обмежувач відхилення і пауза? Що відбувається, якщо фід перестав оновлюватися? Якщо в документації цього немає взагалі — це саме собою відповідь.

Користуйтеся публічними даними про ризики. У DefiLlama є розділ ризик-даних за окремими сховищами: там видно, чим забезпечено вклад, яка історія інцидентів, як влаштовано мультипідпис і які залежності має пул. Це не гарантія, але це помітно більше, ніж «аудит пройдено». Як нагадують самі аналітики DefiLlama, «аудит пройдено» не означає «безпечно».

Не тримайте в протоколі більше, ніж готові втратити, і не довше, ніж потрібно. Це звучить банально, але саме ця звичка відділяє неприємність від катастрофи. Кошти, які не працюють просто зараз, логічніше тримати в самостійному зберіганні — наприклад, на апаратному гаманці, де ключ не залишає пристрій і не залежить від чужого смартконтракту.

Пам’ятайте про суміжні вектори. Оракул — одна із зовнішніх залежностей протоколу, але не єдина: ми розбирали, як працюють атаки на довірену інфраструктуру, де шкідливий код приходить легітимним каналом постачання.

Залишкові ризики: чого не закриває жоден із заходів

Чесно проговоримо, де закінчується захист — інакше чекліст вище перетворюється на хибне відчуття безпеки.

Ризик компромісу між свіжістю і стійкістю. Він неусувний за визначенням. Довге вікно усереднення захищає від маніпуляції, але на різкому русі ринку показує вчорашню ціну — і протокол не ліквідує позиції вчасно, накопичуючи безнадійний борг. Коротке вікно ловить ринок, але дешевше піддається підміні. Будь-яке налаштування — вибір, якою ціною платити.

Ризик нульового часу реакції. Проти одноблокової атаки ручне втручання марне: спотворена ціна з’являється в оракулі й використовується в одному й тому самому блоці. Усе, що не автоматизовано, тут не працює.

Ризик ключів. Ні агрегування джерел, ні коридор відхилення, ні усереднення не захищають від того, хто легітимно підписує ціну. Ostium втратив майже половину сховища саме так, а за даними CertiK компрометація гаманців і ключів — найдорожча категорія першого півріччя 2026 року ($444,5 млн на 33 інциденти).

Ризик конфігурації. Інцидент з Aave V3 на $0,9 млн у 2026 році стався не через атаку на ринок, а через неправильно налаштований обмежувач. Правильні механізми, виставлені неправильно, створюють хибну впевненість.

Ризик неповернення. Повернення в DeFi рідкісні, а правова перспектива, як показано нижче, не визначена. Планувати участь варто з припущення, що втрачене не повернеться.

Слабке місце у всієї конструкції спільне: протокол може зробити все правильно на своєму боці й лишитися вразливим через тонку ліквідність прийнятого в заставу активу або через чужу операційну помилку.

Правовий бік: злочин чи «торгова стратегія»

Цей розділ зазвичай відсутній у технічних гайдах, а він суттєво змінює розрахунок ризиків.

У жовтні 2022 року Аврахам Ейзенберг вивів з Mango Markets на Solana активи, які Chainalysis оцінює у $117 млн, а судові репортажі — приблизно у $110 млн. Схема була підручниковою: почавши з $10 млн USDC на двох рахунках, він розігнав ціну токена MNGO (у день атаки обсяг торгів був на 2000% вищим за середній за попередні десять днів) і позичив під роздутий портфель практично все, що було в протоколі.

Далі починається цікаве. Ейзенберг публічно назвав себе і наполягав, що це була «прибуткова торгова стратегія», а не злочин: код відпрацював рівно так, як написаний. Присяжні з ним не погодилися і винесли обвинувальний вердикт.

А 23 травня 2025 року суд Південного округу Нью-Йорка цей вердикт скасував. Обвинувачення за товарними статтями анульовані через проблеми з підсудністю, а за шахрайством винесено виправдання — суд не знайшов матеріально хибного твердження, оскільки в Mango Markets, як сформульовано в розборі рішення, попросту «не було правил, інструкцій або заборон» щодо позик. Не можна збрехати майданчику, який нічого не вимагав.

Справу не закрито: прокуратура подала апеляцію, доводячи, що таке тлумачення «підірвало б традиційне розуміння шахрайства». На момент публікації спір не розв’язано.

Практичний висновок для вкладника неприємний і його варто проговорити прямо: розраховувати на те, що гроші поверне суд, не варто. Правова кваліфікація подібних атак у США лишається невизначеною, а повернення коштів у DeFi, як показує статистика, рідкісні — у першому півріччі 2026 року з $1,315 млрд втрат заморожено і повернуто $115,3 млн, тобто менше ніж дев’ять відсотків.

FAQ

Чим маніпуляція оракулом відрізняється від звичайного зламу? Звичайний злам використовує помилку в коді — переповнення, невірну перевірку прав, повторний вхід. Маніпуляція оракулом нічого не ламає: контракт виконується штатно, але на підроблених вхідних даних. Тому такі випадки іноді й називають «не зламом», хоча гроші зникають однаково.

Чи захищає Chainlink від маніпуляції повністю? Ні, і сам Chainlink цього не стверджує. У його документації прямо сказано, що всі фіди несуть певний ризик, а відповідальність за перевірки якості даних, запобіжники і резервну логіку лежить на розробнику. Фіди поділені на категорії за рівнем ринкового ризику — фід з високим ризиком без обмежувачів не врятує.

Флеш-позика — це вразливість? Сама собою ні, це легітимний інструмент: позика без застави за умови повернення в тій самій транзакції. Вона не створює вразливість, а здешевлює її експлуатацію — знімає вимогу до стартового капіталу. Вразливість міститься у протоколі, який довіряє миттєвій ціні з одного пулу.

Чи може атака зачепити мене, якщо я просто вніс кошти й нічого не роблю? Так. За атаки на ліквідацію ціна застави занижується штучно, і здорова позиція ліквідується як проблемна. Користувач при цьому не робив помилок і міг узагалі не стежити за ринком.

Що важливіше перевірити перед депозитом — аудит чи оракул? Оракул і набір заставних активів. Аудит фіксує стан коду на дату перевірки і не відповідає за ринкові умови та керування ключами. Звіт CertiK за перше півріччя 2026 року показує, що зростальна частка експлойтів припадає на контракти старші за рік — тобто вже перевірені.

Чи стало безпечніше у 2026 році? За зіставною базою — ні. Втрати першого півріччя 2026 року приблизно на 28% вищі за еквівалентну базу 2025-го, якщо виключити разовий злам Bybit, а другий квартал став рекордним за кількістю інцидентів. Оракульні атаки при цьому змістилися: менше класичної маніпуляції ринком, більше відмов інфраструктури і помилок налаштування.

Поділитися
Зв'язатися:
Крипто- та data-аналітик, інженер-програміст (факультет комп'ютерних наук ХНУРЕ). В IT з 2008 року: адміністрував корпоративний моніторинг у «Vodafone Україна», сім років розробляв і просував веб-проєкти, п'ять років керував маркетингом на метриках — конверсія, CTR, ROI, LTV.Криптовалютними ринками займаюся з 2021 року: ончейн-метрики, токеноміка, макроекономічні індикатори. Розробив власну data-driven модель аналізу ринку на 30+ метрик. Стек — Python (pandas, NumPy, SciPy, matplotlib), математична статистика та EDA; збір і звірку даних автоматизую AI-агентами.Принцип — «Don't trust, verify»: кожна цифра перевірена за першоджерелом, ключові — щонайменше за двома незалежними; прогнози — лише сценарії з умовами. Теза без даних не публікується.