DeFi 프로토콜 Abracadabra의 해킹 사건
DeFi 프로토콜 Abracadabra가 공격자의 간단한 논리적 실수를 통해 180만 달러를 잃었습니다. Hacken의 분석가들은 공격자가 이미 Tornado Cash를 통해 자금을 세탁했다고 밝혔습니다. 10월 초, Abracadabra는 사용자가 예치한 토큰을 담보로 하여 안정적인 코인인 MIM을 빌릴 수 있는 DeFi 대출 프로토콜로, 이전에도 여러 차례 해커 공격을 받았으며, 이번 공격에서는 프로토콜의 배치 기능에서 담보 없이 빌릴 수 있도록 하는 논리적 실수를 이용해 약 180만 달러를 다시 잃었다고 블록체인 보안 회사 Hacken의 연구 노트에서 crypto.news와 공유했습니다.
프로토콜의 구조와 문제점
Abracadabra는 사람들이 이자 발생 토큰을 담보로 사용하고 Magic Internet Money, 즉 MIM이라고 불리는 미국 달러 연동 토큰을 빌릴 수 있는 방법으로 시작되었습니다. 이 시스템은 대출 규칙을 처리하는 Cauldrons와 실제로 토큰을 보유하는 공유 금고인 DegenBox의 두 가지 요소로 구성되어 있습니다. 간단히 말해, 사용자는 Cauldron에 담보를 제공하고 DegenBox는 그 뒤에서 자금을 추적합니다.
문제의 핵심은 대출자가 실제로 담보를 가지고 있는지 최종 확인을 강제하는 안전 플래그가 단일 거래 내에서 꺼졌다는 것입니다. Hacken의 보고서에 따르면, 공격자는
“Abracadabra의 cook 기능에서 논리적 결함을 이용해 MIM 토큰을 빌리고, 그 후 즉시 담보가 충분한지 확인하는 검증 플래그를 재설정할 수 있었습니다.”
이는 여러 Cauldron에서 담보 없이 한 번에 빌릴 수 있게 해주었습니다.
공격의 진행 과정
흐름이 어떻게 작동했는지 간단히 설명하자면, Abracadabra는 사용자가 한 거래에서 여러 작업을 수행할 수 있도록 하는 배치 기능인 cook을 사용합니다. 예를 들어, 담보를 예치하고 동시에 빌리는 것입니다. 이러한 작업 중 하나인 “빌리기” 단계는 needsSolvencyCheck라는 플래그를 true로 설정하여 “이 거래가 끝날 때 대출자가 안전한지 확인하라”는 의미입니다. 그러나 같은 배치 내에서 실행할 수 있는 또 다른 작업은 _additionalCookAction(…)을 호출하는 것입니다. Hacken이 지적한 바와 같이, 해당 기능은 “가상”으로 선언되었고 구현되지 않았기 때문에 기본적으로 모든 것이 false로 설정된 빈 객체를 반환했습니다. 그 결과, 공격자는 빌리기 작업을 호출한 후 기본 작업을 호출하여 플래그를 재설정했고, 결국 프로토콜은 지급 능력을 확인하지 않았습니다.
분석가들은 공격자가 한 번에 여섯 개의 Cauldron을 공격하여 약 179만 MIM을 빼내고 이를 ETH로 교환했다고 말합니다. 공격자들은 취약점을 이용해 여섯 개의 서로 다른 Cauldron을 체계적으로 공격하고
“전용 cook 기능 호출을 사용하여 각 Cauldron을 비웠습니다”
라고 분석가들은 설명했습니다. 교환 후, 공격자는 자금을 Tornado Cash라는 암호화 믹싱 프로토콜을 통해 라우팅하여 주로 10 ETH씩 보내며 다음 날에 걸쳐 점진적으로 전송했습니다.
사건의 여파와 대응
이번 사건은 Abracadabra의 CauldronV4 코드가 문제에 연루된 첫 번째 사례가 아닙니다. 올해 초 다른 사건들도 같은 계약군의 다양한 엣지 케이스를 사용했습니다. 흥미로운 점은 포크된 배포가 얼마나 빠르게 반응했는가입니다. 보고서에 따르면, Synnax라는 포크는 Abracadabra의 drain 며칠 전에 자체 DegenBox에서 CauldronV4 마스터를 일시 중지하거나 화이트리스트에서 제외했습니다. 즉, 포크 팀은 같은 약한 패턴을 발견한 후 비상 브레이크를 당겼으며, 이는 코드 감시 팀이 위험을 인지했음을 시사합니다.