지난 한 주(2026/03/16 - 2026/03/22) 동안 BlockSec은 총 7건의 공격 사건을 탐지 및 분석하였으며, 총 추정 손실액은 약 $82.7M입니다. 아래 표는 각 사건을 요약한 것이며, 세부 분석은 이후 각 소절에서 제공됩니다.
| 날짜 | 사건 | 유형 | 추정 손실 |
|---|---|---|---|
| 2026/03/15* | Venus 사건 | 기부 공격 및 시장 조작 | ~$2.15M |
| 2026/03/17 | dTRINITY 사건 | 정밀도 손실 | ~$257K |
| 2026/03/17 | Fun.xyz 사건 | 접근 제어 문제 | ~$85K |
| 2026/03/18 | Keom 사건 | 비즈니스 로직 결함 | ~$35K |
| 2026/03/18 | ShiMama 사건 | 접근 제어 문제 | ~$35K |
| 2026/03/19 | BlindBox 사건 | 비즈니스 로직 결함 | ~$99K |
| 2026/03/22 | Resolv 사건 | 개인 키 탈취 | ~$80M |
*Venus 사건은 지난 주 보고서에 포함되지 않아 완전성을 위해 여기에 수록합니다.
1. Venus 사건
간략한 요약
2026년 3월 15일, BNB Chain의 Venus Protocol THE(Thena) 마켓이 기부 공격과 시장 조작을 결합한 공격을 받아 약 ~$2.15M의 불량 부채가 발생했습니다. THE 마켓의 공급 한도는 민트 경로에만 적용되었으며, 마켓에 직접 토큰을 기부하는 방식은 여전히 cash를 증가시키고 exchangeRate를 부풀릴 수 있었습니다. 공격자는 이렇게 부풀려진 담보 가치를 활용해 유동 자산을 차입하고 더 많은 THE를 확보하는 동시에 THE 토큰의 시장 가격을 끌어올렸으며, 결국 포지션이 강제 청산된 후 프로토콜에 불량 부채를 남겼습니다.
배경
Venus는 Compound V2 포크 대출 프로토콜입니다. THE 마켓에서 사용자는 THE를 예치하고 vTHE 토큰을 받습니다. exchangeRate는 각 vTHE가 마켓의 기초 자산을 얼마나 나타내는지를 결정하며, 핵심 공식은 다음과 같습니다:
exchangeRate = (cash + borrows - reserves) / totalSupply
여기서 cash는 마켓의 기초 토큰 잔액, borrows는 총 미상환 부채, reserves는 프로토콜 소유 준비금, totalSupply는 총 vTHE 공급량입니다. THE 마켓에는 총 담보 노출을 제한하기 위한 공급 한도도 존재합니다.
취약점 분석
이번 사건은 vTHE 마켓 컨트랙트(0x86e0...739f)에 대한 두 가지 복합적인 공격 벡터를 포함했습니다.
기부 공격
프로토콜은 마켓 컨트랙트의 원시 토큰 잔액에서 직접 cash를 도출하므로 태생적으로 기부 공격에 취약합니다. vTHE 마켓 컨트랙트에 THE를 직접 전송하면 cash가 증가하고 따라서 exchangeRate도 상승합니다. 공격자는 이를 이용해 exchangeRate를 약 3.81배 부풀려 기존 vTHE 포지션의 담보 가치를 증폭시켰습니다.
시장 조작
THE 토큰은 온체인 유동성이 얕아 비교적 적은 매수 압력으로도 현물 가격 조작이 가능했습니다. 프로토콜의 오라클은 기준값에서 너무 멀리 벗어난 가격을 거부하도록 설계되어 있어, 공격 중 약 37분간 극단적인 가격을 올바르게 거부했습니다. 그러나 지속적인 매수 압력으로 인해 THE 토큰 가격이 공격 전 가격의 약 2배인 약 $0.51까지 상승했고, 오라클은 결국 이 가격을 수용했습니다.

