출처: 심천 제로타임 테크놀로지
배경
2024년 3월 5일, 저희는 아비트럼을 모니터링했습니다. chain anomalous transaction: https://arbiscan.io/tx/0xe80a16678b5008d5be1484ec6e9e77dc6307632030553405863ffb38c1f94266
거래를 분석한 결과, WOOFi에 대한 공격이었으며 이 사건으로 인해 총 약 $9백만 달러의 손실이 발생한 것으로 확인되었습니다.
WOOFi는 WOO 네트워크에서 구축한 올인원 탈중앙화 애플리케이션(DApp)으로, 매우 낮은 슬리피지, 경쟁력 있는 상환 수수료 및 기타 유용한 기능을 제공하여 탈중앙화 금융(DeFi)의 사용자 경험을 최적화하도록 설계되었습니다.
WOOFi 사용자는 인기 디지털 자산을 상환하고 네트워크에 유동성을 제공함으로써 수익을 창출할 수 있습니다.WOOFi 플랫폼이 DeFi 사용자에게 제공하는 큰 가치 제안 중 하나는 바로 풍부한 유동성입니다.
이 공격은 WOOFi의 스왑 계약에 대한 공격이었으며, 계약 주소는 https://arbiscan.io/address/ 0xeff23b4be1091b53205e35f3afcd9c7182bf3062#코드
공격 및 사고 분석
공격자 Uniswap, TraderJoe로부터 공격에 필요한 초기 자금 총 10504796 USDC.e 및 2721172 WOO를 플래시론으로 확보

공격자들은 빌린 USDC.e를 Slio Finance에 담보로 제공하여(총 70,000,000 USDC.e 담보) 509,266,3 WOO를 대출했습니다.

그 후 공격자들은 남은 USDC.e를 WOOFi의 스왑 기능을 통해 WOO로 전환하여 WOO의 가격을 상승시켰습니다.

3번의 스왑 작업 후, WOO의 가격은 56884100 에서 60400479, 후속 공격의 여건이 조성되었습니다.
실제 공격은 공격자가 WOO를 USDC.e로 교환할 때 발생했습니다.

이 스왑 후 WOO의 가격은 7, 즉 0.00000007 USD로 이전 가격 에 비해 862만 배나 급락한 것을 볼 수 있습니다.
컨트랙트 코드를 살펴본 결과, 베이스토큰을 쿼트토큰으로 교환할 때 WOOFi 컨트랙트에 데이터 처리 결함이 있다는 것을 발견했습니다.

BaseToken을 판매하여 QuoteToken을 얻는 경우를 살펴봅시다. BaseToken 가격 계산
newPrice = (1 - 2 * k * oracle.price * baseAmount) * oracle.price
공격자는 k의 값이 동일하게 유지되므로 oracle.price와 baseAmount를 제어할 수 있습니다. 공격자는 BaseToken의 가격인 oracle.price를 조작할 수 있고 여러 번 스왑하여 baseAmount를 조작할 수 있습니다. 이 방정식을 통해 newPrice가 oracle.price보다 작아야 한다는 것을 알 수 있으므로 공격자는 oracle.price와 baseAmount의 조합을 제어할 수 있습니다. price와 baseAmount의 조합을 제어하여 newPrice를 매우 낮게 조작할 수 있습니다.
마지막으로 공격자는 소량의 USDC.e를 사용하여 대량의 WOO를 전환하여 대출 원금을 반환하고 현금화합니다.
2일 후, WOOFi 관계자는 공격자와 연락을 취해 화이트햇 보너스로 10%를 지급하겠다고 제안했습니다. 그러나 이 글을 쓰는 시점까지 공격자는 아직 훔친 자금을 돌려주지 않고 있습니다.
이미지 src="https://img.jinse.cn/7195298_image3.png" alt="image">
그 후 문제가 공식적으로 수정되었으며, 보시다시피 공식적인 수정 사항은 2x 요소를 제거하는 것이었습니다. https://github.com/woonetwork/WooPoolV2/commit/f5fe28acc77cf3801ac379db9bf99bb61b73ba17

요약
이 취약점의 원인은 경제 모델 계산에 허점이 있기 때문이며, 공격자는 다음과 같이 공격할 수 있습니다. 공격자는 매수 및 매도 가격의 수를 제어하여 토큰 가격을 크게 축소시킬 수 있으며, 결국 공격자는 매우 적은 양의 USDC.e로 프로젝트 당사자의 WOO 토큰을 비울 수 있게 됩니다. 프로젝트 소유자는 경제 모델과 코드 실행 로직의 설계를 검증하고, 계약을 실행하기 전에 여러 감사 회사를 선정하여 교차 감사를 받을 것을 권장합니다.