Znaleziono lukę krytyczną w zabezpieczeniach kryptowaluty EOS

Daniel Larimer, dyrektor technologiczny EOS ogłosił na swoim twitterze, iż każdy kto znajdzie błąd w sieci EOS, dostanie 10000$ zapłaty. Zmotywowało to zespół informatyczny „360 Vulcan” do pracy w szukanie błędów kryptowaluty EOS. Na nieszczęście zespołu kryptowaluty, odkryli serię krytycznych luk w ich sieci blockchainu. Sprawdzono, że niektóre z tych luk mogą zdalnie wykonywać dowolny kod wpisany w węźle EOS, co może pozwolić hakerom na zdalne przejęcie blockchainu EOS.

Zespół firmy 360 Vulcan przeanalizował całą sięć EOS i stwierdził, że istnieje ogromna luka w zabezpieczeniach kodu EOS, która może prowadzić do serii włamań na blockchain kryptowaluty. Dyrektor technologiczny, Daniel Larimer chciał, aby przed wypuszczeniem systemu 1.0 EOS był on w pełni sprawny i nie narażał uczestników sieci na potencjalne problemy techniczne, czy chociażby ataki hakerów. Wczesnym rankiem dzisiejszego dnia, zespół 360 Vulcan po raz pierwszy zgłosił podatność sieci EOS i zakomunikował, iż pomogą firmie naprawić zagrożenia bezpieczeństwa sieci. Osoba odpowiedzialna za aktualizacje EOS (która ma mieć miejsce 2 czerwca) stwierdziła, że ​​sieć nie zostanie oficjalnie uruchomiona, dopóki problemy nie zostaną naprawione.

Aby wykorzystać ową krytyczną lukę, osoba atakująca sieć może przesłać złośliwe zapytanie do serwera węzłów, po tym, jak kontrakt zostanie przeanalizowany przez serwer węzłów, złośliwa funkcja może zostać wykonana na serwerze i przejąć nad nim całkowitą kontrolę.

EOS z luką krytyczną

EOS to token w formacie ERC20, stworzony na podstawie blockchainu Ethereum. Ethereum oferuje możliwość stworzenia własnego cyfrowego aktywa lub smart kontraktu, a EOS, Tron czy VeChain są tego idealnym przykładem. Jeśli luka zostałaby wykorzystana przez hakerów, spowodowałoby to ogromne straty firmy, a przede wszystkim zaufanie użytkowników.

Poniżej przedstawiamy techniczny wynik prac zespołu 360 Vulcan:

Wadliwa ścieżka i luka w zabezpieczeniach związana z wychwytywaniem poza obszarem bufora:

libraries/chain/webassembly/binaryen.cpp (Line 78),Function binaryen_runtime::instantiate_module:

Jak opisuje zespół, podczas przechowywania elementów w  „offset” nie zostało ono poprawnie sprawdzone. Przed ustawieniem wartości istnieje potwierdzenie, które sprawdza przesunięcie, jednak niestety „assert” działa tylko w wersji debugowania i nie działa w wersji wypuszczonej.

for (auto& segment : module->table.segments) {
Address offset = ConstantExpressionRunner<TrivialGlobalManager>(globals).visit(segment.offset).value.geti32();
assert(offset + segment.data.size() <= module->table.initial);
for (size_t i = 0; i != segment.data.size(); ++i) {
table[offset + i] = segment.data[i];
}
}

Wykorzystanie luki w zabezpieczeniach do wykonania zdalnego kodu

Tak jak pisaliśmy powyżej, luka może zostać wykorzystana do przejęcia głównej sieci EOS. Umożliwiłoby to atak na całą sieć blockchainu. Atakujący może użyć zdalnego kodu w procesie nodeos, poprzez przesłanie złośliwych kontraktów do węzła i umożliwić węzłowi przeanalizowania złośliwego kontraktu. Atakujący może w ten sposób wykraść prywatny klucz super-węzłów lub nawet kontrolować zawartość nowych bloków. Co więcej, atakujący mogą spakować złośliwą umowę do nowego bloku i opublikować go. W rezultacie wszystkie pełne węzły w całej sieci będą kontrolowane przez atakującego. Jeśli luka nie zostałaby znaleziona, prędzej czy później ktoś wkroczyłby w sieć EOS i zaaplikował złośliwy kontrakt, umożliwiając sobie pełną kontrolę nad siecią.

Komentarze