두 가지 공격 벡터는 서로를 강화했습니다. 기부 공격으로 인한 exchangeRate 상승이 각 vTHE 단위의 담보 가치를 증폭시켰고, 조작된 THE 토큰 가격은 차입 한도를 더욱 부풀렸습니다. 이 두 가지가 결합되어 공격자는 공급 한도의 3.67배에 달하는 포지션으로 약 ~$14.9M의 차입을 축적할 수 있었습니다.
공격 분석
아래 분석은 공격 트랜잭션 예시 0xce6e3e...1f5fb0e를 기반으로 합니다.
-
1단계: 공격자와 연결된 지갑이 약 9개월에 걸쳐 77건의 TornadoCash 관련 트랜잭션을 통해 7,447
ETH를 수령했습니다. 해당ETH는 Aave에 예치되었고, 약 $9.92M의 스테이블코인을 차입하여 약 12.2MTHE의vTHE포지션을 구축했으며, 이는 14.5MTHE공급 한도의 약 84%에 해당합니다. -
2단계: 첫 번째 공격 트랜잭션에서 6개의 주소가 약 36M
THE를vTHE마켓 컨트랙트에 직접 전송했습니다. 공격 컨트랙트도 1.58MUSDC를 차입해 재공급한 후 약 4.6MTHE를 차입하여vTHE에 직접 전송했습니다. 이로 인해exchangeRate가 약 3.81배 상승했습니다.

- 3단계: 이후 트랜잭션에서 공격자는
CAKE,BNB,BTCB,USDC등 유동 자산을 차입했습니다. 공격자는 차입한 자산으로THE를 계속 매수하고 더 많은THE를vTHE에 기부하는 루프를 반복하며 포지션 차입 한도와THE토큰 시장 가격을 동시에 상승시켰습니다.

-
4단계:
THE토큰 가격이 약 $0.2에서 상승하였고, Binance 가격 소스는 잠시 $4에 근접했습니다. 프로토콜의 오라클은 약 37분간 극단적인 가격을 거부한 후 최종적으로 약 $0.51의 가격을 수용했습니다. -
5단계: 20:42 UTC+8 기준으로 공격자의 포지션은 약 53.2M
THE에 달했으며, 이는 공급 한도의 약 3.67배로, 총 차입 노출액은 약 ~$14.9M였습니다. -
6단계: 이후 포지션은 대규모 청산에 돌입했습니다. 254개 청산자 주소로부터 8,048건의 청산 트랜잭션을 통해 약 42M
THE담보가 청산되었습니다. 매도가 지속되면서THE토큰은 약 $0.22까지 하락했습니다. 청산 수익은 전체 부채를 충당하지 못했고, Venus에는 ~$2.15M의 순 불량 부채가 남았습니다.
결론
이번 사건에서 새로운 취약점은 발견되지 않았습니다. 이는 잘 알려진 공격 벡터가 체계적으로 실행될 때, 각 계층이 다른 계층이 버텨줄 것이라 가정하면 프로토콜의 전체 위험 구조를 압도할 수 있음을 보여줍니다. 경고 신호는 수개월 전부터 온체인에서 가시적이었으나, 탐지와 대응 사이의 간극은 해소되지 않았습니다. 유동성을 고려한 위험 파라미터, 자동화된 서킷 브레이커, 포지션 수준의 모니터링을 통해 이 간극을 해소하는 것이 이번 사건이 다른 대출 프로토콜에 남기는 핵심 교훈입니다.
자세한 분석은 심층 분석 게시물 [1]을 참조하십시오.
참고 자료
2. dTRINITY 사건
간략한 요약
2026년 3월 17일, 이더리움의 Aave V3 포크 대출 프로토콜인 dTRINITY가 dLEND 대출 마켓을 통해 공격받아 약 $257.3K의 손실이 발생했습니다. 근본 원인은 Aave V3 포크에 내재된 빈 마켓 취약점이었습니다. 리저브의 유동성이 거의 없는 상태에서 반복적인 플래시론 프리미엄 누적이 liquidityIndex를 극단적인 값으로 끌어올렸습니다. 리저브 회계가 왜곡된 후, 공격자는 예치 및 출금 경로에서 발생하는 정밀도 손실을 악용해 담보를 과대 계상하고 dUSD를 차입한 뒤 예치한 cbBTC를 회수하여 순이익을 얻었습니다.
배경
dTRINITY는 dUSD 스테이블코인 시스템과 Aave V3에서 포크된 대출 마켓인 dLEND를 포함합니다. 핵심 L2Pool 컨트랙트(0xfda3...e19e84)에서 각 자산은 고유한 리저브를 가지며, 리저브 회계는 스케일된 잔액과 리저브 수준 liquidityIndex를 기반으로 합니다. 사용자의 현재 기초 잔액은 스케일된 잔액에 리저브의 정규화 수익을 곱하여 도출됩니다.
플래시론 프리미엄은 cumulateToLiquidityIndex()를 통해 리저브 회계에 추가되며, 공식은 다음과 같습니다:
nextLiquidityIndex = ((amount / totalLiquidity) + 1) * reserve.liquidityIndex
totalLiquidity가 극도로 작아지면 각 프리미엄 누적이 liquidityIndex를 비정상적으로 빠르게 상승시킬 수 있습니다.

