慢霧科技:智能合約 transferFrom 權限控制不當導致的任意盜幣攻擊簡述


智能合約里的 transferFrom 是批準轉賬流程里的關鍵函數,這個由于不如 transfer 那么常用赞厕,容易被不小心忽略艳狐。這個流程最大的問題是權限問題∶笊#看代碼說話:

// 批準轉賬上限(批準目標可以代我轉賬的上限)
function approve(address _spender, uint256 _value) public returns (bool success) {
    allowed[msg.sender][_spender] = _value;
    Approval(msg.sender, _spender, _value);
    return true;
}

// 代我轉賬的流程
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
    /// same as above
    require(_to != 0x0);
    require(balances[_from] >= _value);
    require(balances[_to] + _value > balances[_to]);

    uint previousBalances = balances[_from] + balances[_to];
    balances[_from] -= _value;
    balances[_to] += _value;
    allowed[_from][msg.sender] -= _value;
    Transfer(_from, _to, _value);
    assert(balances[_from] + balances[_to] == previousBalances);

    return true;
}

可以看出毫目,這個流程并沒做 allowed[_from][msg.sender] 和 _value 的判斷,比如函數開始應該判斷:

require(allowed[_from][msg.sender] >= _value);

如果 allowed[_from][msg.sender] 不存在诲侮,那么值是 0镀虐,判斷缺失,也就等于之前的 approve 函數形同虛設浆西。然后粉私,這還出現了個有趣的溢出:

allowed[_from][msg.sender] -= _value;

當 allowed[_from][msg.sender] 不存在,那么值是 0近零,減去 _value(大于 0 時)诺核,就溢出了(溢出并不會導致中斷回滾)。這就是為什么如果用了 SafeMath 就會沒問題久信,因為 SafeMath 會拋出錯誤窖杀,直接中斷回滾 transferFrom 函數。

整體這樣看下來裙士,EDU 和 BAI 等合約的 transferFrom 盜幣事件最核心的問題是權限問題入客,溢出在這僅僅是個小插曲而已。


本文摘自慢霧區(qū)微信公眾號文章"智能合約 transferFrom 權限控制不當導致的任意盜幣攻擊簡述"

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市桌硫,隨后出現的幾起案子夭咬,更是在濱河造成了極大的恐慌,老刑警劉巖铆隘,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卓舵,死亡現場離奇詭異,居然都是意外死亡膀钠,警方通過查閱死者的電腦和手機掏湾,發(fā)現死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肿嘲,“玉大人融击,你說我怎么就攤上這事■撸” “怎么了尊浪?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長涩拙。 經常有香客問我际长,道長,這世上最難降的妖魔是什么兴泥? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任工育,我火速辦了婚禮,結果婚禮上搓彻,老公的妹妹穿的比我還像新娘如绸。我一直安慰自己,他們只是感情好旭贬,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布怔接。 她就那樣靜靜地躺著,像睡著了一般稀轨。 火紅的嫁衣襯著肌膚如雪扼脐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天奋刽,我揣著相機與錄音瓦侮,去河邊找鬼。 笑死佣谐,一個胖子當著我的面吹牛肚吏,可吹牛的內容都是我干的。 我是一名探鬼主播狭魂,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罚攀,長吁一口氣:“原來是場噩夢啊……” “哼党觅!你這毒婦竟也來了?” 一聲冷哼從身側響起斋泄,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤杯瞻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后是己,有當地人在樹林里發(fā)現了一具尸體又兵,經...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年卒废,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宙地。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡摔认,死狀恐怖,靈堂內的尸體忽然破棺而出宅粥,到底是詐尸還是另有隱情参袱,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布秽梅,位于F島的核電站抹蚀,受9級特大地震影響,放射性物質發(fā)生泄漏企垦。R本人自食惡果不足惜环壤,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钞诡。 院中可真熱鬧郑现,春花似錦、人聲如沸荧降。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽朵诫。三九已至辛友,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剪返,已是汗流浹背废累。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留随夸,地道東北人九默。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像宾毒,于是被迫代替她去往敵國和親驼修。 傳聞我的和親對象是個殘疾皇子殿遂,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內容