Slow Mist District의 정보에 따르면 2022년 1월 28일 Qubit 프로젝트의 QBridge가 공격을 받아 약 8천만 달러의 손실이 발생했습니다. SlowMist 보안 팀은 분석을 수행하고 간략한 분석 형식으로 공유했습니다.
간단히 분석
1. 공격자는 ETH에서 QBridge 컨트랙트를 통해 입금 작업을 수행하고, 교차할 대상 체인의 destinationDomainID, 교차할 크로스체인 자산의 asset resourceID, 크로스체인의 양으로 구성된 데이터를 전달합니다. 체인 펀드 및 입금시 수신 주소.
2. 공격자는 들어오는 resourceID가 cross-ETH Token이 요구하는 값이라고 명시하지만 depositETH 함수가 아닌 QBridge의 deposit 함수를 호출하므로 cross-chain 자금의 양과 msg.value 확인은 다음과 같다. 먼저 우회했습니다. 입금 기능은 리소스 ID에 따라 매핑에서 핸들러 주소를 빼서 재충전하게 되며, 공격자는 실제 교차 ETH Token에 필요한 값을 전달하므로 핸들러 컨트랙트의 입금 기능을 성공적으로 호출할 수 있습니다.
3. 핸들러 컨트랙트의 보증금 기능은 리소스ID에 따라 재충전할 Token이 화이트리스트에 있는지 확인하는데, 공격자가 전달한 리소스ID는 ETH에 해당하므로 매핑에서 재충전할 Token은 0입니다. 주소, 그것은 ETH를 충전하는 것으로 간주되며 화이트리스트 검사를 통과합니다. 다만, 입금 기능은 다시 충전할 Token 주소를 확인하지 않고(ETH 충전은 depositETH 기능을 통해 크로스체인 해야 함) safeTransferFrom을 통해 충전할 Token의 transferFrom 기능을 직접 호출했습니다.
4. 재충전할 Token 주소는 0번지이고, 코드 사이즈 없이 EOA 주소로 호출한 실행 결과는 true가 되고 반환 값은 비어 있기 때문에 transferFrom을 통한 전송 작업은 safeTransferFrom의 검사를 통과하고, 마지막으로 Deposit Cross-chain 재충전 이벤트를 트리거합니다.
5. 들어오는 resourceID는 크로스 ETH에 필요한 값이므로 트리거된 Deposit 이벤트는 실제 ETH 충전 이벤트와 동일하므로 QBridge는 공격자가 ETH 크로스 체인을 수행했다고 생각하게 되므로 캐스팅 공격자를 위한 BSC 체인 대량의 qXETH 토큰. 공격자는 이 qXETH 자격 증명을 사용하여 Qubit의 대출 풀을 고갈시켰습니다.
MistTrack 분석
요약하다
요약하다
이번 공격의 주원인은 일반 토큰과 네이티브 토큰을 별도로 충전할 때 화이트리스트에 있는 토큰을 이체할 때 주소가 0인지 다시 확인하지 않아 충전을 통해 해야 할 충전이 발생한다는 점이다. 기본 충전 기능이지만 일반적인 토큰 충전 로직을 통해 원활하게 작동할 수 있습니다. SlowMist 보안팀은 재충전된 토큰의 화이트리스트 확인 이후에도 재충전된 토큰이 네이티브 토큰인지 확인이 필요하다고 제안합니다.
원본 링크
https://etherscan.io/tx/0x478d83f2ad909c64a9a3d807b3d8399bb67a997f9721fc5580ae2c51fab92acf
https://bscscan.com/tx/0x33628dcc2ca6cd89a96d241bdf17cdc8785cf4322dcaf2c79766c990579aea02