취약점 분석
공격의 핵심 조건은 dLEND-cbBTC 마켓(0x504d...3acc)의 리저브가 거의 비어 있는 상태였습니다. 리저브가 단 하나의 스케일된 지분으로 압축되자 플래시론 프리미엄이 의미 있는 공급 기반에 걸쳐 분산되지 않았습니다. 반복적인 플래시론으로 인해 liquidityIndex가 극도로 빠르게 상승했습니다.
liquidityIndex가 부풀려진 후 기초 자산과 스케일된 지분 간의 변환이 극단적인 반올림 체계에 진입했습니다. 이 상태에서 소량의 예치로 하나의 지분을 추가로 민트할 수 있었고, 훨씬 많은 금액을 인출할 때도 하나의 지분만 소각되었습니다. 이 비대칭성으로 인해 공격자는 aCbBTC 담보를 과대 계상하고 다른 리저브에서 실제 dUSD를 차입할 수 있었는데, 이는 상태 점검이 Pool 수준에서 수행되고 손상된 cbBTC 리저브가 교차 자산 차입 능력에 직접 영향을 미쳤기 때문입니다.
공격 분석
익스플로잇은 두 개의 트랜잭션으로 구성됩니다: 0x8d33d6...40ae7139 및 0xbec4c8...4fc33260.
트랜잭션 1: liquidityIndex 조작
-
1단계: Morpho Blue에서
cbBTC차입. -
2단계: dLEND-cbBTC에
cbBTC를 예치하여 100개의 스케일된 지분 민트. -
3단계: 99개의 지분을 출금하여 1개의 지분만 남기고, dLEND-cbBTC 리저브를 거의 비어 있는 스케일 공급 상태로 압축.
-
4단계: 80,000,000 단위의
cbBTC(즉, 0.8cbBTC)를 dLEND-cbBTC aToken에 직접 전송. -
5단계: 150회의
Pool.flashLoan()호출을 실행하여 리저브 회계에 프리미엄을 누적하고liquidityIndex를 6,226,621,999,999,999,999,999,999,979,728,276까지 상승.

-
6단계: 반복적인 예치 및 출금 사이클을 실행하여 잔여 리저브 현금 추출.
-
7단계: 플래시론 상환.
트랜잭션 2: 수익 실현
-
1단계: Morpho Blue에서
cbBTC재차입. -
2단계: 이미 조작된 리저브에 약 7.72
cbBTC를 예치하여 과대 계상된aCbBTC담보 포지션 구축.

- 3단계: 과대 계상된 담보를 이용해 dLEND-dUSD 마켓에서 257,328
dUSD차입.

- 4단계: 반복적인 예치/출금 사이클을 통해
cbBTC계속 추출.

