Morpho Labs 보안 문제 심층 분석: 무슨 일이 있었나?
2025년 4월 11일, DeFi 커뮤니티는 Morpho Labs와 관련된 보안 문제로 인해 혼란에 빠졌습니다. Morpho Labs는 고품질 코드와 34건의 공개된 감사 내역(Morpho Docs)을 포함한 엄격한 보안 관행으로 알려진 프로젝트입니다. Greysign @greysign1 라는 사용자가 X(구 트위터)에 사건에 대한 자세한 조사를 공유하며 Morpho의 초기 주장을 반박하는 중요한 취약점을 밝혔습니다. 무슨 일이 일어났는지, 왜 중요한지, 그리고 자신을 보호하는 방법을 자세히 알아보겠습니다.
탈중앙화 금융 프로토콜인 Morpho Labs는 2025년 4월 10일에 Morpho App의 트랜잭션 흐름을 개선하기 위한 프론트엔드 업데이트를 롤아웃했습니다. 하지만 4월 11일 CET 기준 오전 3시 54분에 일부 트랜잭션이 잘못 구성되고 있다는 보고가 접수되어 Morpho 팀은 신속하게 대응했습니다. CET 기준 오전 4시 44분에 문제를 해결하고 CET 기준 오전 5시 23분에 X(구 트위터)에 업데이트를 알렸습니다. (Morpho Labs Update). 처음에는 Morpho는 문제가 프론트엔드에만 국한되어 있으며 Morpho 프로토콜의 자금은 안전하다고 주장했습니다. 그러나 Greysign의 조사 결과 더 심각한 문제가 드러났습니다. 문제는 프론트엔드에만 있는 것이 아니라 Bundler3 컨트랙트 레벨의 취약점이었습니다.
진짜 원흉: Bundler3 컨트랙트 취약점
Greysign은 처음에는 해커가 Morpho App에 악성 코드를 주입하여 트랜잭션이 블록체인에 제출되기 전에 Permit2 서명을 훔치는 프론트엔드 익스플로잇을 의심했습니다. Permit2는 사용자가 토큰 전송을 안전하게 승인할 수 있도록 하는 표준으로, DeFi에서 상호 작용을 간소화하는 데 자주 사용됩니다. 그러나 공격 트랜잭션을 분석한 후 Greysign은 문제가 프론트엔드가 아닌 Bundler3 컨트랙트 자체에 있다고 결론지었습니다.
Morpho의 문서(Introducing Bundler3)에 설명된 대로 Bundler3는 단일 트랜잭션에서 여러 컨트랙트 호출을 처리하도록 설계된 불변의 오픈 소스 컨트랙트로, multicall이라고 하는 기능입니다. 이는 일반적인 이더리움 지갑과 같은 외부 소유 계정(EOA)이 여러 작업을 동시에 실행할 수 없기 때문에 DeFi에서 유용합니다. Bundler3는 토큰 전송을 승인하고 거래를 한 번에 실행하는 것과 같은 호출을 일괄 처리하여 이 문제를 해결하기 위한 것이었습니다. Spearbit과 OpenZeppelin의 감사를 받았고 Certora의 공식 검증까지 거쳤으며 Immunefi와 Cantina에서 150만 달러의 버그 현상금 프로그램을 운영하고 있었습니다. 그렇다면 무엇이 잘못되었을까요?
취약점은 Bundler3의 multicall 기능이 구현된 방식에 있습니다. 단순히 호출을 일괄 처리하는 기본적인 multicall과 달리 Bundler3를 사용하면 사용자가 임의의 호출을 전달하여 대신 실행할 수 있었습니다. 그러나 적절한 제한이 없어 공격자가 호출을 조작할 수 있었습니다. 익스플로잇은 다음과 같이 작동했습니다.
- 사용자는 Permit2 서명을 통해 자신의 토큰을 관리하도록 Bundler3와 상호 작용하여 승인합니다.
- Permit2 서명을 포함한 사용자의 트랜잭션은 이더리움 트랜잭션 대기 영역인 멤풀에 들어갑니다.
- 수익성 있는 기회를 찾기 위해 멤풀을 스캔하는 MEV(Maximum Extractable Value) 봇이 트랜잭션을 발견합니다. MEV 봇은 프론트러닝 또는 샌드위칭과 같은 전술을 통해 이익을 위해 트랜잭션 순서를 악용하는 자동화된 시스템입니다(Blocknative on MEV).
- 봇은 더 높은 가스 요금으로 자체 트랜잭션을 제출하여 사용자의 트랜잭션을 프론트러닝하고 동일한 Permit2 서명을 사용하여 Bundler3의 multicall을 통해
TransferFrom
호출을 실행합니다. 이렇게 하면 사용자의 토큰이 공격자의 주소로 리디렉션됩니다.
Greysign은 악성 TransferFrom
호출을 빨간색으로 강조 표시하여 공격 트랜잭션의 스크린샷을 공유했습니다.
핵심 문제는 Bundler3의 multicall이 atomic 실행을 보장하지 않았다는 것입니다. 즉, 일괄 처리된 호출이 단일하고 중단할 수 없는 단위로 실행된다는 보장이 없었습니다. 공격자는 호출을 조작하여 제한 부족을 악용하여 토큰을 훔칠 수 있었습니다.
Morpho의 대응 및 수정: Bundler2로 되돌아가기
Morpho Labs는 문제를 확인한 후 Morpho App 프론트엔드를 신속하게 일시 중지했고 나중에 프론트엔드가 안전하며 사용자로부터 추가 조치가 필요하지 않다고 주장했습니다. 그러나 Greysign의 조사 결과 Morpho는 이를 프론트엔드 문제로 규정하여 심각성을 축소한 것으로 보입니다. 실제로는 Bundler3를 완전히 포기하는 것이 수정 방법이었습니다.
Greysign은 Morpho가 컨트랙트의 이전 버전인 Bundler2(주소: 0x4095f064b8d3c3548a3bebfd0bbfd04750e30077)로 되돌아갔다고 언급했습니다. Bundler3와 달리 Bundler2는 기능을 래핑하고 실행할 수 있는 호출 유형을 제한하는 더 엄격한 제어 기능을 갖추고 있습니다. 이렇게 하면 공격자가 임의의 호출을 전달할 수 없어 취약점을 효과적으로 차단할 수 있습니다. Greysign은 이제 Bundler2를 호출하는 업데이트된 Morpho App을 테스트하여 이를 확인했습니다.
흥미롭게도 Bundler3는 74일 전에 배포되었지만 약 10시간 동안만 활성화되었으며 대부분의 트랜잭션은 사건 발생 18시간 전에 발생했습니다. Morpho가 Bundler3로 전환하기로 결정한 이유는 불분명합니다. 특히 Greysign은 Morpho의 2024년 보고서에서 Bundler3의 multicall 구현을 구체적으로 다루는 감사 보고서를 찾을 수 없었기 때문입니다.
왜 중요할까요? DeFi의 패턴 취약점
이는 Morpho의 비즈니스 로직에 묶인 일회성 버그가 아니라 유사한 multicall 구현을 사용하는 다른 DeFi 프로토콜에 영향을 미칠 수 있는 패턴 취약점이었습니다. Bundler3의 multicall에서 atomic 실행이 부족하여 공격자가 이더리움 트랜잭션 라이프사이클에서 일반적인 공격 벡터인 멤풀을 악용할 수 있었습니다. Greysign은 Bundler3와 관련된 다른 트랜잭션도 취약하여 토큰을 여전히 훔칠 수 있는지 확인하기 위해 공격을 시뮬레이션했습니다.
이 사건은 DeFi에서 토큰 승인의 위험성을 강조합니다. Bundler3와 같은 컨트랙트가 토큰을 관리하도록 승인하면 해당 승인은 취소될 때까지 유지됩니다. 컨트랙트에 취약점이 있는 경우 공격자는 초기 상호 작용 후에도 오랫동안 이를 악용하여 자금을 고갈시킬 수 있습니다(Dexola on Token Approvals).
안전을 유지하는 방법: 승인 취소 및 Bundler3 회피
Greysign의 최종 경고는 중요합니다. Bundler3(주소: 0x6566194141eefa99Af43Bb5Aa71460Ca2Dc90245)와 상호 작용하고 Permit2 승인에 서명한 경우 토큰이 위험에 처해 있습니다. MEV 봇은 여전히 멤풀에서 트랜잭션을 프론트러닝하고 자금을 훔칠 수 있습니다. 다음은 수행해야 할 작업입니다.
- 토큰 승인 취소: Revoke.cash와 같은 서비스를 사용하여 Bundler3에 부여한 모든 승인을 확인하고 취소합니다. 이렇게 하면 공격자가 기존 승인을 사용하여 토큰을 훔치는 것을 방지할 수 있습니다.
- Bundler3 상호 작용 회피: Morpho가 영구적인 수정 사항을 확인하거나 완전히 폐기할 때까지 Bundler3 컨트랙트와 상호 작용하지 마십시오.
- 트랜잭션 기록 확인: 특히 2025년 4월 10~11일경에 Morpho App을 사용한 경우 지갑의 트랜잭션 기록에서 Bundler3와의 상호 작용을 확인하십시오.
다행히도 Morpho 프로토콜 자체에 이미 예치된 자금은 안전합니다. 취약점은 핵심 프로토콜이 아닌 Bundler3와의 상호 작용에만 영향을 미치기 때문입니다.
더 큰 그림: DeFi의 투명성과 신뢰
Greysign은 이전에 코드 품질과 보안에 중점을 둔 Morpho Labs 팀에 실망감을 표했습니다. 컨트랙트 취약점이었음에도 불구하고 문제를 프론트엔드 문제로 규정하는 투명성 부족은 신뢰를 훼손했습니다. Morpho가 다음 주에 자세한 게시물을 발표하겠다는 약속(Morpho Labs Update)은 회의적인 반응을 얻었으며 0xSimon과 같은 사용자는 지연에 의문을 제기했습니다. (0xSimon’s Reply).
이 사건은 DeFi에서 투명성의 중요성을 강조합니다. 보안 문제가 발생하면 사용자의 신뢰를 유지하기 위해 명확하고 정직한 커뮤니케이션이 중요합니다. 또한 컨트랙트 업그레이드, 특히 안전한 구현(Bundler2)을 예기치 않은 위험을 초래하는 새로운 구현(Bundler3)으로 교체할 때 엄격한 테스트의 필요성을 강조합니다.
결론
2025년 4월 Morpho Labs 보안 사건은 DeFi의 복잡성과 위험성을 상기시켜 줍니다. Morpho가 문제를 완화하기 위해 신속하게 조치를 취했지만 초기 오해와 취약점의 특성은 컨트랙트 설계 및 사용자 안전에 대한 중요한 질문을 제기합니다. Greysign의 철저한 조사 덕분에 커뮤니티는 이제 무엇이 잘못되었는지, 그리고 자신을 보호하는 방법에 대해 더 명확하게 알 수 있습니다.
Morpho 사용자라면 지금 바로 조치를 취하여 Bundler3 승인을 취소하고 주의를 기울이십시오. 더 넓은 DeFi 공간의 경우 이 사건은 multicall 구현에서 atomic 실행을 우선시하고 위기 상황에서 투명하게 소통하라는 촉구입니다. 안전을 유지하고 상호 작용하는 컨트랙트를 항상 다시 확인하십시오!