Back to Blog

~$3600만 달러 손실: Summer.fi, Bonzo Lend 등 | BlockSec 위클리

July 15, 2026
8 min read
Key Insights
  • 이더리움, 솔라나, 헤데라에서 발생한 3건의 사고로 총 약 3,629만 달러의 손실 발생.

  • 공격 벡터에는 불완전하게 오프보딩된 볼트 컴포넌트를 통한 지분 가격 인플레이션과 오라클 BLS 서명 검증 우회가 포함됨.

  • 공통된 주제: 보안 실패는 핵심 프로토콜 로직이 아닌, 운영 프로세스 및 업스트림 오라클 검증을 포함한 주변 인프라에서 발생함.

지난 한 주(2026/07/06 - 2026/07/12) 동안 총 3건의 주목할 만한 보안 사고가 확인되었으며, 약 $36.29M의 손실이 발생했습니다.

날짜 사고 유형 추정 손실
2026/07/06 Summer.fi 잘못된 설정 ~$6.04M
2026/07/06 BonkDAO 부적절한 거버넌스 ~$21.2M
2026/07/11 Bonzo Lend 부적절한 서명 검증 ~$9.05M
  • Summer.fi: 다중 레이어 볼트 프로토콜에서 완전히 오프보딩되지 않은 다운스트림 구성 요소가 최상위 레벨의 공유 가격을 무결성 손상시킬 수 있다는 점을 보여주는 사례로 선정되었습니다. 이는 손상된 포지션이 악용 가능해지기 전에 폐기 절차를 완료하는 것이 얼마나 중요한지를 강조합니다.
  • Bonzo Lend: 오라클 레이어에서의 BLS 검증 취약점이 서명 보안을 완전히 우회하여 위조된 가격 루트로 이어질 수 있으며, 영향받은 검증자에 의존하는 프로토콜에 시스템적 위험을 초래할 수 있음을 보여주는 사례로 선정되었습니다.

Web3 최고의 보안 감사 기관

출시 전 설계, 코드, 비즈니스 로직을 검증하세요

주간 하이라이트: Summer.fi

이 사고는 다중 레이어 볼트 프로토콜에서 완전히 오프보딩되지 않은 다운스트림 구성 요소가 최상위 레벨의 공유 가격을 무결성 손상시킬 수 있다는 점을 보여주기 때문에 하이라이트로 선정되었습니다. 이 패턴은 모든 기여자가 여전히 정상 상태인지 확인하지 않고 중첩되거나 외부 소스에서 값을 집계하는 모든 시스템에 광범위하게 적용됩니다.

2026년 7월 6일, 이더리움의 Summer.fi FleetCommander 볼트가 약 $6.04M에 달하는 익스플로잇 피해를 입었습니다 [1][2]. 근본 원인은 Summer.fi의 FleetCommander가 totalAssets()를 계산할 때 오프보딩을 위해 상한이 설정되었지만 아직 활성 집합에서 제거되지 않은 전략 구성 요소(Ark라고 불림)를 여전히 포함하고 있었다는 점입니다. 공격자는 Ark가 여전히 액면가에 가깝게 평가하던 오래되고 과대평가된 vgUSDC 토큰을 대량으로 축적한 뒤, 이를 Ark에 직접 전송하여 FleetCommander의 공유 가격을 부풀리고 부풀려진 가격으로 환매했습니다.

배경

Summer.fi는 볼트-오브-볼트 아키텍처 위에 구축된 DeFi 수익 집계기입니다. 사용자는 FleetCommander라고 불리는 ERC-4626 상위 볼트에 자산을 예치하며, 이 볼트는 Arks라고 불리는 전략 어댑터 집합을 통해 다양한 기초 대출 및 수익 프로토콜로 자금을 라우팅합니다. FleetCommander의 총 자산은 각 Ark의 자체 보고 가치를 집계하여 산출되며, 사용자는 이 집계 평가액을 기준으로 언제든지 공유를 환매할 수 있습니다.

