반응형
Unchecked Low Level Calls
가능한 낮은 수준(Low Level)의 함수 호출(Call)을 하지 말것. 반환 값을 제대로 처리하지 않으면 예기찮은 동작으로 이어질 수 있다.
Solidity에서 취약점을 가진 함수는 대표적으로 'call()', 'callcode()', 'delegatecall()' 그리고 'send()' 가 있다. 이런 함수들은 flase로 설정된 부울 값을 반환하고, 코드를 계속 실행하게 한다.
CODE EXAMPLE
send()의 반환 값 확인을 잊었을때 발생할 수 있는 문제
function withdraw(uint256 _amount) public {
require(balances[msg.sender] >= _amount);
balances[msg.sender] -= _amount;
etherLeft -= _amount;
msg.sender.send(_amount);
}
호출(call)을 사용하여 이를 수용하지 않는 스마트 계약에 에테르를 보내는 경우(e.g.지불해야 할 예비 함수가 없음), EVM은 반환값을 false로 대체하는데 위의 경우 반환 값을 확인하지 않기 때문에 함수의 계약 상태 변경은 되돌리지 않으며, etherLeft 변수는 결국 잘못된 값을 추적함
반응형
'블록체인 > DASP' 카테고리의 다른 글
[DASP Top 10] Denial of Service (DoS) (0) | 2022.11.25 |
---|---|
[DASP Top 10] Arithmetic (0) | 2022.11.24 |
[DASP Top 10] Access Control (0) | 2022.11.18 |
[DASP Top 10] Reentrancy (0) | 2022.11.15 |
DASP TOP 10 (0) | 2022.11.12 |
댓글