Solv Protocol 해킹: $2.5M Double Mint Exploit

발행: (2026년 3월 9일 PM 02:32 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

개요

Solv Protocol 익스플로잇은 공격자가 BitcoinReserveOffering 계약의 논리적 결함을 이용한 후 약 $2.5 M(250만 달러) 손실을 초래했습니다. 이 취약점으로 공격자는 단일 민트 흐름에서 BRO 토큰을 두 번 민트할 수 있어 대규모 토큰 인플레이션이 발생했습니다.

익스플로잇 메커니즘

  • 결함은 NFT 전송 과정과 onERC721Received 콜백 간의 상호작용에서 비롯되었습니다.
  • 콜백 내부에서 토큰 민트를 트리거하고, 실행이 메인 mint() 함수로 돌아왔을 때 또 한 번 민트가 발생함으로써 공격자는 담보되지 않은 BRO 토큰을 만들었습니다.
  • 공격자는 135 BRO 토큰을 보유하고 있었으며, 이를 리저브 계약을 통해 소각했습니다. 그 대가로 프로토콜은 현재 환율에 따라 소량의 GOEFS 토큰을 발행했습니다.
  • 이 GOEFS 토큰을 사용해 공격자는 특정 NFT와 함께 GOEFS 토큰을 전송하는 민트 트랜잭션을 시작했습니다.
  • NFT가 전송될 때 계약은 onERC721Received를 호출하고, 내부에서 _mint 함수를 실행해 공격자에게 BRO 토큰을 발행했습니다.
  • 콜백이 종료된 후 제어가 원래의 mint() 함수로 돌아가면서 동일한 행동에 대해 다시 토큰을 민트하여 이중 민트가 발생했습니다.

공격 실행

  • 공격자는 이 민트 흐름을 단일 트랜잭션 내에서 22회 반복해서 트리거했습니다.
  • 전체 익스플로잇이 하나의 트랜잭션에서 이루어졌기 때문에 환율이 일정하게 유지되어, 각 반복마다 민트된 토큰을 두 배로 늘릴 수 있었습니다.
  • 이 과정으로 공격자의 보유량은 135 BRO에서 약 567 million BRO 토큰으로 팽창했습니다.

재정적 영향

  • 공격자는 BRO–SolvBTC 교환을 통해 165 million BRO 토큰을 교환하고, 수익을 Uniswap V3을 통해 라우팅했습니다.
  • 교환 결과 자산은 최종적으로 1,211 ETH로 전환되었습니다.
  • 남은 토큰은 공격자의 지갑에 남아 있었습니다.
  • 추출된 ETH는 여러 공격자 제어 지갑으로 전송된 뒤, 최종적으로 RailGun에 입금되었습니다. RailGun은 거래 흐름을 은폐하기 위한 프라이버시 프로토콜입니다.

결론

  • 이번 익스플로잇은 적절한 검증이 부족한 민팅 흐름의 논리적 결함으로 발생했습니다.
  • 외부 호출, 콜백 및 상태 업데이트를 부적절하게 처리하면 공격자가 대규모로 악용할 수 있는 미묘한 취약점이 생길 수 있습니다.
  • 스마트 계약 흐름에서 작은 논리 오류도 재앙적인 토큰 인플레이션을 초래할 수 있으므로, 철저한 보안 리뷰와 포괄적인 테스트가 필요합니다.

전체 기술 분석, 공격 흐름 다이어그램 및 온체인 분석을 보고 싶으신가요?
Solv Protocol Exploit (Explained in Depth)

0 조회
Back to Blog

관련 글

더 보기 »