기초 수익 소스 중 하나는 Morpho입니다. FleetCommander는 Ark를 통해 Morpho 볼트에 자금을 예치하고, 해당 볼트에서 보유한 공유를 기준으로 자신의 가치를 평가합니다. 사용자가 FleetCommander 공유를 환매할 때 상위 볼트의 현금 버퍼가 부족하면, 기초 볼트에서 스택 위로 자금을 끌어올립니다:

사용자가 FleetCommander 공유 환매
   | (1) 사용자의 공유 소각
   v
FleetCommander
   | (2) 먼저 버퍼에서 지급; 이후 Arks에서 인출
   v
Ark
   | (3) 현금 확보를 위해 기초 볼트에서 자체 공유 환매
   v
Morpho 볼트
     (4) 지급을 위해 기초 시장에서 출금

각 Ark는 기초 볼트에서 자체 토큰 잔액을 조회하고 해당 공유를 자산으로 변환하여 totalAssets()를 계산합니다. 이러한 공유는 표준 ERC-20 토큰이므로, 누구든지 FleetCommander의 예치 흐름을 거치지 않고 Ark에 추가 공유를 직접 전송할 수 있습니다.

취약점 분석

영향받은 FleetCommander는 LowerRisk USDC 볼트 (0x98C4...cF17)와 HigherRisk USDC 볼트 (0xE9cD...cB06)입니다. 조작된 Silo Varlamore Ark는 0x61d7...76c2입니다.

두 가지 조건이 익스플로잇의 발판을 마련했습니다:

  1. 오래되고 과대평가된 자산. 2025년 11월 Stream Finance가 붕괴된 후 [3] 수익 토큰 xUSD가 75% 이상의 가치를 잃으면서, xUSD를 담보로 한 포지션을 보유하고 있던 Silo "Varlamore USDC Growth" 볼트는 대부분 회수 불가능한 상태가 되었습니다. 그러나 볼트의 온체인 회계는 이 손실을 반영하지 않았습니다: vgUSDC 토큰은 기초 USDC가 묶여 있음에도 불구하고 convertToAssets()를 통해 계속해서 액면가에 가까운 값을 보고했습니다.

  2. 부분적으로만 제거된 Ark. 이 손상된 익스포저를 보유한 Ark는 예치 상한이 0으로 설정되어 오프보딩이 진행 중이었습니다. 그러나 상한을 0으로 설정하면 FleetCommander를 통한 새로운 예치만 차단됩니다. totalAssets() 계산에서 해당 Ark를 제거하지는 않습니다.

Ark는 vault.balanceOf(address(this))를 호출한 후 vault.convertToAssets(shares)를 호출하여 totalAssets()를 계산합니다. 해당 공유는 전송 가능한 ERC-20 토큰이므로, 누구든지 오래되고 과대평가된 vgUSDC를 Ark에 직접 전송하여 새로운 공유를 발행하거나 실질적인 출금 가능 유동성을 추가하지 않고도 Ark의 totalAssets()를 부풀릴 수 있습니다. 이 부풀림은 FleetCommander의 공유 가격까지 전파됩니다.

공격 분석

