Back to Blog

CashioApp 보안 사고 재검토

Code Auditing
May 16, 2022
4 min read

2022년 3월 23일 UTC+8 16:20:08에 시작된 CashioApp 해킹으로 인해 담보 토큰 계정이 탈취되어 약 5,200만 달러의 피해가 발생했습니다. 이 해킹은 입력 계정에 대한 불충분한 검증으로 인해 가능했으며, 공격자는 어떠한 예치금 없이도 200억 개의 $CASH 토큰을 발행할 수 있었습니다. 이하에서 기술적인 세부 사항을 설명합니다.

요약

이번 사건은 Saber LP Arrows를 담보로 $CASH 토큰의 발행 및 소각을 처리하도록 설계된 Brrr 프로그램의 버그로 인해 발생했습니다. 구체적으로, 사용자는 Arrow LP 토큰을 예치함으로써 $CASH를 발행하는 $CASH 인쇄(print)가 가능합니다. Arrow LP 토큰은 Saber LP 토큰을 기초 토큰으로 받습니다. $CASH를 발행할 수 있는 print_cash 명령은 Bank 계정과 Collateral 계정을 포함한 계정 목록을 받습니다. 이 계정들은 $CASH 발행에 사용이 허용된 담보(즉, Arrow LP 토큰)를 기록하고 추적하는 데 사용됩니다. 설계상, 이 두 계정은 관리자에 의해서만 초기화되고 권한이 부여되어야 합니다. 그러나 프로그램이 Bank 계정의 유효성을 검증하지 못했습니다. 그 결과, 공격자는 일련의 가짜 계정(Bank 계정 포함)을 만들어 print_cash 명령에 입력하고, 거의 무료로(유일한 비용은 트랜잭션 수수료) $CASH를 발행할 수 있었습니다.

세부 사항

아래 print_cash 명령의 사용 계정 분석부터 시작해 보겠습니다.

속성 common(75번째 줄)은 프로그램에서 BrrrCommon 타입의 구조체입니다. BrrrCommon에서 bank 계정과 collateral 계정은 관리자에 의해 초기화되고 권한이 부여됩니다. crate_token$CASH 토큰의 계정으로, crate_mint의 공개 키(107번째 줄), 관리자 역할의 공개 키 등 $CASH에 관한 정보를 저장합니다. crate_collateral_tokens는 사용자로부터 전송된 담보 토큰을 보관하는 금고(vault) 계정입니다. 담보가 Arrow LP 토큰이어야 하며, 이는 Saber의 LP 토큰을 받으므로, 사용자는 saber_swap의 관련 계정을 입력해야 합니다. BrrrCommon 구조체의 마지막 두 속성은 명령에 사용되는 대상 프로그램의 프로그램 ID입니다. PrintCash 구조체의 마지막 네 속성은 사용자의 시스템 계정(트랜잭션의 서명자), 사용자의 담보 계정, 발행된 $CASH를 받는 사용자의 $CASH 토큰 계정, 그리고 $CASH 발행 권한을 가진 계정의 공개 키입니다.

공격 트랜잭션

위 계정들의 기능을 이해한 후, 공격 트랜잭션 분석을 시작하겠습니다: 0x4fgL…z2K5. 이 공격은 공격자 주소(0x6D7f)에서 시작되었으며, PrintCash 명령의 입력 계정 목록은 아래와 같습니다.

위의 Account #1(0x5aha)은 Bank 계정에 해당합니다. 이 주소가 CashioApp 공식 웹사이트에서 제공된 주소(0xEm1P)와 다르다는 점을 확인했으며, 이는 Bank 계정의 유효성 검증이 불충분함을 의미합니다!

유효성 검증

우회 방법을 파악하기 위해 코드에서 BrrrCommon 구조체의 유효성 검증을 자세히 살펴보겠습니다.