- 5단계: Morpho 플래시론 상환 후 차입한
dUSD를 공격자 EOA로 전송.
결론
이번 사건은 Aave V3 포크에서 잘 문서화된 빈 마켓 공격의 사례입니다. 이 패턴은 여러 프로토콜에서 나타났으며, 완화 방법도 잘 확립되어 있습니다. 리저브 초기화 시 최소 공급 임계값을 강제하면 인덱스 성장이 통제 불가능해지는 상태로 리저브가 진입하는 것을 방지할 수 있습니다. Aave V3를 포크하는 프로토콜은 리저브 초기화를 중요한 작업으로 취급하고, 인덱스를 안정화하기 위해 자연 발생적인 예치 흐름에 의존하기보다 배포 시 의미 있는 유동성을 잠가두어야 합니다.
3. Fun.xyz 사건
간략한 요약
2026년 3월 17일, Polygon의 결제 인프라 프로토콜인 Fun.xyz가 약 $85.7K의 공격을 받았습니다. 근본 원인은 레거시 CheckoutPool이 접근 제어 없이 중요 함수 bridge()를 노출하고, 브릿지 calldata를 의도한 수신자에 바인딩하지 않은 것이었습니다. 이 취약점으로 인해 공격자는 신뢰된 정산 경로로 실행을 리디렉션하고 공격자가 제어하는 스마트 계정으로 자금을 전송할 수 있었습니다.
배경
CheckoutPool은 Fun.xyz의 결제 인프라에서 핵심 정산 컨트랙트입니다. 정상적인 흐름에서 사용자는 deposit()을 통해 결제를 생성하고, 신뢰된 운영자가 bridge() 및 execute() 등의 정산 경로를 통해 이를 처리합니다. 브릿지 작업의 경우 bridge()는 호출자가 제공한 bridgeParams.target 및 bridgeParams.callData를 기반으로 외부 호출을 실행합니다.
취약점 분석
근본 원인은 레거시 CheckoutPool(0x1304...2ec01a)이 적절한 접근 제어 없이 함수 bridge()를 통해 민감한 정산 라우팅 경로를 노출하고, 외부에서 제공된 브릿지 calldata를 의도한 수신자에 대해 검증하지 않은 것입니다. 구체적으로:
-
레거시 구현은
bridge()에onlyOperator를 강제하지 않아, 어떤 외부 호출자도deposit()을 통해 결제를 생성한 후 해당 함수를 호출할 수 있었습니다. -
bridge()는 호출자가 제공한bridgeParams를_bridgeToRecipient()에 전달했으며, 이 함수는 수신자를 결제 기록에 대해 검증하지 않고 외부 호출을 수행했습니다.



추가적인 운영상의 조건이 익스플로잇을 실용적으로 만들었습니다: 레거시 CheckoutPool은 익스플로잇 당시 CheckoutPaymaster에서 여전히 운영자 권한을 보유하고 있었습니다. 이로 인해 조작된 bridge() 호출이 CheckoutPaymaster.activateAndCall()에 도달할 수 있었고, 이는 다시 최신 CheckoutPool.execute() 경로를 호출하여 공격자가 제어하는 주소로 자금을 전송했습니다.
공격 분석
아래 분석은 공격 트랜잭션 0x957bcf...1f4f5a를 기반으로 합니다.
-
1단계: ERC-4337 스마트 계정 0xb648을 생성하고 외부 UserOperation에서 송신자와 페이마스터 모두로 지정.
-
2단계: 레거시 및 새 CheckoutPool 모두에서
deposit()을 호출하여, 새 CheckoutPool에 85,730USDC의 정산 금액으로 결제 기록 생성. -
3단계: 악의적인
bridgeParams로 레거시 CheckoutPool의bridge()를 호출:bridgeParams.target을 CheckoutPaymaster로 설정하고,bridgeParams.callData를 외부UserOperation을 내부 페이로드로 포함하는activateAndCall()호출로 인코딩.

