Patch Thursday — Astroport의 토큰 인플레이션 취약점
왜 Patch Thursday인가요?
ChainLight Patch Thursday는, Microsoft가 정기적으로 소프트웨어 패치를 업데이트하는 시스템인 Patch Tuesday에서 영감을 받아 새로 만든 코너입니다!
ChainLight는 앞으로 여러분들께, Patch Thursday를 통해 웹3에서 취약점과 각 사례들을 정기적으로 공유하고자 합니다.
ChainLight이 Web3에서 발견한 취약점은?
ChainLight의 첫 번째 Patch Thursday 업데이트는, Astroport의 Governance DoS(Denial-of-Service)입니다!
Astroport는 Terra, Injective, Neutron 블록체인에서 작동하고 있는 DEX(Decentralized Exchange)입니다.
여러분은 스마트 컨트랙트에서 언제 Round-down이 발생하는지 알고 계신가요?
최근에는 Round-down이 문제를 일으켜, DeFi에서 토큰 가치를 팽창시킬 수 있는 취약점(토큰 인플레이션 공격으로도 알려짐)이 발생하는 사례가 다수 존재했습니다. 저희 팀은 Astroport에서 Round-down과 관련된 취약점을 발견하고 Immunefi를 통해 보고했으며, 이후 Astroport 팀은 해당 문제를 해결하기 위한 패치를 적용했습니다.
취약점 정보
Staking.rs Contract가 처음 배포되었을 때, 혹은 모든 유동성이 제거된 경우, 공격자는 유동성 공급자의 $xASTRO 토큰 발행과 스테이킹을 불가능하게 할 수 있습니다.
공격 시나리오
해당 취약점의 공격 시나리오를 다음과 같이 설명할 수 있습니다:
1. 1wei의 $ASTRO를 Staking.rs Contract에 스테이킹하고 1wei의 $xASTRO를 받습니다.
2. 공격자가 가용할 수 있는 최대치의 $ASTRO 토큰을 Staking.rs Contract에 전송합니다.
공격 이후, 모든 스테이킹 시도는 해당 공격자가 보유한 $ASTRO 토큰보다 더 많은 양의 $ASTRO 토큰을 스테이킹하지 않는 한 실패합니다(발행량은 0이 됩니다).
다행히, Astroport는 발행량이 0이면 revert를 수행하지만, revert가 발생하지 않는다면 이후 $xASTRO는 발행되지 않지만 유동성 공급자의 토큰이 공격자에게 탈취됩니다.
발행량이 0이 되는 이유는, 스테이킹 풀에서 발행된 $xASTRO의 양이 하기의 공식을 따르기 때문입니다.
(스테이킹 수량 * 거버넌스 토큰의 총 공급량) / (Staking.rs 컨트랙트가 보유하고 있는 $ASTRO 토큰 수량)
공격자가 Staking.rs에 토큰을 전송하면, $xASTRO와 $ASTRO의 교환비를 조작하여 $xASTRO의 가치를 상대적으로 상승시킵니다.
취약점 영향의 상세 내용
공격자는 앞서 언급한 취약점을 악용하여, 상당한 양의 $ASTRO 토큰을 사용해 $xASTRO 토큰의 유일한 보유자가 될 수 있습니다. 또한, $xASTRO는 Astroport의 거버넌스 시스템에서 투표 권한 부여에 사용되기 때문에, 공격자는 거버넌스 제안 투표의 결과를 조작하여 거버넌스를 제어할 수 있습니다.
해당 공격은 Staking.rs Contract에 최소 유동성 공급량에 대한 요구 사항이 없는 경우 성공할 수 있으며, Round-down 취약점에 의해 공격이 시도될 수 있습니다. 본 사례는, Round-down 취약점이 DEX나 대출 프로토콜 뿐만 아니라 거버넌스 토큰에서도 발생할 수 있다는 점을 잘 드러냅니다.
Astroport의 페어(Pair)에서는 Uniswap V2와 같이 MINIMUM_LIQUIDITY(최소 유동성 공급량) 변수를 통해 공격을 방지하고 있지만, Staking.rs Contract에서는 토큰의 교환비 조작을 방어하는 보안 조치가 되어있지 않았습니다. 이번 취약점 공개를 통해 타 프로젝트들 또한 거버넌스 토큰 생성 풀에서도 유사한 취약점과 그로 인한 공격이 발생할 수 있다는 가능성을 염두에 두어야 합니다.
해결 방법
해당 취약점은 간단한 해결 방법으로 패치할 수 있습니다.
초기 유동성 공급 중에는MINIMUM_LIQUIDITY을 제한하고, 해당 LP 토큰이 발행되었을 때 사용하지 않는 주소로 보내는 것입니다.
이 해결 방법은 Uniswap V2에서 채택되었으며, Uniswap V2 백서의 ‘3.4 Initialization of liquidity token supply’ 섹션에서 언급된 바가 있습니다.
Astroport의 사례로, 현재 DeFi 생태계에서 Round-down 공격을 시도하는 것은 어렵지만 Round-down 문제가 예상치 못하게 발생할 수도 있다는 점을 살펴볼 수 있었습니다.
아래의 링크에서 Astroport가 적용한 패치를 확인할 수 있습니다.
https://github.com/astroport-fi/astroport-core/commit/cc302a3d206eccb7c8d9b4fdf3384a3fd9d3678c
참고 자료
✨ We are ChainLight!
ChainLight 팀은 풍부한 실전 경험과 깊은 기술 이해를 바탕으로 새롭고 효과적인 블록체인 보안 기술을 연구합니다. 연구 결과를 바탕으로 Web3 생태계의 각종 보안 위험 요소와 취약점을 사전 파악하여 제거하는 혁신적인 보안 감사 서비스를 제공합니다. 보안 감사 이후에도 온체인 데이터 모니터링 및 취약점 탐지 자동화 서비스를 이용한 지속적인 디지털 자산 위험 관리 솔루션을 제공합니다.
ChainLight 팀은 사용자들이 탈중앙화 서비스를 안전하게 활용할 수 있도록 Web3 생태계 위협으로부터의 보호에 힘쓰고 있습니다.
ChainLight의 더 다양한 정보를 보고 싶으시다면? 👉 Twitter 계정도 방문해 주세요.
🌐 Website: chainlight.io | 📩 TG: @chainlight | 📧 chainlight@theori.io
Originally published at https://blog.theori.io on June 15, 2023.