다음 분석은 트랜잭션 0x0db528...43da12를 기반으로 합니다.

  • 1단계: 공격자는 앞선 3개월에 걸쳐 여러 지갑을 통해 약 190.8억 vgUSDC를 축적한 후, 익스플로잇 직전에 공격 컨트랙트로 통합했습니다.

  • 2단계: 공격자는 Morpho Blue에서 1,000,000 USDT 플래시론을 받은 후, 공격 자금을 마련하기 위해 두 번째로 65,419,171 USDC 플래시론을 중첩 실행했습니다.

  • 3단계: 공격자는 여러 Morpho V2 볼트에서 forceDeallocate()를 호출하여 4,318,535 USDC를 Morpho Blue 시장에서 볼트의 유휴 잔액으로 끌어왔습니다. 이를 통해 이후 단계에서 부풀려진 환매를 지급할 충분한 유동 자본이 확보되었습니다.

  • 4단계: 공격자는 Uniswap V4에서 20,000 USDT를 약 68,421 xUSD로 교환한 후, Balancer V3에서 해당 xUSD를 약 4.7627억 vgUSDC로 교환했습니다. 이를 통해 최소한의 실질 비용으로 추가적인 오래된 토큰을 축적했습니다.

  • 5단계: 공격자는 64,828,534 USDC를 FleetCommander LVUSDC에 예치하고 60,787,156 공유를 받았습니다.

  • 6단계: 공격자는 약 195.5억 vgUSDC 공유를 vgUSDC Ark에 직접 전송했습니다. Ark의 totalAssets()는 공유가 어떻게 도착했는지와 관계없이 보유한 모든 공유를 계산하기 때문에, 이로 인해 Ark의 보고 가치가 부풀려졌고 그에 따라 FleetCommander의 totalAssets()도 부풀려졌습니다.

  • 7단계: 공격자는 60,766,209 FleetCommander 공유를 70,959,584 USDC로 환매하여 부풀려진 공유 가격과 최초 예치금의 차액에서 이익을 얻었습니다.
  • 8단계: 동일한 원자적 트랜잭션 내에서 공격자는 HigherRisk USDC FleetCommander에도 유사한 부풀림을 적용했습니다. HigherRisk 구간에서는 vgUSDC 대신 HigherRisk Term Ark에 기부된 Term 공유를 사용했지만, 기본 메커니즘은 동일했습니다: 기부를 통해 totalAssets()를 부풀린 후 부풀려진 가격으로 환매. 두 볼트를 합산한 총 이익은 약 $6.04M이었습니다.

결론

이번 사고는 코드 버그가 아닌 운영상의 실패로 인한 공유 가격 부풀림 공격이었습니다. Stream Finance 붕괴로 손상된 Silo Ark가 오프보딩 중임에도 FleetCommander의 totalAssets()에 여전히 포함되어 있었습니다 [2]. 공격자는 저렴하게 축적한 오래되고 과대평가된 vgUSDC를 해당 Ark에 기부하여 공유 가격을 부풀리고, 다른 예치자들의 손해를 감수하며 예치액보다 더 많은 금액을 환매했습니다.

예치 상한을 0으로 설정하는 것은 Ark를 오프보딩하지 않습니다. 다중 레이어 볼트 시스템의 경우, totalAssets()는 폐기된 포지션을 제외해야 하며, 보유 자산은 오래된 온체인 시세가 아닌 실현 가능한 가치로 평가되어야 합니다. 오프보딩 중인 구성 요소는 부풀림 벡터로 활용될 수 있기 전에 집계 평가에서 완전히 제거되어야 합니다.

참고 자료

  • [1] X의 Phalcon 알림
  • [2] Summer.fi 커뮤니티 콜 요약
  • [3] Stream Finance, $9,300만 손실 직면 (CoinDesk)

Phalcon Explorer 시작하기

트랜잭션을 심층 분석하여 현명하게 행동하세요

지금 무료로 사용해보기

이번 주 추가 사고

Bonzo Lend

2026년 7월 11일, 헤데라(Hedera)의 대출 프로토콜 Bonzo Lend는 공격자가 프로토콜의 제3자 가격 피드 제공자인 Supra에 SAUCE 가격 피드에 대한 위조된 오라클 업데이트를 제출하면서 약 $9.05M의 손실을 입었습니다 [1]. 오라클 검증자가 제로 서명 증명을 수락하고 부풀려진 SAUCE/WHBAR 가격을 온체인에 기록했습니다. 이후 Bonzo Lend는 조작된 피드를 읽어 공격자가 게시한 SAUCE 담보 가치보다 훨씬 더 많은 자산을 빌릴 수 있도록 허용했습니다.

배경

Bonzo Lend는 헤데라의 대출 프로토콜입니다. 시장 회계는 SAUCE와 같은 생태계 자산에 대해 제3자 오라클 네트워크인 Supra를 포함한 외부 가격 피드에 의존합니다. Bonzo Lend는 모든 오라클 위원회 서명을 직접 인증하지 않고, 오라클의 온체인 피드에 이미 저장된 최신 값을 읽어 담보 가치와 차입 한도를 계산할 때 사용합니다.