- 4단계: 새 CheckoutPool(0x1929...0215)의
execute()에 도달하여, 외부UserOperation의ops[0].sender로 지정된 주소 0xb648으로 85,730USDC전송.

- 5단계:
EntryPoint.handleOps()진입: 0xb648이 송신자와 페이마스터 모두로 기능하므로 계정 검증과 페이마스터 검증 모두 공격자의 제어 하에 놓이게 되어, 공격자는 85,730USDC의 수익을 얻음.
결론
이번 사건은 레거시 CheckoutPool의 bridge() 경로에 접근 제어와 calldata-수신자 바인딩이 모두 결여되어 약 $85.7K의 손실이 발생한 사건입니다. 유사한 사건을 예방하기 위해 프로토콜은 민감한 라우팅 및 정산 흐름 전반에 엄격한 접근 제어를 시행하고, 외부에서 제공된 페이로드가 프로토콜에서 파생된 수신자와 일치하도록 보장하며, 패치된 교체 컨트랙트가 배포되면 오래된 컨트랙트를 신뢰된 권한 관계에서 제거해야 합니다.
4. Keom 사건
간략한 요약
2026년 3월 18일, Polygon zkEVM의 Compound V2 포크 대출 프로토콜인 Keom이 약 $35K의 공격을 받았습니다. 근본 원인은 redeemUnderlying()에 의해 호출되는 redeemFresh()의 결함 있는 회계 로직이었습니다. 해당 함수는 지분 감소를 사용자의 실제 잔액으로 제한했지만, 그에 따라 기초 자산 출금 금액을 재계산하지 않았습니다. 이 불일치로 인해 공격자는 자신의 지분이 허용하는 것보다 훨씬 많은 자산을 상환할 수 있었습니다.
배경
Keom은 Compound V2에서 포크된 대출 프로토콜입니다. 사용자는 마켓에 ETH를 공급하고 kETH를 받습니다. 사용자가 상환할 때 프로토콜은 현재 교환 비율을 사용하여 kETH 지분을 ETH로 변환합니다. 프로토콜에는 두 가지 상환 진입점이 있습니다: 지분 금액으로 상환하는 redeem()과 원하는 기초 자산 금액으로 상환하는 redeemUnderlying().
취약점 분석
결함은 redeemUnderlying()에 의해 호출되는 kETH 마켓(0x4c6e...0403)의 redeemFresh()에 있습니다. 사용자가 제어하는 redeemAmountIn이 먼저 redeemAmount에 할당되고, 현재 교환 비율을 통해 redeemTokens를 계산하는 데 사용됩니다. redeemTokens가 상환자의 잔액을 초과하면 함수는 이를 accountTokens[redeemer]로 제한합니다. 그러나 이 제한 이후 redeemAmount는 재계산되지 않고 원래의 redeemAmountIn과 동일하게 유지됩니다. 이를 통해 상환자는 해당 지분의 일부만 소각하면서 전체 redeemAmount의 기초 자산을 출금할 수 있습니다.
아래 코드 스니펫에서 볼 수 있듯이 redeemFresh()는 redeemAllowed()를 통해 상태 점검도 수행합니다. Compound V2 설계에서 redeemAllowed()는 markets[cToken].accountMembership[redeemer]를 확인하고 계정이 이 cToken 마켓에 진입한 경우에만 유동성 점검을 호출합니다. 그렇지 않으면 점검이 완전히 생략됩니다. redeemAmountIn은 공격자가 제어하며 임의로 크게 설정할 수 있으므로, kETH가 여전히 담보로 계산되면 유동성 점검이 실패합니다. 즉, 상태 점검을 우회하지 않고서는 회계 결함만으로는 직접적인 익스플로잇이 불가능합니다.

공격 분석
아래 분석은 공격 트랜잭션 0x4ccde7...03d9dfd8을 기반으로 합니다.
- 1단계: 0.001
ETH만으로mint()를 호출하여 최소한의kETH잔액 획득.

-
2단계:
exitMarket()을 호출하여 계정의 kETH 마켓 멤버십을 제거함으로써,redeemAllowed()가 유동성 점검을 완전히 우회하도록 함(취약점 분석에서 설명한 바와 같이). -
3단계:
redeemUnderlying()을 호출하여 마켓의 전체ETH잔액(~38.6ETH)을 출금하고, 결함 있는 회계를 악용하여 마켓에서ETH를 탈취.

결론
이번 사건은 redeemTokens를 사용자의 실제 잔액으로 제한한 후 redeemAmount를 재계산하지 않는 회계 취약점으로 인해 약 $35K의 손실이 발생한 사건입니다. 상환 로직은 지분-기초 자산 불변성을 유지하기 위해 모든 제한이나 조정 후 모든 종속 값을 재계산해야 합니다. Compound V2 포크는 이 경로를 신중하게 검토해야 하며, 유사한 결함이 다른 파생 프로토콜에도 존재할 수 있습니다.
5. ShiMama 사건
간략한 요약
2026년 3월 18일, BNB Chain의 디플레이션 토큰 프로토콜인 ShiMama가 약 $35K의 공격을 받았습니다. 근본 원인은 executePairBurn() 함수에 접근 제어가 없어 어떤 사용자도 페어 리저브 출금 및 소각을 트리거할 수 있었고, 이를 통한 가격 조작이 가능했습니다.
배경
ShiMama Protocol은 AMM 페어에서 토큰을 끌어내 소각하는 온체인 디플레이션 메커니즘을 포함합니다. 이 메커니즘은 ShiMama Protocol과 ShiMama Token 전반에 구현되어 있습니다. ShiMama Protocol의 executePairBurn() 함수는 호출자가 제공한 referenceIn 파라미터로부터 끌어낼 금액을 계산합니다:
pullAmt = referenceIn * pairBurnBpOnSell / 10_000
그런 다음 ShiMama Token의 forcePullFromPair()를 호출하고 pair.sync() 및 끌어낸 토큰의 소각을 수행합니다.
취약점 분석
근본 원인은 ShiMamaProtocol 컨트랙트(0x5049...0b49a)의 executePairBurn()에 접근 제어가 없다는 것입니다. 해당 함수는 제한 없이 외부에서 호출 가능하므로 어떤 사용자도 권한 있는 리저브 이동 및 페어 동기화를 트리거할 수 있습니다. referenceIn 또한 호출자가 제어하며 실제 판매 금액에 바인딩되지 않습니다. ShiMamaToken.forcePullFromPair()에서 프로토콜은 제약 없이 Pancake 페어에서 직접 잔액을 이동시킬 수 있어, 임의적인 리저브 제거와 즉각적인 동기화, 따라서 현물 가격 조작이 가능합니다.

공격 분석
아래 분석은 공격 트랜잭션 0x13959b...3c20e001을 기반으로 합니다.
-
1단계: Moolah 플래시론에서
WBNB차입. -
2단계: 이전 트랜잭션에서 미리 확보한 30.78e18
ShiMama를 공격 컨트랙트로 전송. Pancake 페어에서ShiMama를 직접 구매하는 것이 비활성화되어 있었으므로, 공격자는 공격 전 ShiMama Protocol에서 유동성을 공급하고 출금하는 방식으로ShiMama를 확보했습니다. -
3단계:
executePairBurn()을 호출하여 Pancake 페어에서 1,311,349,143.96ShiMama토큰을 끌어내 소각함으로써ShiMama가격을 효과적으로 부풀림. -
4단계: 공격자는 부풀려진 가격에 PancakeSwap에서 30.78e18
ShiMama를 52.98e18WBNB로 교환. -
5단계: 플래시론을 상환하고 52.98
WBNB를 순이익으로 획득.

