원저자: SlowMist Security Team Jiujiu
관련 정보
관련 정보
핵심 계약 주소
P2Controller:
0x34ca24ddcdaf00105a3bf10ba5aae67953178b85
XNFT:
0x39360AC1239a0b98Cb8076d4135d0F72B7fd9909
xToken:
0x5417da20aC8157Dd5c07230Cfc2b226fDCFc5663
공격자 EOA 주소
0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a
첫 번째 레벨 제목
0xf70F691D30ce23786cfb3a1522CFD76D159AcA8d
0x234e4B5FeC50646D1D4868331F29368fa9286238
0x7B5A2F7cd1cc4eEf1a75d473e1210509C55265d8
0xc45876C90530cF0EE936c93FDc8991534F8A6962
취약점 핵심 포인트 분석
1. 공격자는 XNFT 컨트랙트의 PledgeAndBorrow 기능을 통해 NFT를 담보로 xToken을 빌려줍니다.
PledgeInternal 함수에서 NFT로 전송하고 주문을 생성합니다.
2. 그런 다음withdrawNFT 함수를 호출하여 약속된 NFT를 추출합니다.먼저 주문이 청산 상태인지 판단합니다.그렇지 않으면 주문 상태가 NFT가 철회되지 않았으며 대출 금액이 0(부채 없음)인지 판단합니다. 인출 가능한 모기지 NFT.
3. 위는 공격 전에 주문을 생성하기 위한 준비 작업이며 공격자는 생성된 주문을 사용하여 돈을 빌리기 위해 xToken 컨트랙트에서 직접 차용 기능을 호출하기 시작합니다.
BorrowInternal 함수에서 컨트롤러 계약의 BorrowAllowed 함수는 빌릴 수 있는지 여부를 결정하기 위해 외부에서 호출됩니다.
첫 번째 레벨 제목
공격 트랜잭션 분석
여기서는 공격 트랜잭션 중 하나의 세부 사항만 표시하고 다른 공격 트랜잭션의 방법은 동일하므로 여기서는 반복하지 않겠습니다.
공격 전 준비 - 주문을 생성하는 트랜잭션:
0x61a6a8936afab47a3f2750e1ea40ac63430a01dd4f53a933e1c25e737dd32b2f
1. 먼저 공격자는 NFT를 공격 컨트랙트에 전송하고 권한을 부여한 다음 xNFT 컨트랙트에 있는 claimAndBorrow 함수를 호출하여 NFT를 담보로 주문을 생성하고 돈을 빌립니다. 들어오는 xToken.투자자는 자신이 구성한 xToken 계약의 주소를 전달하고 대출 금액을 0으로 만들어 NFT가 청산되지 않고 후속 NFT가 성공적으로 모금되면 부채가 0이 되는 조건을 충족합니다. .
2. 공격자는 저당 잡힌 NFT를 인출하기 위해 인출NFT 기능을 호출합니다.
공식적인 공격 트랜잭션:
0x51cbfd46f21afb44da4fa971f220bd28a14530e1d5da5009cfbdfee012e57e35
요약하다
요약하다
이 취약점의 핵심은 차용 시 주문 내 NFT 출금 여부에 대한 판단이 없기 때문에 공격자는 NFT 차익 출금 후 상환 없이 이전에 생성된 주문을 차용할 수 있다는 점입니다. 이러한 취약점에 대응하여 SlowMist 보안팀은 차용 작업을 수행할 때 이러한 문제가 다시 발생하지 않도록 주문 상태에서 담보 출금 여부를 판단할 필요가 있다고 권고합니다.