모스카 프로젝트의 잘못된 논리를 폭로하다

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

2025년 1월 13일, 바이낸스 스마트 체인(BSC)의 모스카 계약이 joinwithdraw 흐름의 잘못된 로직으로 인해 두 번째로 악용되었습니다. 이 악용으로 인해 약 37,600달러의 총 손실이 발생했습니다.

주요 정보

공격자:

https://bscscan.com/address/0xe763da20e25103da8e6afa84b6297f87de557419

취약한 계약:

https://bscscan.com/address/0xd8791f0c10b831b605c5d48959eb763b266940b9

트랜잭션 공격:

https://bscscan.com/tx/0xf13d281d4aa95f1aca457bd17f2531581b0ce918c90905d65934c9e67f6ae0ec

악용 분석

공격자는 단일 트랜잭션에서 7번의 연속적인 join 호출을 발행한 후 withdrawFiat 함수를 실행하여 설계 결함을 악용했습니다. 이 순서를 통해 공격자는 자신의 잔액 누적을 조작하고 예금을 초과하는 자금을 인출할 수 있었습니다.

join 함수 분석

join 함수는 스테이킹 입력을 관리하도록 설계되었습니다. 그러나 그 논리는 사용자의 잔액이 이전 잔액을 기반으로 계속 누적되도록 허용했습니다. 공격자가 연속으로 7번 join을 호출함으로써 자신의 잔액을 인위적으로 부풀릴 수 있었습니다. 이러한 스테이킹 수익 계산에 대한 비정상적인 접근 방식은 악용될 수 있는 의도하지 않은 상태를 만들어냈습니다.

withdrawFiat 함수 분석

withdrawFiat 함수에서 계약은 사용자의 입력을 기반으로 직접 인출 금액을 차감하고 해당 금액을 사용자에게 다시 전송합니다. 이 공식은 join 함수의 누적 논리와 일치하지 않아, 공격자가 원래 예금한 금액보다 더 많은 자금을 인출할 수 있게 했습니다.

근본 원인

핵심 문제는 join 함수의 누적 메커니즘과 withdrawFiat 함수의 인출 공식 간의 불일치입니다. withdrawFiat은 자체 논리에 따라 올바르게 실행되지만, 반복된 join 호출로 생성된 복합 잔액을 고려하지 않습니다. 이 불일치와 부적절한 검증 검사로 인해 공격자가 예금을 크게 초과하는 자금을 인출할 수 있었습니다.

교훈

모스카 계약 악용은 프로젝트의 스마트 계약 설계에 있는 핵심적이지만 피할 수 있는 결함, 즉 개발 중 철저한 테스트와 보안 감사로 발견하고 해결할 수 있었던 취약점을 드러냅니다. 이 사례는 강력한 테스트 케이스, 형식 검증 및 타사 코드 검토가 배포 전 잠재적인 공격 벡터를 발견하는 데 필수적임을 강조합니다. 또한 스마트 계약 보안이 개발 이상의 것이며 지속적인 위험 평가와 모니터링을 요구하여 블록체인 생태계를 악용으로부터 보호해야 함을 강조합니다.

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