입력된 Bank 계정에 대한 유일한 검사는 입력된 Collateral 계정이 Bank 계정과 연결되어 있는지 확인하는 것입니다(12번째 줄). 그러나 이는 가짜 Collateral 계정을 함께 제공함으로써 쉽게 우회할 수 있습니다. 또한, 실제 담보 자산 지불을 피하기 위해 공격자는 가짜 saber_swap 계정도 제공했습니다. 공격자의 목표는 가치 없는 담보 자산을 예치하여 가치 있는 $CASH 토큰을 발행하는 것이므로, 공격자가 제공한 crate_tokencrate_mint는 실제 주소여야 합니다. 즉, Bank 계정에 대한 불충분한 검증으로 인해 공격자는 일련의 가짜 계정을 만들어 가치 없는 담보로 $CASH를 발행할 수 있었습니다.

수정 방법

수정 방법은 assert_keys_eq!(self.bank.crate_mint, self.crate_mint) 구문을 추가하는 것입니다. 이 구문은 Bank 계정의 crate_mint$CASH에 대한 올바른 crate_mint임을 보장합니다. 그런데 이것이 어떻게 Bank 계정의 유효성을 보장할까요? 답을 찾기 위해 (bankman 프로그램의) NewBank 구조체와 (crate_token 프로그램의) NewCrate 구조체를 살펴보겠습니다.

실제로 Bank 계정은 crate_token의 주소를 시드(seed)로 포함하는 PDA입니다. 한편, crate_token 역시 crate_mint의 주소를 시드로 포함하는 PDA입니다. 이는 입력된 crate_mint가 유효하다면 Bank 계정도 유효함을 보장합니다. 올바른 crate_mint 없이는 공격자가 $CASH를 발행하거나 공격을 실행할 수 없습니다.

BlockSec 소개

BlockSec은 2021년 세계적으로 저명한 보안 전문가 그룹에 의해 설립된 선도적인 블록체인 보안 회사입니다. 이 회사는 대중적인 채택을 촉진하기 위해 신흥 Web3 세계의 보안성과 사용성을 향상시키는 데 전념하고 있습니다. 이를 위해 BlockSec은 스마트 컨트랙트 및 EVM 체인 보안 감사 서비스, 보안 개발 및 위협을 선제적으로 차단하기 위한 Phalcon 플랫폼, 자금 추적 및 조사를 위한 MetaSleuth 플랫폼, 그리고 크립토 세계를 효율적으로 탐색하는 Web3 빌더를 위한 MetaSuites 확장 프로그램을 제공합니다.

현재까지 MetaMask, Uniswap Foundation, Compound, Forta, PancakeSwap 등 300개 이상의 저명한 고객사에 서비스를 제공했으며, Matrix Partners, Vitalbridge Capital, Fenbushi Capital 등 著名한 투자자들로부터 두 차례의 투자 라운드에서 수천만 달러를 조달했습니다.

공식 웹사이트: https://blocksec.com/

공식 트위터 계정: https://twitter.com/BlockSecTeam

Sign up for the latest updates
~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리
Security Insights

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

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

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리
Security Insights

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리

이 주간 블록체인 보안 보고서는 2026년 6월 15일~21일을 다루며, 이더리움과 BNB 체인에서 3건의 주요 사고가 발생해 약 $18.3M의 손실이 발생했습니다. jaredFromSubway 사건은 MEV 봇이 차익거래를 위해 신뢰할 수 없는 제3자 컨트랙트에 자산을 승인한 역방향 승인 공격으로, 가짜 래퍼 토큰과 스왑 풀을 이용해 약 $15M 손실이 발생했습니다. Aztec은 이스케이프 해치 ZK 회로의 제약 누락으로 공격자가 가짜 머클 트리로 온체인 검증을 통과했습니다.

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

BlockSec가 Web3 Companion을 오픈소스로 공개했습니다. 이 보안 중심의 에이전트 지갑은 자체 AI 에이전트를 신뢰하지 않는 방식으로 설계되었으며, 키 격리, 강력한 정책, Passkey를 활용해 온체인 자산을 보호합니다.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit