bitcoin
bitcoin

$96230.884244 USD

-2.31%

ethereum
ethereum

$3352.230253 USD

-3.41%

tether
tether

$0.998991 USD

-0.01%

xrp
xrp

$2.176682 USD

-4.57%

bnb
bnb

$694.188135 USD

-1.32%

solana
solana

$189.555721 USD

-4.34%

dogecoin
dogecoin

$0.316549 USD

-4.48%

usd-coin
usd-coin

$0.999950 USD

-0.01%

cardano
cardano

$0.869602 USD

-4.84%

tron
tron

$0.251910 USD

-1.91%

avalanche
avalanche

$37.675391 USD

-7.02%

toncoin
toncoin

$5.737187 USD

-4.16%

chainlink
chainlink

$22.842754 USD

-7.19%

shiba-inu
shiba-inu

$0.000022 USD

-5.53%

sui
sui

$4.269336 USD

-5.45%

암호화폐 뉴스 기사

플래시 론(Flash Loan) 공격으로 CloberDEX에서 50만 달러 손실 발생

2024/12/26 09:05

최근 우리는 Base의 프로젝트인 CloberDEX에 대한 온체인 공격을 모니터링했습니다. 공격받은 프로젝트는 CloberDEX이며, 공격자는

플래시 론(Flash Loan) 공격으로 CloberDEX에서 50만 달러 손실 발생

Recently, an on-chain attack was detected against CloberDEX, a project on Base. The attacker gained about 133 ETH, or about 500,000 USD, through this attack.

최근 Base의 프로젝트인 CloberDEX에 대한 온체인 공격이 감지되었습니다. 공격자는 이번 공격을 통해 약 133 ETH, 즉 약 500,000 USD를 획득했습니다.

The attacked project is CloberDEX, and its main functions are as follows: open a new trading pool containing trading pairs A to B and B to A, and each trading pair also contains a preset trading strategy; mint is to add liquidity to the trading pair and obtain LP Token; burn is to destroy LP Token to obtain the corresponding currency.

공격받은 프로젝트는 CloberDEX이며 주요 기능은 다음과 같습니다. A에서 B, B에서 A까지의 거래 쌍을 포함하는 새로운 거래 풀을 열고, 각 거래 쌍에는 미리 설정된 거래 전략도 포함되어 있습니다. 민트는 거래 쌍에 유동성을 추가하고 LP 토큰을 얻는 것입니다. 소각은 해당 통화를 얻기 위해 LP 토큰을 파괴하는 것입니다.

Let's take a look at the attack process:

공격 과정을 살펴보겠습니다.

First, the attacker borrowed 267 WETH from Morpho Blue using flashloan.

먼저, 공격자는 flashloan을 이용해 Morpho Blue에서 267 WETH를 빌렸습니다.

Then, the attacker used open to open two trading pairs on CloberDEX, namely Token/WETH and WETH/Token, where Token is a contract deployed by the attacker himself.

그런 다음 공격자는 open을 사용하여 CloberDEX에서 Token/WETH 및 WETH/Token이라는 두 개의 거래 쌍을 열었습니다. 여기서 토큰은 공격자가 직접 배포한 계약입니다.

Then, the attacker used mint to transfer 267 WETH and 267 Token to the newly opened trading pair to add liquidity and obtain LP Token.

그런 다음 공격자는 유동성을 추가하고 LP 토큰을 얻기 위해 민트를 사용하여 267 WETH와 267 토큰을 새로 개설된 거래 쌍으로 전송했습니다.

So far, there is no problem. Finally, the attacker uses burn to destroy the LP Token just obtained. Let's take a look at the specific implementation of burn;

지금까지는 문제가 없습니다. 마지막으로 공격자는 소각을 이용해 방금 획득한 LP 토큰을 파괴합니다. burn의 구체적인 구현을 살펴보겠습니다.

The control flow goes to the lock function. Similarly, let's take a look at the specific implementation of lock;

제어 흐름은 잠금 기능으로 이동합니다. 마찬가지로 잠금의 구체적인 구현을 살펴보겠습니다.

As you can see, the lock function passes bytes caldata data to the lockAcquired function. Let's continue to look at the implementation of this function.

보시다시피, 잠금 함수는 바이트 caldata 데이터를 lockAcquired 함수에 전달합니다. 계속해서 이 함수의 구현을 살펴보겠습니다.

We found this line of code

우리는 이 코드 줄을 찾았습니다

We can see that the function called by the code is determined by data. The first four bytes of data are the signature of _burn, so burn essentially calls _burn.

코드에 의해 호출되는 함수는 데이터에 의해 결정된다는 것을 알 수 있습니다. 데이터의 처음 4바이트는 _burn의 서명이므로 burn은 기본적으로 _burn을 호출합니다.

We can see that _burn calls pool.strategy.burnHook(msg.sender, key, burnAmount,supply) again, and the processing of the pool's reserver comes after this code. So, the problem lies here. The address of the strategy contract of the pool corresponding to the trading pair can be controlled by the attacker. In this attack, the attacker wrote the address as his own attack contract address: 0x32fb1bedd95bf78ca2c6943ae5aeaeaafc0d97c1 .

_burn이 pool.strategy.burnHook(msg.sender, key, burnAmount,supply)를 다시 호출하고 풀 예약자 처리가 이 코드 뒤에 오는 것을 볼 수 있습니다. 그렇다면 문제는 여기에 있습니다. 해당 거래 쌍에 해당하는 풀의 전략 계약 주소는 공격자가 통제할 수 있습니다. 이번 공격에서 공격자는 자신의 공격 계약 주소인 0x32fb1bedd95bf78ca2c6943ae5aeaeaafc0d97c1 로 주소를 작성했습니다.

When the contract process reaches the BurnHook of the attacking contract, burn is called again to complete the reentrancy attack.

계약 프로세스가 공격 계약의 BurnHook에 도달하면 재진입 공격을 완료하기 위해 burn이 다시 호출됩니다.

The attacker took out 264 WETH and 133 WETH from the CloberDEX contract through this vulnerability, and made a profit of 133.7 ETH after repaying the flashloan loan, which is about 500,000 USD.

공격자는 이 취약점을 통해 CloberDEX 계약에서 264 WETH와 133 WETH를 빼냈고, 약 50만 달러 상당의 플래시론 대출금을 상환한 후 133.7 ETH의 수익을 냈습니다.

The main cause of this vulnerability is that the CloberDEX project contract did not perform reentrancy detection and protection in the code for obtaining and destroying LP Tokens, and the state variables were updated after the contract was called, which eventually led to the attacker using the reentry vulnerability to empty the project's WETH. It is recommended that the project party should conduct multi-party verification when designing the economic model, price calculation mechanism and code operation logic, and try to select multiple audit companies for cross-audit when auditing the contract before it goes online.

이번 취약점의 주요 원인은 CloberDEX 프로젝트 컨트랙트가 LP 토큰을 획득하고 파기하는 코드에서 재진입 감지 및 보호를 수행하지 않았으며, 컨트랙트 호출 후 상태 변수가 업데이트되어 결국 공격자가 재진입을 사용하게 되었다는 점입니다. 프로젝트의 WETH를 비우는 취약점. 프로젝트 당사자는 경제 모델, 가격 계산 메커니즘 및 코드 작동 논리를 설계할 때 다자간 검증을 수행하고 계약이 온라인으로 전환되기 전에 감사할 때 교차 감사를 위해 여러 감사 회사를 선택하도록 노력하는 것이 좋습니다.

뉴스 소스:www.panewslab.com

부인 성명:info@kdj.com

The information provided is not trading advice. kdj.com does not assume any responsibility for any investments made based on the information provided in this article. Cryptocurrencies are highly volatile and it is highly recommended that you invest with caution after thorough research!

If you believe that the content used on this website infringes your copyright, please contact us immediately (info@kdj.com) and we will delete it promptly.

2024年12月27日 에 게재된 다른 기사