Supra의 풀 오라클 업데이트 경로는 제출된 루트를 검증한 후 피드 데이터를 스토리지에 기록합니다. 관련 코드 경로에서 verifyOracleProofV2()는 제출된 오라클 데이터를 반복하며, merkleSet에 캐시되지 않은 루트에 대해 requireRootVerified()를 호출하고, 머클 리프를 검증한 후 packData()를 통해 최신 피드 라운드를 기록합니다.

if (merkleSet.contains(oracle.data[i].root)) {
    continue;
}
requireRootVerified(oracle.data[i].root, oracle.data[i].sigs, oracle.data[i].committee_id);
if (!merkleSet.set(oracle.data[i].root)) {
    revert RootIsZero();
}

피드 업데이트의 보안은 requireRootVerified()가 설정된 오라클 위원회에 의해 진정으로 서명되지 않은 루트를 거부하는 데 달려 있습니다.

취약점 분석

버그가 있는 컨트랙트는 Supra 오라클 검증자 (0.0.4323006)입니다.

근본 원인은 상위 Supra 오라클 검증자의 잘못된 BLS 검증 경로였습니다. 익스플로잇 트랜잭션은 위원회 ID 2와 제로화된 서명 값 [0, 0]을 사용하여 페어 425(SAUCE/WHBAR)에 대한 가격 업데이트를 제출했습니다.

정상적인 BLS 검사에서 검증자는 페어링 프리컴파일을 호출하기 전에 서명과 공개 키가 0이 아니고, 곡선 위에 있으며, 올바른 부분 그룹에 속하는지 검증해야 합니다. 취약한 검증자는 제로 서명 포인트와 제로 위원회 공개 키 포인트로 페어링 검사를 구성했습니다. 항등 포인트에 대한 페어링 곱이 수학적으로 유효하기 때문에 헤데라 페어링 프리컴파일이 true를 반환했으며, 이는 실제 위원회 서명이 존재해서가 아니었습니다.

검증자는 입력 유효성을 검사해야 하며, 프리컴파일은 페어링 방정식만 확인합니다. 페어링 전에 제로 포인트를 거부하는 로직이 누락되어 오라클이 위조된 루트를 수락하고 조작된 가격 데이터가 스토리지에 저장될 수 있었습니다.

function requireHashVerified_V2(
    bytes32 _message,
    uint256[2] calldata _signature,
    uint256 committee_id
) public view {
    bool callSuccess;
    bool checkSuccess;
    (checkSuccess, callSuccess) = BLS.verifySingle(
        _signature,
        committee_public_key[committee_id],
        BLS.hashToPoint(domain, abi.encode(_message)),
        blsPrecompileGasCost
    );
    if (!callSuccess) {
        revert BLSInvalidPublicKeyorSignaturePoints();
    }
    if (!checkSuccess) {
        revert BLSIncorrectInputMessaage();
    }
}

공격 분석

다음 분석은 트랜잭션 0.0.995584-1783731093-686041919를 기반으로 합니다.

  • 1단계: 공격자는 담보로 250 SAUCE를 Bonzo Lend에 예치했습니다.

  • 2단계: 공격자는 Supra의 풀 오라클 컨트랙트에 악성 오라클 업데이트를 제출했습니다. 이 업데이트는 위에서 설명한 제로화된 BLS 서명 증명을 사용하면서 SAUCE 가격을 극도로 부풀려진 값으로 설정했습니다.

  • 3단계: verifyOracleProofV2()requireRootVerified()가 성공적으로 반환된 후 제출된 루트를 수락했습니다. 해당 함수는 머클 리프 데이터를 검증하고 최신 피드 라운드에 대해 packData()를 호출하여 조작된 SAUCE/WHBAR 값이 최신 저장 오라클 값이 되도록 했습니다.

  • 4단계: Bonzo Lend는 오라클에서 최신 SAUCE 가격을 읽었습니다. 저장된 피드 값이 이미 부풀려져 있었기 때문에, 프로토콜은 공격자의 250 SAUCE 담보를 실제 시장 가치보다 훨씬 더 높은 가치로 계산했습니다.

  • 5단계: 공격자는 부풀려진 담보 가치를 기반으로 약 660만 USDC와 3,450만 WHBAR를 차입했습니다. 비정상적인 가격은 이후 합법적인 오라클 업데이트가 SAUCE를 정상 범위로 복구할 때까지 유지되었습니다.

