BTNFT 사건 - 부적절한 유효성 검사로 인해 무단 보상 청구 발생

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

2025년 4월 18일, BTNFT 프로토콜이 악용되어 약 19,000달러의 손실이 발생했습니다.

BTNFT는 NFT 판매와 시간 기반 토큰 릴리즈 메커니즘을 결합한 내장된 비트토렌트(BTT) 토큰 베스팅 및 보상 분배 기능이 있는 NFT 계약입니다.

개요

공격자:
https://bscscan.com/address/0x7a4d144307d2dfa2885887368e4cd4678db3c27a

취약한 계약:
https://bscscan.com/address/0x0fc91b6fea2e7a827a8c99c91101ed36c638521b

공격 트랜잭션:
https://bscscan.com/tx/0x1e90cbff665c43f91d66a56b4aa9ba647486a5311bb0b4381de4d653a9d8237d

익스플로잇 분석

공격 트랜잭션을 보면, 공격자가 반복적으로 transferFrom 함수를 호출하여 1부터 500까지의 NFT ID를 BTNFT 계약 자체로 전송하려고 시도하고 있음을 알 수 있습니다. 방출된 BTT.TransferBTNFT.TokensClaimed 이벤트를 통해 공격자가 BTNFT 계약에서 비트토렌트(BTT) 토큰을 수집하고 있음을 알 수 있습니다.

공격자가 이를 어떻게 할 수 있었는지 이해하기 위해 BTNFT 계약의 transferFrom 함수 구현을 살펴보겠습니다. NFT를 새 소유자에게 전송하기 위해 _update 함수를 호출하고 있음을 알 수 있습니다.

_update 함수의 구현을 보면, 수신자가 BTNFT 계약 자체일 때 어떠한 검사 없이 호출자에게 비트토렌트(BTT) 토큰을 전송하기 위해 claimReward 함수를 호출합니다. 이는 실제로 BTNFT를 소유하지 않은 사람도 BTNFT 계약 자체로 BTNFT를 전송하고 보상을 청구할 수 있는 명백한 보안 취약점입니다.

결론

이 익스플로잇은 간단한 인증 논리 버그가 어떻게 상당한 재정적 손실로 이어질 수 있는지 보여줍니다. 계약의 _update 함수는 NFT가 계약 자체로 전송될 때 호출자가 보상을 청구할 정당한 권리가 있는지 확인하지 못했습니다. 이러한 간과로 인해 누구나 실제 NFT를 소유하지 않고도 비트토렌트(BTT) 토큰을 청구할 수 있었고, 결과적으로 19,000달러의 손실이 발생했습니다. 이 사건은 특히 계약 자체 상호작용 및 보상 분배를 처리할 때 적절한 인증 검사 및 입력 검증을 구현하는 것의 중요성을 강조합니다.

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