2025년 1월 23일, ODOS 프로토콜의 OdosLimitOrderRouter 계약에서 취약점이 악용되어 약 50,000달러 상당의 이더리움(ETH)과 베이스(Base)가 도난당했습니다. 이 공격은 검증되지 않은 사용자 입력과 서명 검사를 우회하기 위한 사전 컴파일된 계약이 결합된 임의 호출 취약점으로 인해 발생했습니다.
개요
공격자 계약: https://basescan.org/address/0x22a7da241a39f189a8aec269a6f11a238b6086fc
취약한 계약: https://basescan.org/address/0xb6333e994fd02a9255e794c177efbdeb1fe779c7
트랜잭션 공격: https://basescan.org/tx/0xd10faa5b33ddb501b1dc6430896c966048271f2510ff9ed681dd6d510c5df9f6
취약점 분석
공격자는 ERC6492 계약을 배포하는 데 사용되는 임의 호출을 악용하는 데 초점을 맞추었습니다. 그들은 임의 호출을 사용하여 ERC20.transfer를 통해 이 계약에서 토큰을 훼손할 수 있지만, IERC1271Wallet(_signer).isValidSignature 서명 검사를 우회해야 합니다. 이는 처음에는 불가능해 보이는데, 왜냐하면 _signer 코드 길이가 0이어야 한다는 의미에서 실행될 수 없기 때문입니다. 그러나 일부 특수 계약은 코드 길이가 0이지만 여전히 명령을 실행할 수 있습니다: 사전 컴파일된 계약.
공격자는 메모리 부분 간 데이터를 복사하도록 설계된 0x4 Identity 사전 컴파일된 계약을 사용했습니다. 임의 호출을 통해 토큰을 훼손한 후, 공격자는 0x4 계약을 _signer로 사용하여 서명 검사를 우회했습니다. 계약은 IERC1271Wallet(0x4).isValidSignature를 호출했지만 되돌리지 않아 공격을 성공적으로 완료했습니다.
결론
자신의 프로젝트를 구축할 때 사용자 입력을 신뢰하지 마세요. 제공된 모든 매개변수는 코드에 의해 주의 깊게 검증되어야 합니다. 신뢰할 수 없는 계약에 대한 호출은 여러 예기치 않은 위험 또는 오류를 초래할 수 있습니다. 모든 외부 호출은 잠재적인 보안 위험으로 간주되어야 하며 극도의 주의를 기울여 처리해야 합니다.
계약 코드 길이를 사용할 때는 매우 주의해야 합니다. 이는 계약의 생성자 및 사전 컴파일된 계약과 관련된 실제 문제를 야기할 수 있습니다. ERC-6492를 사용하는 프로토콜은 이와 유사한 위험을 완화하기 위해 주의 깊게 확인해야 합니다.
또한 보안 감사를 실시하는 것이 강력히 권장됩니다. 이는 첫 번째 릴리스 버전뿐만 아니라 향후 추가되는 새로운 기능에 대해서도 수행해야 합니다. 업그레이드 프로세스에서 다양한 문제가 발생할 수 있으므로 이 또한 철저히 감사해야 합니다.





