2025년 1월 8일, BSC의 Mosca 계약이 사용자 잔액 업데이트 시 결함으로 인해 해킹되어 약 19,485달러의 손실이 발생했습니다.
개요
분석
사용자가 join()하면 rewardQueue에 추가됩니다. 이제 다른 사용자가 buy() 또는 swap() 토큰을 할 때마다 보상을 받게 됩니다.
Verichains를 읽어주셔서 감사합니다! 무료로 구독하여 새 게시물을 받고 제 작업을 지원해 주세요.
사용자가 프로그램을 나가기로 결정하면 exitProgram()이 호출됩니다. 이 함수는 rewardQueue를 순회하며, 사용자가 일치하면 withdrawAll()을 호출하여 모든 보류 중인 보상을 사용자에게 전송합니다.
withdrawAll()에서 사용자의 총 보상은 다음과 같이 계산됩니다:balance = user.balance + user.balanceUSDT + user.balanceUSDC
그러나 exitProgram()에서는 user.balance만 0으로 설정되고 user.balanceUSDT 및 user.balanceUSDC는 사용자가 퇴출된 후에도 값을 유지합니다. 해커는 이 취약점을 악용했습니다.
해커는 먼저 프로토콜에 join()하고 자산을 성공적으로 예치합니다(4단계). 그런 다음 풀을 활용하여 플래시론(15단계)을 수행하고 '가짜' buy() 작업(23단계)을 수행하여 자신을 위한 보상을 얻습니다. 마지막으로 반복적으로 join()과 exitProgram()을 호출하여 계약에서 USDC를 빼냅니다.
결론
개발자들은 Checks-Effects-Interactions 패턴을 위반했고 해킹 직전에 Mosca 계약을 배포했는데, 이는 시간 압박이 높고 제품 테스트가 부족했음을 나타낼 수 있습니다. 이러한 문제를 방지하기 위해서는 개발 초기 단계부터 전체 프로젝트 수명 주기에 걸쳐 강력한 감사 프로세스를 구현할 것을 강력히 권장합니다. 정기적인 보안 감사, 코드 검토, 취약점 평가는 잠재적 위험을 악용되기 전에 식별하고 해결하기 위한 표준 관행이 되어야 합니다.
Verichains를 읽어주셔서 감사합니다! 무료로 구독하여 새 게시물을 받고 제 작업을 지원해 주세요.



