O bezpieczeństwie teledysku Booby i NFT | Księga główna

O bezpieczeństwie teledysku Booby i NFT | Księga główna

Węzeł źródłowy: 2657383

3 listopada 2021 r., Booba (francuski raper, który stworzył wytwórnię Muzyka piracka) umieść zestaw 5 NFT na sprzedaż, co daje w sumie 5000 sztuk każdej z tych animowanych kart. Całość tych NFT została sprzedana w ciągu kilku dni za 150 ETH (0.006 ETH za sztukę), czyli na ten dzień ponad 700.000 XNUMX dolarów. Jako bonus, szczęśliwi posiadacze jednego z tych NFT mogli zobaczyć ekskluzywny teledysk TN ponieważ Listopada 8 2021.

Les rappeurs m'envient, sont tous en galère.
Boulbi, strona zachodnia

Byliśmy trochę ciekawi i zastanawialiśmy się, w jaki sposób teledysk jest chroniony i czy możemy się nim cieszyć, nawet jeśli żadnego nie kupimy NFT.

Jak działa ochrona teledysku?

Aby obejrzeć film, właściciele NFT muszą odwiedzić stronę /mon-nft i użyj swojego portfela kryptograficznego (takiego jak Metamask lub WalletConnect), aby podpisać wiadomość Ethereum "Pour accéder à TN, merci de bien vouloir signer ce message" z tym samym portfelem, w którym kupowano NFT. Po podpisaniu żądanie POST z treścią JSON zgodną z tym formatem jest wysyłane przez przeglądarkę internetową do a Serwis internetowy hostowane na AWS:

Kilka testów pokazuje, że wiadomości inne niż domyślne nie są odrzucane, jeśli są zakodowane w formacie JSON. Na przykład: [1337] i "blah" są uważane za prawidłowe, jednak wiadomości, które nie są w formacie JSON, powodują wywołanie internal error natychmiast.

Jeśli podpis powiązany z adresem Ethereum (wallet) i message są prawidłowe, serwer sprawdza, czy portfel rzeczywiście kupił jeden z NFT, w przeciwnym razie wystąpi błąd Tu ne possèdes aucun des NFTs jest zwracany. Ten ostatni krok zajmuje nieco więcej czasu, co pozwala na sformułowanie następującej hipotezy. Jeśli znajdziemy w Internecie klucz publiczny spełniający te 2 warunki:

  • Klucz publiczny podpisał wiadomość JSON, a powiązany podpis jest publiczny;
  • Portfel kupił co najmniej jeden z NFT.

możliwe może być odtworzenie wiadomości i podpisu na serwerze AWS w celu pobrania teledysku.

Połączenia BOOBA TN NFT jest także tokenem ERC-20 (B2O_TN) stworzone przez inteligentny kontrakt 0x3b73…94dd. Zaczęliśmy od listy wszystkich właścicieli NFT dzięki etherscan.io. W momencie pisania tego tekstu co najmniej 3484 z tych NFT było 1 właścicieli. Portfele 1516 posiadają więcej niż jeden taki sam NFT, prawdopodobnie w celu późniejszej odsprzedaży jednego z nich.

Un jour de mon salaire c'est leur zapewnienie vie.
Boulbi, strona zachodnia

Pierwsza próba – etherscan.io

Wiadomości Ethereum są kodowane przy użyciu formatu personal_sign format ("x19Ethereum Signed Message:n" + length(message) + message) przed podpisaniem przy użyciu ECDSA. Ponieważ transakcje Ethereum są kodowane w innym formacie (RLP), podpisy transakcji nie mogą zostać rozpoznane jako prawidłowe podpisy wiadomości. Inaczej mówiąc, podpisów wiadomości nie można znaleźć na blockchainie Ethereum.

Pierwszym miejscem, w którym znaleźliśmy wiadomości Ethereum poza łańcuchem, jest etherscan.io, które zapewnia interfejs sieciowy do zweryfikować podpis wiadomości Ethereum i ostatecznie zapisz go, aby był dostępny za pośrednictwem publicznego adresu URL. Najpierw pobraliśmy wszystkie wiadomości Ethereum zapisane za pośrednictwem tej usługi: etherscan.io/verifiedSignatures.

Na przykład sprawdźSig/2642 pokazuje, że właściciel NFT Nudna małpa #6743 udowodnił, że jest także właścicielem konta na Twitterze małpa6743:

Jest także właścicielem NFT Booba TN jak pokazano w tym transakcja. Jednak nawet jeśli podpis jest prawidłowy, wiadomość nie jest w formacie JSON i nie może zostać rozpoznana przez serwer AWS.

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

Druga próba – snapshot.org

Strona internetowa migawka.org umożliwia indywidualnym osobom głosowanie na propozycje za pomocą portfela Ethereum: Snapshot to wielozadaniowy, bezgazowy klient działający poza łańcuchem, zapewniający łatwe do zweryfikowania i trudne do podważenia wyniki. Głosy są przypadkowo w formacie JSON.

GraphQL interfejs może służyć do wysyłania zapytań do bazy danych głosów. Na przykład następujące minimalne żądanie GraphQL zwraca identyfikatory głosów tam, gdzie znajduje się adres wyborcy 0x668248dF4595e09Aa253B31478312748078F7a20:

Wynik zapytania pokazuje, że ten adres został użyty do 2 głosów:

Głosy podpisane przez każdy portfel posiadający Booba TN NFT można odzyskać w całości za pomocą jednego żądania GraphQL. Istnieje 689 wyników dla 140 unikalnych wyborców.

Adres 0x668248dF4595e09Aa253B31478312748078F7a20 kupiony 5 Booba TN NFT. Jak wykazano wcześniej, adres ten głosował także za następującymi propozycjami:

Powiązane głosy są przechowywane w międzyplanetarnym systemie plików (IPFS): QmZL5toFBQrPgNDPTpQCukWtcjWeT5x6nou75wMMTm52zM i QmQLSv36j3GLdRjubqpXjpAgwYG77Mop5T9uLCi73r1SUT. Treść pierwszego głosowania jest następująca:

zrzut ekranu wideo

Należy pamiętać, że adres URL wygasa po pewnym czasie i nie jest już ważny.

Wnioski

Ten post na blogu pokazuje, że nawet jeśli kryptografia zasilająca to wydarzenie NFT jest solidna, to podstawowa atak powtórkowy wystarczyło, aby złamać zabezpieczenie teledysku. Poprawka jest prosta: wiadomość wysłana do serwera AWS powinna zostać odrzucona, jeśli nie pasuje do wiadomości wysłanej do portfela kryptowalutowego.

La piraterie n'est jamais finie!
Walabok, Nero Nemezis

Po nawiązaniu kontaktu (znalezienie odpowiedniego kontaktu było w rzeczywistości najtrudniejszą częścią) programiści z RenesansNFT byli bardzo skłonni do współpracy i reagowali. Problem został rozwiązany w ciągu niecałej godziny i nie można już ominąć dostępu zabezpieczającego.

Znak czasu:

Więcej z Księga główna