수머 머니 해킹 - 재입금 및 환율 조작

이 기사는 기계로 번역되었습니다
원문 표시

컴파운드(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를 대량으로 빌리기 위해 플래시론 수행했습니다. 그런 다음 그는 이러한 자산을 sdrETHsdrUSDC 계약에 푸시하여 해당 래핑된 토큰을 민트(Mint) 하려고 시도했습니다.

공격자는 이러한 자산을 담보로 sdrETH 시장에서 사용 가능한 모든 기본 자산(약 이더리움(ETH) 에 달하는)을 차용하려고 시도했습니다. 차용 후 공격자는 즉시 repayBorrowBehalf 함수를 호출하여 빌린 이더리움(ETH) 에 " 1 wei "를 더해 상환했습니다. repayBorrowBehalf 함수는 낮은 수준의 address.call 메소드를 사용하여 초과 금액을 지불자에게 환불하므로 결국 재진입 공격 흐름이 촉발됩니다. 이 취약점을 활용하여 공격자는 totalBorrows 업데이트되기 전에 대체 기능에서 환율을 조작할 수 있습니다.

환율에 관한 복합 문서를 확인하면 상환 후 totalBorrows() 가 올바르게 감소하지 않으면 환율이 원래보다 훨씬 높아진다는 것을 알 수 있습니다.

그런 다음 공격자는 sdrcbETHsdrUSDC 시장에 남아 있는 모든 자산을 차용했습니다.

sdrETH 시장의 조작된 환율로 인해 공격자는 원래 금액인 150 이더리움(ETH) 상환하는 데 약 74 sdrETH 만 필요했지만 sdrUSDC 금액은 정상적으로 상환되었습니다.

모든 대출금을 상환하고 공격을 완료한 후 공격자는 약 10cbETH와 310,000USDC의 이익을 얻었습니다.

결론

Web3 개발자는 복합과 같은 일반적인 프로토콜을 사용자 정의할 때, 특히 새로운 기능을 도입하거나 기존 기능을 수정할 때 주의를 기울여야 합니다.

재진입 공격은 스마트 계약의 잘 알려진 취약점이고 많은 이전 프로젝트에서 악용되었지만 Web3 공간에서는 여전히 일반적인 공격 벡터로 남아 있습니다. 이 공격은 보안 감사의 중요성과 개발자가 향후 프로젝트에서 모범 사례를 준수해야 하는 필요성을 강조합니다.

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트