GMX 해킹 사건 분석, 손실액 4천만 달러 돌파

avatar
MarsBit
07-10
이 기사는 기계로 번역되었습니다
원문 표시

GM(Good Morning)X가 해커 공격을 당해 4,000만 달러 이상의 손실을 입었습니다. 공격자는 재진입 취약점을 이용하여 레버리지 기능이 활성화된 상태에서 공매도 포지션을 열었습니다.

문제의 근원은 executeDecreaseOrder 함수가 잘못 사용된 것입니다. 해당 함수의 첫 번째 매개변수는 외부 계정(EOA)이어야 했지만, 공격자는 스마트 계약 주소를 입력했습니다. 이를 통해 공격자는 상환 과정에서 시스템에 재진입하여 내부 상태를 조작하고, 최종적으로 실제 보유한 GLP 가치를 크게 초과하는 자산을 상환받을 수 있었습니다.

GLP 정상 상환 메커니즘

GM(Good Morning)X에서 GLP는 유동성 공급자(LP) 토큰으로, 금고 자산(USDC, 이더리움(ETH), WBTC)의 점유율을 나타냅니다. 사용자가 unstakeAndRedeemGlp를 호출할 때, 시스템은 다음 공식을 사용하여 반환해야 할 자산 수량을 계산합니다:

상환_금액 = (사용자_GLP / 총_GLP_공급량) * 운영자산(AUM)

운영자산(AUM)은 다음과 같이 계산됩니다:

운영자산(AUM) = 모든 토큰 풀의 총 가치 + 전체 공매도 미실현 손실 - 전체 공매도 미실현 이익 - 예약된 금액 - 사전 설정 공제(aumDeduction)

이 메커니즘은 GLP 보유자가 금고의 실제 자산 점유율에 비례하여 자산을 받도록 보장합니다.

레버리지 활성화 후 문제

enableLeverage가 활성화되면 사용자는 레버리지 포지션(롱 또는 숏)을 열 수 있습니다. 공격자는 GLP를 상환하기 전에 대규모 WBTC 공매도 포지션을 열었습니다.

공매도가 개설되면 즉시 전체 공매도 규모가 증가하고, 가격 변동이 없는 상황에서 시스템은 해당 공매도를 기본적으로 손실로 간주합니다. 이 미실현 손실은 금고의 "자산"으로 계산되어 운영자산(AUM)을 인위적으로 상승시킵니다. 금고가 실제로 추가 가치를 얻지 못했음에도 불구하고, 상환 계산은 이 과도하게 높은 운영자산(AUM)을 기반으로 이루어져 공격자가 자신이 받아야 할 자산을 크게 초과하는 자산을 얻을 수 있었습니다.

공격 프로세스

공격 거래

https://app.blocksec.com/explorer/tx/arbitrum/0x03182d3f0956a91c4e4c8f225bbc7975f9434fab042228c7acdc5ec9a32626ef?line=93

운영자산(AUM)

운영자산(AUM)

마무리

이번 공격은 GM(Good Morning)X의 레버리지 메커니즘과 재진입 방지 설계의 심각한 결함을 드러냈습니다. 핵심 문제는 자산 상환 로직이 운영자산(AUM)을 지나치게 신뢰하고, 구성 요소(예: 미실현 손실)에 대해 충분히 신중한 보안 검증을 하지 않았다는 것입니다. 또한 핵심 함수는 호출자의 신원(EOA vs 계약)에 대한 가정에 강제 검증이 부족했습니다. 이 사건은 개발자들에게 자금과 관련된 민감한 작업을 수행할 때 시스템 상태가 조작되지 않도록 확실히 해야 하며, 특히 레버리지나 파생상품과 같은 복잡한 금융 로직을 도입할 때는 재진입 및 상태 오염으로 인한 시스템적 리스크를 엄중히 방지해야 한다는 점을 다시 한 번 상기시켜 줍니다.

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