天天看點

吃個大瓜!3行代碼PR,搞走4000萬...

最近,鴨哥在v2ex這個網站看到一個代币RVN被惡意增發的黑客攻擊事件,這個瓜必須帶着大家一起吃,太TM有趣了,一個黑客把一群開發玩得團團轉~~~

這個RVN也就是俗稱的“烏鴉币”(引用了權力的遊戲),發起于2018年3月,目前市值排名63(見下圖)。

在虛構的維斯特洛世界中,烏鴉被用作傳遞真理陳述的信使。 權利的遊戲
吃個大瓜!3行代碼PR,搞走4000萬...

在鴨哥看來,這種扯淡的白皮書看看就好了(隻要你有影響力,你也可以去發xx币,某寶上有專門的打包服務),什麼XX币代表着未來,全都是扯淡,說白了就是割韭菜。

事情是這樣的。

6月29号,CryptoScope開發團隊的一個資深程式員,正喝着Coffee,做着回歸測試,突然發現烏鴉币的餘額不對,經常他自己的排查,這才發現主網除了正常的挖礦操作,還出現了很多異常的RVN增發操作,這肯定不是我們的鍋,趕快回報給Ravencoin官方團隊,一起來解決bug。後來兩波團隊商量後,決定先暫時關閉Solus Explorer的部分入口,以降低其他攻擊者利用該漏洞的可能性,為官方團隊解決問題赢得了一定時間。

7月3号,RVN 團隊向社群釋出了緊急更新。

7月4号,在1,304,352區塊上對Ravencoin網絡進行了程式修複。

後來,官方解釋本次漏洞是由一名黑客(Github 賬号:WindowsCryptoDev)送出的惡意 PR引入的 bug 導緻。這個PR隐藏之深,表面上看是完善報錯資訊(實質是一個邏輯漏洞),是以,該PR很快得到官方團隊的回報,并合并到主分支上面。

代碼很短,不仔細分析還真看不出來問題。

之前的邏輯:對于asset相關的交易,隻要交易的RVN output value不是 0,都會傳回 “bad-txns-asset-tx-amount-isn't-zero” 報錯資訊。

PR修改後的邏輯:表面看起來是為了友善開發者區分具體的報錯原因,但是黑客留了一個後門,即沒有針對TX_REISSUE_ASSET 進行報錯資訊優化。這樣帶來的後果不僅僅是報錯資訊不可分辨,而是将原本不合法的交易(TX_REISSUE_ASSET 且 RVN output value 不是0)判斷為合法的交易,最終導緻了 RVN 的增發。

說白了少了一步else的操作。

目前,官方已經對該邏輯漏洞進行了修複,咱們再來看看是怎麼修複的,見下圖

吃個大瓜!3行代碼PR,搞走4000萬...

這位黑客到底是怎麼利用自己寫的邏輯漏洞來增發的呢?具體詳情如下:

1月17号,黑客在Ravencoin主網持續釋出TX_ISSUE_ASSET交易,為後續的TX_REISSUE_ASSET攻擊提供基礎。 5月9号,黑客開始每隔2小時在Ravencoin主網發起一個 TX_REISSUE_ASSET交易,增發500,000 RVN 到自己的位址,該行為一直持續到7月3日,此時黑客察覺到官方已經準備對bug進行修複(此時主網上的 bug 并沒有完全修複)。 7月4号,主網上還出現了3筆新的攻擊交易,增發了兩筆1,000,000 RVN和一筆2,804,398RVN,不過這3 筆攻擊交易應該都不是之前的黑客所為。

從Solus Explorer統計來看,最終總增發量為 301,804,400 RVN,超過3.01億RVN,套現4000多萬,一直沒有被發現。

其實,整體看來,這個黑客隻是求财,他并沒有瘋狂增發,并且發現官方已發現這個漏洞時,就沒有再增發了,不然真得很有可能就讓這個币歸0了,說白了,還是這個币的持有者們,将會為這4000多萬來買單,太難了~~~

吃個大瓜!3行代碼PR,搞走4000萬...

關于這種邏輯漏洞,還是出現過不少,一旦遇到,真得很難發現,需要核心開發者把好關才行。

吃個大瓜!3行代碼PR,搞走4000萬...

最後,上面這張OWASP TOP 10的官方圖,值得你花時間和精力去研究的^_^