Dough Finance - 입력 데이터 검증 부족

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

2024년 7월 12일, Dough Finance는 익스플로잇을 경험하여 약 180만 달러의 손실을 입었습니다. ConnectorDeleverageParaswap 계약의 설계 결함으로 인해 공격자는 DoughDsa가 아베(AAVE) 에서 담보를 인출하여 공격자에게 전송할 수 있었습니다.

개요

공격자:

https://etherscan.io/address/0x67104175fc5fabbdb5a1876c3914e04b94c71741

취약한 계약:

https://etherscan.io/address/0x9f54e8eAa9658316Bb8006E03FFF1cb191AafBE6

거래 공격:

https://etherscan.io/tx/0x92cdcc732eebf47200ea56123716e337f6ef7d5ad714a2295794fdc6031ebb2e

익스플로잇 분석

거래 이후 공격자는 아베(AAVE) 에서 Vault 의 부채 잔액을 확인하고 Vault를 상환하기 위해 Balancer 에서 USDC를 플래시론했습니다.

그런 다음 트랜잭션은 ConnectorDeleverageParaswap을 호출하여 swapData의 특정 작업으로 flashloan 요청을 트리거했습니다.

커넥터는 풀에서 flashloan을 시작하고 excuteOperation 함수에서 응답을 처리했습니다.

ConnectorDeleverage 계약의 ExecutionOperation 함수에 대해 자세히 살펴보겠습니다.

이 함수는 공격 계약의 swapData가 포함된 풀 계약의 입력을 구문 분석합니다. deloopAllColtral 함수는 모든 공격자 페이로드를 반복하여 호출합니다. 풀과 커넥터 부채 축소 계약이 서로를 신뢰하고 호출을 실행하기 전에 사용자 입력을 확인하지 않을 위험이 높습니다.

다음 지침을 따르세요.

이 루프에는 두 개의 임의 호출( vault.executeActionweth.transferFrom) 이 있습니다. 첫 번째 작업에서 Vault는 다음을 수행합니다.

볼트 계약은 ConnectorDeleverageParaswap 지침에 따라 아베(AAVE) 호출하고 596 WETH (담보로 사용되는 스테이킹 잔액)를 인출합니다.

다음 지침에서 ConnectorDeleverageParaswap은 swapData를 따라 모든 저장소 잔액을 공격 계약으로 전송합니다. 공격자는 이러한 자금을 통해 USDC로 교환하고, 플래시론을 상환하고, 상당한 프로젝트 자산을 획득할 수 있습니다.

근본 원인:

주요 취약점은 deloopAllCollatters 함수 내에서 임의 호출을 실행하기 전에 ConnectorDeleverageParaswap 계약이 사용자 입력을 검증하지 못한다는 점에 있습니다. 이러한 감독으로 인해 공격자는 금고를 조작하여 모든 담보를 인출하고 공격자의 계약으로 이전할 수 있습니다.

교훈

개발자로서 파트너 및 지원 계약의 의견을 포함하여 "어떤 입력도 절대 신뢰하지 않는다"는 원칙을 준수하는 것이 중요합니다. 특히 임의 호출의 경우 사용자 입력으로 인해 계약을 조작하거나 자금을 인출하거나 계약을 파기할 수도 있습니다.

또한 스마트 계약, 백엔드, 지갑, 탈중앙화 애플리케이션(DAPPS) (디앱(DApp)) 등 모든 프로젝트에 대해 포괄적인 보안 감사를 수행하는 것이 좋습니다.

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