컴파운드(Compound)의 CEther 계약의 포크 버전인 SumerMoney 프로젝트의 sdrETH 계약이 최근 공격을 받았습니다. 공격 벡터는 새로운 것이 아닙니다. 공격자는 재진입 취약성을 활용하여 래핑된 sdrToken 과 기본 토큰 간의 환율을 조작했습니다.
개요
공격자 주소:
https://basescan.org/address/0xbb344544ad328b5492397e967fe81737855e7e77
공격 트랜잭션: https://basescan.org/tx/0x619c44af9fedb8f5feea2dcae1da94b6d7e5e0e7f4f4a99352b6c4f5e43a4661
취약한 계약( sdrETH 토큰): https://basescan.org/address/0x7b5969bb51fa3b002579d7ee41a454ac691716dc
익스플로잇 분석
공격자는 먼저 밸런서 볼트에서 150 WETH와 645,000 USDC를 대량으로 빌리기 위해 플래시론 수행했습니다. 그런 다음 그는 이러한 자산을 sdrETH 및 sdrUSDC 계약에 푸시하여 해당 래핑된 토큰을 민트(Mint) 하려고 시도했습니다.
공격자는 이러한 자산을 담보로 sdrETH 시장에서 사용 가능한 모든 기본 자산(약 이더리움(ETH) 에 달하는)을 차용하려고 시도했습니다. 차용 후 공격자는 즉시 repayBorrowBehalf 함수를 호출하여 빌린 이더리움(ETH) 에 " 1 wei "를 더해 상환했습니다. repayBorrowBehalf 함수는 낮은 수준의 address.call 메소드를 사용하여 초과 금액을 지불자에게 환불하므로 결국 재진입 공격 흐름이 촉발됩니다. 이 취약점을 활용하여 공격자는 totalBorrows 업데이트되기 전에 대체 기능에서 환율을 조작할 수 있습니다.
환율에 관한 복합 문서를 확인하면 상환 후 totalBorrows() 가 올바르게 감소하지 않으면 환율이 원래보다 훨씬 높아진다는 것을 알 수 있습니다.
그런 다음 공격자는 sdrcbETH 및 sdrUSDC 시장에 남아 있는 모든 자산을 차용했습니다.
모든 대출금을 상환하고 공격을 완료한 후 공격자는 약 10cbETH와 310,000USDC의 이익을 얻었습니다.
결론
Web3 개발자는 복합과 같은 일반적인 프로토콜을 사용자 정의할 때, 특히 새로운 기능을 도입하거나 기존 기능을 수정할 때 주의를 기울여야 합니다.