결론
이번 사건은 executePairBurn()에 접근 제어가 없어 풀 리저브를 변경하는 무권한 경로가 노출된 것이 원인입니다. 리저브를 변경하는 모든 함수는 경제적으로 민감하므로 엄격한 권한이 부여되어야 합니다. 호출자가 제어하는 입력값은 리저브 추출 증폭을 방지하기 위해 프로토콜에서 파생된 값에 바인딩되어야 합니다.
6. BlindBox 사건
간략한 요약
2026년 3월 19일, BNB Chain의 GameFi 베팅 프로토콜인 BlindBox가 약 $99K의 공격을 받았습니다. 근본 원인은 약한 무작위성으로, 공격자가 결과를 예측하여 100%의 승률을 달성할 수 있었습니다. 또한 getTwapPrice()가 진정한 시간 가중 평균이 아닌 조작 가능한 현물 가격에 의존하여, 공격자가 사전에 풀 가격을 부풀리고 프로토콜의 의도된 한도보다 큰 베팅을 할 수 있었습니다.
배경
BlindBox는 사용자가 ATM 토큰을 소각 주소로 전송하여 베팅을 할 수 있는 GameFi 프로토콜입니다. 프로토콜은 이후 블록해시의 홀짝성을 기반으로 결과를 결정합니다. 베팅에서 이기면 BlindBox는 소각 주소 뱅크롤에서 원래 ATM 금액의 1.95배를 지급합니다. 프로토콜은 각 베팅 규모를 제한하기 위해 getTwapPrice()를 사용합니다.
취약점 분석
BlindBox 컨트랙트(0x1F83...734c59)에는 두 가지 취약점이 있습니다:
- 약한 무작위성: 정산 시간이 256블록을 초과하면
blockhash(bet.blockNum + 2)가 0을 반환합니다. 그러면 프로토콜은block.prevrandao,betId,block.timestamp에서 파생된 무작위성으로 폴백합니다. 이러한 입력값들은 트랜잭션 제출 전에 오프체인에서 시뮬레이션할 수 있으므로, 공격자는 계산된 결과가 유리할 때만settle()을 호출하여 결정론적 승리를 달성할 수 있었습니다.

- 조작 가능한 가격 제한: 프로토콜은 베팅 규모를 제한하기 위해
getTwapPrice()를 사용합니다. 그러나 이 함수는 진정한 시간 가중 평균 가격을 구현하지 않고,ATM/USDT풀의 현물 가격을 읽습니다. 이를 통해 공격자는 베팅 전 풀 가격을 조작하여 한도를 우회할 수 있습니다.

공격 분석
아래 단계는 공격 패턴을 보여줍니다. 2단계와 3단계는 쌍을 이루는 시퀀스를 형성했으며(예: betId=5,284), 공격자는 수익을 축적하기 위해 이 쌍을 여러 번 반복했습니다.
-
1단계:
ATM/USDT풀을 조작하여ATM현물 가격을 부풀려, 다음 단계에서getTwapPrice()가 더 큰 베팅 규모를 허용하도록 함. -
2단계: 부풀려진 허용 금액의
ATM을 소각 주소로 전송하여 대규모 베팅 실행(예: 0x4be049...3af12c).

- 3단계: 256블록 이상이 경과할 때까지 기다려
blockhash가 0을 반환하고 폴백 경로가 활성화되도록 함. 그런 다음 공격자는 오프체인에서 결과를 시뮬레이션하고 계산된 결과가 유리한 블록에서만settle()을 호출(예: 0x68eedc...718ce8).

