오늘 있었던 EOS FUD에 대해서 - 취약점 분석편

in #kr6 years ago (edited)

아까 낮 2시쯤 EOS에 결함이 발견되었다는 FUD로 인해 EOS 가격이 잠깐 급락했었습니다.
(소량이지만 줍줍한건 안비밀)

EOS Developers 텔방에서도 사실이냐고 묻는 사람들이 많았었습니다.

사태가 어느 정도 진정(?) 된 이후 텔방에 올라온 링크 하나를 타고 가 보았더니
중국 360팀에서 올린 취약점 분석글이 있었습니다.

http://blogs.360.cn/blog/eos-node-remote-code-execution-vulnerability/

 

EOS의 DApp (= 스마트 컨트랙트) 은 WASM(WebAssembly) 형태로 블록체인에 올리는데,

이렇게 올라간 컨트랙트를 결국 BP 노드가 실행을 하게 됩니다.

360팀이 밝힌 내용은, binaryen 인터프리터가 컨트랙트를 파싱하는 과정에서
array에 접근하는 index의 boundary 체크를 하지 않는 점을 이용해
비정상적인 메모리 주소에 접근이 가능한 것을 이용한 취약점입니다.
(사실 index를 assert()로 검사하고는 있으나 assert()는 디버그모드에서만 동작하므로 릴리즈모드에서는 index를 검사하지 않음)

문제가 되었던 binaryen.cpp 를 열어보니 다른 곳에는 모두 FC_ASSERT()를 사용하고 있으나 딱 저 부분만 assert() 로 되어 있었네요.

누가 실수했나 봅니다.

360팀은 만딸라(아마도?) 를 받게 되었고, 블록원 직원들은 오늘 아침부터 assert() 를 뒤져서 하나씩 바꾸고 있습니다.

360팀은 저 부분 말고도 out of boundary나 stack overflow, integer overflow 가 발생하는 부분을
EOS github에 이슈로 올려주고 있네요.

https://github.com/EOSIO/eos/issues/3539 : Parsing nesting objects in JSON results in segment fault
https://github.com/EOSIO/eos/issues/3540 : WAVM: Incorrect bounds check when translating a reference type can results in buffer overrun
https://github.com/EOSIO/eos/issues/3541 : Binaryen: array_ptr_impl can cause buffer overflow in 32-bits build

Bug Bounty로 인해 많은 버그들이 메인넷 전에 수정되기를 기대합니다.

이제 FUD 퍼트리면 만딸라 안준다고 합니다.

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.030
BTC 66543.69
ETH 3327.31
USDT 1.00
SBD 2.71