알키미야는 블록체인 블록스페이스 자원(예: 거래 수수료)을 거래 가능한 자산으로 전환하는 프로토콜입니다. 이는 스마트 계약을 사용하여 P2P 시장을 만들고, 수수료 안정화, 가격 발견 개선, 블록체인 전반의 자원 최적화를 돕습니다.
2025년 3월 28일, 알키미야는 약 95,500달러의 손실을 초래한 공격을 당했습니다. 근본 원인은 사용자가 담보를 예치할 때 민트 계산 중 안전하지 않은 정수 변환이었습니다.
읽어주셔서 감사합니다! 무료로 구독하여 새 게시물을 받고 제 작업을 지원해주세요.
개요
분석
공격은 모르포에서 10 WBTC의 플래시론으로 시작되었습니다(5번 라인). 공격자는 약 1.7 WBTC를 담보로 제공하면서 SilicaPools.collateralizedMint()를 사용하여 정확히 2^128 + 1 지분을 민트하려 했습니다(12번 라인, 녹색 상자).
SilicaPools는 전체 256비트 지분
매개변수를 사용하여 공격자에게 정확히 2^128 + 1 지분을 민트했습니다. 그러나 837번 라인의 안전하지 않은 캐스트로 인해 1 지분만 기록되었습니다. 이 결함이 공격의 근본 원인이었습니다.
그림 1을 보면, 공격자는 2^128 - 1 지분을 다른 주소로 이전했으며(노란색 상자), 계약에는 단 2개의 지분만 남겼습니다. 마지막으로 SilicaPools.redeemShort()를 호출하여 담보를 인출했습니다.
sState.sharesMinted
가 잘못되어 1로 설정되었고, 공격자의 계약이 2개의 지분을 보유하고 있었기 때문에, SilicaPools는 실수로 약 3.4 WBTC를 반환했습니다 - 원래 예치액의 두 배입니다.
결론
가스 효율성 최적화는 유용하지만, 코드가 정확해야 합니다. 이 경우 절약된 가스는 버그로 인한 손실에 비해 미미했습니다. 여러 번의 감사에도 불구하고 이 결함은 발견되지 않았고, 실제 공격으로 이어졌습니다. 이러한 문제를 방지하기 위해, 프로젝트 수명 주기 전반에 걸쳐 엄격한 보안 조치를 구현할 것을 강력히 권장합니다. 정기적인 감사, 코드 리뷰, 취약성 평가는 위험이 악용되기 전에 식별하고 완화하기 위한 표준 관행이어야 합니다.
읽어주셔서 감사합니다! 무료로 구독하여 새 게시물을 받고 제 작업을 지원해주세요.