Back to Blog

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

July 15, 2026
8 min read
Key Insights

지난 한 주(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
~$800K 손실: Hinkal 이중 지불 사건 | BlockSec 위클리
Security Insights

~$800K 손실: Hinkal 이중 지불 사건 | BlockSec 위클리

이 주간 보안 보고서는 2026년 6월 29일~7월 5일 이더리움에서 발생한 약 80만 달러 손실의 주요 사고 1건을 다룹니다. Hinkal 실드 풀 프로토콜이 이중 지출 공격으로 탈취되었으며, 레거시 노트 형식의 결함을 악용해 단일 예치금에서 다수의 널리파이어를 도출한 것으로 추정됩니다. 회로 수준 취약점, 공격 흐름, 널리파이어 기반 프라이버시 프로토콜의 시사점을 분석합니다.

뉴스레터 - 2026년 6월
Security Insights

뉴스레터 - 2026년 6월

이 월간 보고서는 2026년 6월의 3대 보안 사고를 다루며, 총 확인 손실액은 약 2,200만 달러입니다. 정교한 허니팟 공격으로 미확인 토큰 허용량을 악용해 JaredFromSubway의 MEV 봇에서 약 1,500만 달러가 유출됐습니다. 두 레거시 Aztec 롤업 배포에서 증명 정산 경계 취약점으로 약 435만 달러가 손실됐습니다. SecondFi의 Ed25519 구현 결함으로 지갑 개인키가 노출되어 374개 지갑에서 약 240만 달러가 유출됐습니다. 세 사고 모두 표면상 온전해 보였지만 실제로는 적용되지 않은 보안 보장이라는 공통 패턴을 공유합니다.

~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리
Security Insights

~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리

이 주간 블록체인 보안 리포트는 2026년 6월 22~28일 발생한 주요 사건 2건을 다루며, 이더리움과 카르다노에서 약 410만 달러의 피해가 확인됐습니다. Taiko 브릿지 공격은 노출된 SGX 서명 키와 디버그 엔클레이브를 거부하지 못한 증명 정책 결함을 이용해 악성 증명자를 등록하고 L2 상태 증명을 위조했습니다. SecondFi 지갑은 Ed25519 논스 도출 시 비밀 입력이 제거되는 결함으로 공개 트랜잭션 데이터만으로 개인 키 복구가 가능했습니다.