Vulnerability

閱讀平衡問題

  • January 28, 2020

以下程式碼顯示了余額的讀取:

function WithdrawBuggy(uint256 amount) public {
  uint256 bal = balance[msg.sender];
  require(amount <= bal);
  balance[msg.sender] -= amount;
  require(msg.sender.call.value(amount)());
  if (balance[msg.sender] != bal) {
     emit BalanceDecreased(msg.sender);
  }
} 

攻擊者可以利用餘額讀取嗎?

祖爾菲。

當呼叫者是智能合約時,如果它可以重新進入BuggyWithdraw並且可以更改balance[msg.sender],那麼它可能BalanceDecreased永遠不會發出。

因此,依賴該事件的鏈下服務可能不會考慮餘額已減少。

引用自:https://ethereum.stackexchange.com/questions/79387