결론

이번 사고는 대출 풀 회계 버그가 아닌 오라클 검증 실패였습니다. 공격자는 SAUCE 시장을 조작하거나 Bonzo Lend의 내부 담보 검사를 우회할 필요가 없었습니다. 위조된 가격은 상위 Supra 오라클 검증자에게 수락되어 피드에 기록되었고, Bonzo Lend는 정상적인 가격 읽기 경로를 통해 이를 소비했습니다.

외부 피드를 소비하는 프로토콜은 전체 오라클 검증 경로의 보안 가정을 그대로 상속합니다. BLS 기반 오라클 업데이트의 경우, 페어링 프리컴파일이 호출되기 전에 제로 포인트를 반드시 거부해야 합니다. 암호화 레이어에서의 입력 유효성 검사는 선택 사항이 아닙니다. 페어링 방정식의 수학적 유효성이 기본 서명의 진위를 의미하지는 않습니다.

참고 자료

  • [1] Bonzo Finance 사고 보고서
  • Phalcon Security 시작하기

    모든 위협을 감지하고, 중요한 알림을 보내며, 공격을 차단하세요.

    지금 무료로 사용해보기
Sign up for the latest updates
하모니 크로스샤드 ONE 민팅 + 약 4,700만 달러 키 손실 | BlockSec
Security Insights

하모니 크로스샤드 ONE 민팅 + 약 4,700만 달러 키 손실 | BlockSec

2026년 8월10-16일, 보안사건 5건, 손실 약4700만달러. 핵심은 Harmony L1의 크로스샤드 영수증 재생 결함: 목적지 샤드가 서명된 소스 헤더 대신 미인증 MerkleProof의 ShardID·BlockNum으로 소비마커를 산출, 이미 지급된 영수증 재생으로 약3.01조 ONE이 위조됐으나 시총 초과로 손실 제외. 실손실은 개인키 유출(고래~2500만, Kite~1400만, Coinsbuy~790만)과 Fox 로직결함(~11.7만).

~$160만 손실: Moke 토큰, LpdFi 익스플로잇 | BlockSec 위클리
Security Insights

~$160만 손실: Moke 토큰, LpdFi 익스플로잇 | BlockSec 위클리

2026년 8월 3~9일, BNB 체인에서 2건의 보안 사고가 발생해 총 약 160만 달러의 손실이 발생했으며, 모두 가격 조작이 원인이었습니다. LpdFi(약 69.7만 달러)는 PancakeSwap 유동성 풀을 주문 평가와 이자 정산에 동시 사용해 공격자가 원금을 부풀리고 과도한 이자를 탈취했습니다. Moke Token(약 90.6만 달러)은 조작 가능한 현물 가격과 중복 LP 배당 회계를 결합해 MOKE를 부풀려 BNB 배당을 반복 수령했습니다.

COLDCARD 사건: 지갑의 "무작위" 시드가 무작위가 아니었을 때
Security Insights

COLDCARD 사건: 지갑의 "무작위" 시드가 무작위가 아니었을 때

COLDCARD 펌웨어의 빌드 통합 버그로 비트코인 시드 생성이 취약한 소프트웨어 RNG로 라우팅되어 지갑 시드가 오프라인 복구 가능해졌습니다. 시드 자체의 취약점이므로 펌웨어 업데이트로 해결 불가하며, 2026년 8월 7일 기준 확인된 피해는 1,405 BTC(~9,100만 달러), 비공개 추정치는 최대 2,055 BTC입니다.

~$3600만 달러 손실: Summer.fi, Bonzo Lend 등 | BlockSec 위클리