Про безпеку музичного відео Booba та NFT | Леджер

Про безпеку музичного відео Booba та NFT | Леджер

Вихідний вузол: 2657383

3 листопада 2021 р. Booba (французький репер, який створив лейбл Піратерська музика) поставити набір із 5 NFT на продаж, загалом 5000 кожної з цих анімованих карток. Усі ці NFT були продані за кілька днів за 150 ETH (0.006 ETH кожен), що на сьогодні становить понад 700.000 XNUMX доларів США. Як бонус, щасливим власникам одного з цих NFT дозволили переглянути ексклюзивне музичне відео TN так як 8 листопада 2021.

Les rappeurs m'envient, sont tous en galère.
Бульбі, Західна сторона

Нам було трохи цікаво, і ми запитали, як захищено музичне відео та чи зможемо ми насолоджуватися ним, навіть якщо не купимо NFT.

Як працює захист музичного відео?

Щоб переглянути відео, власники NFT повинні відвідати сторінку /mon-nft і використовувати свій крипто-гаманець (наприклад, Metamask або WalletConnect), щоб підписати повідомлення Ethereum "Pour accéder à TN, merci de bien vouloir signer ce message" з тим самим гаманцем, що й той, який використовується для купівлі NFT. Після підписання запит POST із тілом JSON у цьому форматі надсилається веб-браузером до a веб-сервіс розміщено на AWS:

Кілька тестів показують, що повідомлення, відмінні від стандартних, не відхиляються, якщо вони закодовані в JSON. Наприклад: [1337] та  "blah" вважаються дійсними, однак повідомлення, які не в JSON, ініціюють internal error миттєво.

Якщо підпис, пов’язаний з адресою Ethereum (wallet) і message дійсні, сервер перевіряє, чи гаманець дійсно купив один із NFT, інакше помилка Tu ne possèdes aucun des NFTs повертається. Цей останній крок займає трохи більше часу, що дозволяє сформулювати наступну гіпотезу. Якщо ми знайдемо в Інтернеті відкритий ключ, який відповідає цим 2 умовам:

  • Відкритий ключ підписав повідомлення JSON, а пов’язаний підпис є відкритим;
  • Гаманець купив принаймні один із NFT.

можливо, можна відтворити повідомлення та підпис на сервері AWS, щоб отримати музичне відео.

Команда BOOBA TN NFT також є токеном ERC-20 (B2O_TN) карбований смарт-контрактом 0x3b73…94dd. Спочатку ми почали зі списку всіх власників NFT завдяки etherscan.io. На момент написання статті було 3484 власники принаймні 1 із цих NFT. 1516 гаманців володіють більш ніж одним NFT, ймовірно, щоб перепродати один із них пізніше.

Un jour de mon salaire c'est leur assurance vie.
Бульбі, Західна сторона

1-ша спроба – etherscan.io

Повідомлення Ethereum кодуються за допомогою personal_sign формат ("x19Ethereum Signed Message:n" + length(message) + message) перед підписанням за допомогою ECDSA. Оскільки транзакції Ethereum закодовані в інший формат (RLP), підписи транзакцій не можна розпізнати як дійсні підписи повідомлень. Іншими словами, підписи повідомлень не можна знайти в блокчейні Ethereum.

Перше місце, де ми знайшли повідомлення Ethereum поза мережею, це etherscan.io, який надає веб-інтерфейс для перевірити підпис повідомлення Ethereum і зрештою збережіть його, щоб зробити доступним через загальнодоступну URL-адресу. Спочатку ми отримали всі повідомлення Ethereum, збережені за допомогою цієї служби: etherscan.io/verifiedSignatures.

Наприклад verifySig/2642 показує, що власник NFT Нудна мавпа №6743 довів, що він також є власником облікового запису Twitter мавпа6743:

Він також є власником NFT Буба Т.Н як показано в цьому угода. Однак, навіть якщо підпис дійсний, повідомлення не має формат JSON і не може бути розпізнано сервером AWS.

Tu n'peux que gagner quand t'as rien à perdre.
Magnifique, Trône

2 спроба – snapshot.org

Веб-сайт snapshot.org дозволяє окремим особам голосувати за пропозиції за допомогою свого гаманця Ethereum: Snapshot — це автономний безгазовий мультиуправлінський клієнт із легкими для перевірки та складними для оскарження результатами. Випадково голоси подаються у форматі JSON.

GraphQL інтерфейс можна використовувати для запиту до бази даних голосів. Наприклад, наступний мінімальний запит GraphQL повертає ідентифікатори голосування, де є адреса виборця 0x668248dF4595e09Aa253B31478312748078F7a20:

Результат запиту показує, що ця адреса була використана для 2 голосувань:

Голоси, підписані кожним гаманцем, що володіє Booba TN NFT, можна отримати повністю за допомогою одного запиту GraphQL. Є 689 результатів на 140 унікальних виборців.

Адреса 0x668248dF4595e09Aa253B31478312748078F7a20 куплений 5 Booba TN NFT. Як було показано раніше, ця адреса також проголосувала за такі пропозиції:

Відповідні голоси зберігаються в міжпланетній файловій системі (IPFS): QmZL5toFBQrPgNDPTpQCukWtcjWeT5x6nou75wMMTm52zM та  QmQLSv36j3GLdRjubqpXjpAgwYG77Mop5T9uLCi73r1SUT. Зміст першого голосування:

скріншот відео

Зауважте, що URL-адреса закінчується через деякий час і більше не є дійсною.

Висновок

Ця публікація в блозі показує, що навіть якщо криптографія, яка забезпечує цю NFT-подію, надійна, це просто повторна атака було достатньо, щоб зламати захист музичного відео. Виправлення просте: повідомлення, надіслане на сервер AWS, має бути відхилено, якщо воно не збігається з повідомленням, надісланим на крипто-гаманець.

La piraterie n'est jamais finie !
Валабок, Нерон Немезида

Після зв’язку (знайти правильний контакт було насправді найскладнішою частиною), розробники з RenaissanceNFT були надзвичайно оперативними та чуйними. Проблему було вирішено менш ніж за годину, і захист доступу більше не можна обійти.

Часова мітка:

Більше від Гросбух