
batchOverflow 버그 수정 https://medium.com/@peckshield/alert-new-batchoverflow-bug-in-multiple-erc20-smart-contracts-cve-2018-10299-511067db6536
PeckShield 팀이 발견한 batchOverflow 버그에 대한 수정입니다.
원본 계약은 송신자가 총 금액(입력 값 x 주소 수)을 지불할 충분한 토큰을 가지고 있는지 확인하는 검사만 수행했습니다. 오버플로가 발생하면 이 금액이 0이 될 수 있으며, 이는 line 12의 테스트를 통과하게 만듭니다.

한 가지 가능한 수정 방법은 송신자의 잔액에서 금액을 뺀 값이 현재 잔액보다 작은지 확인하는 또 다른 테스트를 추가하는 것입니다. 오버플로가 발생하면 잔액이 동일하게 되어 유효하지 않은 트랜잭션이 됩니다. 하지만 이 방법으로도 문제가 완전히 해결되지는 않습니다. 공격자가 소액의 잔액(예: 10 토큰)을 가지고 있다면, _value를 오버플로시켜 현재 보유한 잔액보다 작은 값으로 만들고 이 게이트를 통과할 수 있습니다.
더 나은 수정 방법은 전송된 총 금액이 _value보다 크거나 같은지 간단히 확인하는 것입니다. 오버플로가 발생하면 이 테스트는 통과되지 않습니다. 공격자가 이 게이트를 통과하려면 최소한 그 마법의 숫자 / 20이 필요하며, 이는 여전히 매우 큰 금액이고 다른 버그를 악용하지 않고는 얻기 어려울 것입니다.
truffle이 설치되어 있는지 확인하고 프로젝트 루트에서 truffle test 명령을 실행하세요. 다음과 같이 표시되어야 합니다.
