출처: SharkTeam
2024년 6월 10일, UwU Lend는 공격을 받아 프로젝트 측에서 약 1,930만 달러의 손실을 입었습니다.
I. 공격 트랜잭션 분석
공격자: 0x841dDf093f5188989fA1524e7B893de64B421f47
공격자는 총 3개의 공격 트랜잭션을 시작했습니다.
공격 트랜잭션 1:
0x242a0fb4fde9de0dc2fd42e8db743cbc197ffa2bf6a036ba0bba303df296408b
공격 트랜잭션 2:
. 왼쪽;">0xb3f067618ce54bc26a960b660cfc28f9ea0315e2e9a1a855ede1508eb4017376
공격 트랜잭션 3:
공격 거래 3:
0x align: left;">0xca1bbf3b320662c89232006f1ec6624b56242850f07e0f1dadbe4f69ba0d6ac3
예시 공격 거래 1 분석:
공격 컨트랙트: 0x21c58d8f816578b1193aef4683e8c64405a4312e
대상 컨트랙트: UwU Lend Vault 계약 포함:
uSUSDE: 0xf1293141fc6ab23b2a0143acc196e3429e0b67a6
uDAI: 0xb95bd0793bcc5524af358ffaae3e38c3903c7626
uUSDT: 0x24959f75d7bda1884f1ec9861f644821ce233c7d
1. WETH, WBTC, sUSDe, USDe, DAI, FRAX, USDC, GHO 등 다양한 플랫폼의 토큰을 플래시 렌딩합니다
토큰 수락 주소는 0x4fea76b66db8b548842349dc01c85278da3925da
라이트닝 대출의 토큰과 수량은 다음과 같습니다 :
AaveV3의 라이트닝 대출 159,053.16 WETH 및 14. ,800 WBTC
AaveV2에서 플래시 대출 40,000 WETH
스파크에서 플래시 대출 91,075.70 WETH 및 4,979.79 WBTC
모포에서 플래시 대출 301,738,880.01 sUSDe, 236,934,023.17 USDe 및 100,786,052.15 DAI
모포에서 플래시 대출
플래시 대출금액은 다음과 같습니다. 유니스왑 V3에서 60,000,000 FRAX 및 15,000,000 USDC 플래시 대출: FRAX-USDC
밸런서에서 플래시 대출 4,627,557.47 GHO 및 38,413.34 WETH
< p style="text-align: 왼쪽;">메이커로부터 500,000,000 DAI를 플래시 대출
합계 약 328,542.2 WETH, 19,779.79 WBTC, 600,786,052.15 DAI, 301 ,738,880.01 sUSDe, 236,934,023.17 USDe, 4,627,557.47 GHO, 60,000,000 FRAX, 15,000,000 USDC
2. 라이트닝 대출 토큰을 계약으로 이전하기 0xf19d66e82ffe8e203b30df9e81359f8a201517ad(약칭 0xf19d) 공격 실행을 준비합니다.
3. 토큰을 교환( 교환) 토큰을 사용하여 sUSDe의 가격을 조절(가격 낮추기)
(1) USDecrvUSD.exchange
< /p>
8,676,504.84 USDe를 8,730,453.49 crvUSD로 환전하면 USDecrvUSD의 USDe 수량은 증가하고 가격은 감소하고, crvUSD의 수량은 감소하고 가격은 증가
(2) USDeDAI.exchange
style="text-align: 왼쪽;">46,452,158.05 USDe를 14,389,460.59 DAI로 전환하면 USDeDAI의 USDe 수가 증가하고 가격이 낮아지며, DAI 수가 감소하고 가격이 상승합니다
(3) ) FRAXUSDe.exchange
14,477,791.69 USDe를 46,309,490.86 FRAX로 교환 USDeDAI의 USDe 수를 늘리고 가격을 낮추고, FRAX 수를 줄이고 가격을 올립니다
. style="text-align: 왼쪽;">(4) GHOUSDe.exchange
4,925,427.20 USDe를 4,825,479.07 GHO로 교환하면 USDeDAI의 USDe 수량이 증가하여 가격이 감소하고, GHO의 수량이 감소하여 가격이 증가합니다
. 왼쪽;">(5) USDeUSDC.exchange
14,886,912.83 USDe를 14,711,447.94 USDC로 교환하면 USDeDAI의 USDe 수가 증가하고 가격이 하락하며, USDC 수가 감소하고 가격이 상승합니다
위와 같습니다. 교환 후 5개 풀의 USDe 가격이 하락합니다. 이로 인해 결국 sUSDe 가격이 큰 폭으로 하락했습니다.
4. 지속적으로 렌딩 포지션을 생성하여 다른 자산(WETH, WBTC, DAI)을 렌딩풀 계약에 예치한 후 sUSDe를 빌려줍니다. sUSDe의 가격이 급격히 하락했기 때문에 빌려주는 sUSDe의 양은 가격 하락 전보다 훨씬 많아졌습니다.
이미지 src="https://img.jinse.cn/7241036_image3.png" alt="20240612180613318image.png">
5. 3단계와 유사합니다. 역방향 연산은 sUSDe의 가격을 상승시킵니다.
이미지 src="https://img.jinse.cn/7241037_image3.png" alt="20240612180621548image.png">
sUSDe가 상승함에 따라 4단계에서 차입한 포지션의 가치가 담보 가치를 초과하여 청산 기준을 충족합니다.
6. 차입한 포지션을 일괄 청산하고 청산 보상 uWETH를 받습니다
7. 대출금을 상환하고 기초자산인 WETH, WBTC, DAI 및 sUSDe를 인출합니다.
8. sUSDe를 다시 LendingPool에 예치하며, 이때 sUSDe의 가격이 부풀려져 더 많은 자산을 빌리고 빌릴 수 있게 됩니다. 다른 자산에서 빌릴 수 있습니다.
9. 왼쪽;">9. 토큰을 상환하여 라이트닝 대출을 상환합니다. 최종 수익 1,946.89 ETH
II. 취약점 분석
위와 같은 분석을 통해 전체 공격 과정에서 다수의 플래시 대출이 존재하고, sUSDe의 가격을 여러 번 조작하는 것으로 나타났습니다. sUSDe를 담보로 제공할 때는 대출되는 자산 수에 영향을 미치고, sUSDe를 대출할 때는 대출금에 영향을 미치며, 이는 청산 계수(건전성 계수)에 영향을 미칩니다.
공격자는 이를 이용해 플래시 대출을 통해 sUSDe 가격을 낮추고 다른 자산을 담보로 대량의 sUSDe를 대출한 다음, sUSDe 가격을 올리고 담보 자산을 청산해 이익을 얻고 나머지 sUSDe를 담보로 다른 자산을 대출한 다음 마지막으로 플래시 대출을 상환하면 공격이 완료됩니다.
위 3단계에서 공격자는 Curve Finance의 USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe, USDe/SDC 풀에서 sUSDe의 가격을 제어하여 가격을 조작한 것으로 확인되었습니다. sUSDe. 가격 읽기 기능은 다음과 같습니다:
이 경우 sUSDe 가격은 11개의 가격에서 계산되며, 그 중 처음 10개는 CurveFinance에서 읽고 마지막 가격은 UniswapV3에서 제공합니다.
CurveFinance에서 읽은 가격은 공격자가 공격 거래에서 조작한 5개의 풀인 USDe/rvUSD, USDe/AI, FRAX/SDe, GHO/SDe, USD/SDC에서 제공됩니다.
반환된 가격은 CurveFinance 거래 풀 계약에서 uwuOracle이 읽은 가격으로 price_oracle(0) 및 get_p(0) 계산된 가격입니다.
(1) 가격은 체인링크에서 제공한 가격이며 조작할 수 없습니다.
(2) 트레이딩 풀 매개변수
공격자는 거래 풀의 토큰 수를 조작하여 get_p(0)의 반환값을 조작하고, 이를 통해 가격 조작을 가능하게 합니다.
세 가지 보안 권장 사항
이 공격의 경우 개발 과정에서 다음 예방 조치를 따라야 합니다 :
(1) 이 공격에 대응하여 가격 조작 취약점에 대응하여 체인 아래에 가격 예측 머신을 사용하여 가격 조작을 방지할 수 있습니다.
(2) 프로젝트가 시작되기 전에 스마트 컨트랙트에 대한 제3자 전문 감사 회사의 감사를 받아야 합니다.