결론
이번 사건은 예측 가능한 무작위성과 TWAP 입력으로서 조작 가능한 현물 가격이 결합되어 약 $99K의 손실이 발생한 사건입니다. 유사한 위험을 줄이기 위해 프로토콜은 blockhash 창이 만료된 후 예측 가능해지는 모든 정산 경로를 제거하고, getTwapPrice()를 단기 리저브 조작에 저항하는 가격 소스로 교체해야 합니다.
7. Resolv 사건
간략한 요약
2026년 3월 22일, 이더리움의 스테이블코인 프로토콜인 Resolv가 인프라 키 탈취를 경험하여 권한 있는 스왑 완료 로직의 무단 실행이 가능해졌습니다. 이 사건에서 공격자는 권한 있는 함수를 악용해 8,000만 개 이상의 무담보 USR을 민트했습니다. 영향은 직접적인 민트 이벤트를 넘어, 결과적인 USR 디페그가 Resolv 자산이 담보로 사용된 대출 프로토콜 전반에 걸쳐 광범위한 전염을 일으켰습니다.
배경
Resolv는 USR 발행이 담보 기반 스왑 정산에 의존하는 스테이블코인 프로토콜입니다. completeSwap() -> mint() -> transfer()로 이어지는 스왑 완료 파이프라인은 USR의 유통 공급에 직접 영향을 미치므로 인증 무결성과 담보 무결성 모두에 의존합니다. 정상 운영 시 Resolv 컨트랙트(0xa27a...5861)의 completeSwap()은 해당 담보 예치가 검증된 후에만 권한 있는 인프라 키(코드에서 SERVICE_ROLE로 명명됨)에 의해 호출될 수 있습니다.

취약점 분석
이번 사건은 동등한 담보 유입 없이 신뢰된 정산 로직을 호출하고 USR 민트 경로에 도달한 권한 있는 키 탈취였습니다. 공격자가 권한 있는 서명 권한을 획득하자 completeSwap() 경로는 온체인 민트 사전 조건을 강제하지 않았으며, 담보 검증은 전적으로 오프체인 인증에 의존했습니다. 이로 인해 제어 플레인 침해가 공급 무결성 실패로 직접 이어졌습니다.
공격 분석
-
1단계: 익스플로잇 전, 공격자는 트랜잭션 0x590b5c...de732c89에서 스왑 요청을 제출하여 이후 악의적인 스왑 완료에 필요한 상태를 준비했습니다.
-
2단계: 탈취된 권한 키를 사용하여 공격자는 세 개의 트랜잭션을 통해 8,000만 개 이상의
USR을 민트하기 위해completeSwap()을 호출했습니다: 0xfe37f2...dc33743, 0x41b6b9...db1f18f, 0x7f9143...53a931d.
결론
이번 사건은 스테이블코인 안전성이 신뢰된 운영자 역할뿐만 아니라 강력한 온체인 민트 사전 조건에 의존해야 함을 강조합니다. 특히, 이번 사건의 영향은 $80M의 무단 USR 민트를 훨씬 넘어섰습니다. Resolv 자산이 여러 대출 프로토콜에서 담보로 광범위하게 사용되었기 때문에 디페그가 광범위한 전염을 일으켰습니다. Chaos Labs의 보고에 따르면, 자동화된 수익 추구 할당을 사용하는 온체인 큐레이터들은 실시간 위험 제어가 부족하여 이미 손상된 마켓에 계속 새로운 자본을 투입했습니다. 국소적인 익스플로잇으로 시작된 것이 빠르게 크로스 프로토콜 전염 이벤트로 확대되어 대출 프로토콜에 수백만 달러의 불량 부채를 남겼습니다.
BlockSec 소개
BlockSec은 풀스택 블록체인 보안 및 암호화폐 컴플라이언스 제공업체입니다. 저희는 고객이 코드 감사(스마트 컨트랙트, 블록체인, 지갑 포함), 실시간 공격 차단, 사건 분석, 불법 자금 추적, 프로토콜 및 플랫폼의 전체 생애주기에 걸쳐 AML/CFT 의무를 이행할 수 있도록 제품과 서비스를 구축합니다.
BlockSec은 저명한 학회에서 다수의 블록체인 보안 논문을 발표하고, DeFi 애플리케이션의 여러 제로데이 공격을 보고하며, 2,000만 달러 이상을 구제하기 위한 여러 해킹을 차단하고, 수십억 달러의 암호화폐를 보호해 왔습니다.
-
공식 웹사이트: https://blocksec.com/
-
공식 트위터 계정: https://twitter.com/BlockSecTeam
-
🔗 BlockSec 감사 서비스 : 요청 제출



