2024년 1월 16일, Socket Tech는 공격을 받아 약 330만 달러의 손실을 입었습니다. 공격자들은 Socket의 계약 중 하나인 데이터 유효성 검사 측면의 취약점을 악용하여 악의적인 데이터 입력을 통해 승인된 계약에서 사용자 자금을 훔쳤습니다. 이 공격으로 인해 230개의 주소가 손실을 입었으며, 가장 큰 손실을 입은 단일 주소는 약 656,000달러의 손실을 입었습니다.
배경
소켓은 체인 간에 데이터와 자산을 안전하고 효율적으로 전송하는 상호운용성 프로토콜입니다. 소켓 게이트웨이 컨트랙트는 소켓 모빌리티 레이어와의 모든 상호작용을 위한 액세스 포인트로, 모든 자산 브리지와 DEX가 하나의 고유한 메타 브리지로 통합되고 비용, 지연 시간 또는 보안과 같은 사용자 선호도에 따라 최상의 트랜잭션 라우팅이 선택됩니다.
해킹이 발생하기 3일 전, 소켓 컨트랙트 관리자는 시스템에 새 경로를 추가하기 위해 addRoute 명령을 실행했습니다. 이 경로 추가의 목적은 소켓 게이트웨이의 기능을 확장하기 위한 것이었지만, 실수로 심각한 취약점이 발생했습니다.
다음 이미지는 계약 관리자를 통해 경로가 추가되는 기록을 보여줍니다
이벤트 요약
1. 1월 16일 15:03(GMT)에 공격자의 지갑에서 공격에 사용된 자금이 이체되었으며, 시간적 분석 결과 0xe620에서 이 자금이 Tornado Cash에서 인출된 10BNB와 관련이 있는 것으로 나타났습니다.
2.이 자금은 소켓 취약점을 악용하는 두 건의 계약을 생성하고 실행하는 데 사용되었습니다. 첫 번째 계약은 소켓게이트웨이를 승인한 주소의 USDC를 대상으로 했으며(아래 스크린샷), 127명의 피해자가 약 250만 달러를 가로챘습니다.
3. 다음으로, 두 번째 계약은 피해자의 주소가 WETH, USDT, WBTC, DAI 대 비트코인인 경우를 대상으로 합니다. 다른 104명의 피해자는 다음과 같은 자산을 잃었습니다 :
- 42.47526105 WETH
- 347,005.65 USDT
- 2.88962154 WBTC
- 13,821.01 DAI
- 165,356.99 MATIC
4.공격자가 USDC 및 USDT를 ETH로 변환했습니다.
취약점 출처
공격자가 악용한 취약점은 새로 추가된 경로 주소 routeAddress 내의 formAction 함수에 존재합니다.
경로 주소 내 formAction 함수의 원래 기능은 래핑 및 언래핑 함수를 지원하는 것이었습니다. 하지만 이 함수에는 심각한 취약점이 있습니다. 사용자가 인증 없이 .call()의 swapExtraData를 통해 외부 데이터를 호출할 수 있으며, 이는 공격자가 임의의 악성 함수를 실행할 수 있다는 것을 의미합니다.
이 사건에서 공격자는 transferFrom 함수를 트리거하는 악성 swapExtraData 입력을 조작했습니다. 이 악성 호출은 소켓게이트웨이 컨트랙트에 대한 사용자의 권한을 악용하여 자금을 탈취했습니다.
컨트랙트는 잔액 확인을 통해 fromToken.call() 호출 후 사용자의 잔액이 올바르게 변경되었는지 확인하지만, 이 함수는 공격자가 금액을 0으로 설정한 경우를 고려하지 않습니다.
공격 흐름 줄이기
1.공격 컨트랙트 사용하기
1.
2. fallback()은 헥스 서명 196을 사용하여 취약한 라우팅 주소 컨트랙트를 호출( 라우터 주소).
3. 아래 스크린샷에서 공격자가 사용한 가짜 입력을 볼 수 있으며, 스와핑 횟수는 모두 0입니다.
< p style="text-align:center">
4. 다음 단계는 WrappedTokenSwapperImpl.performAction()을 호출하는 것입니다. 스왑을 수행합니다.
5. 아무런 검증 없이, 가짜 SwapExtraData가 fromToken (WETH )에 의해 수락되어 실행되었습니다.
6.공격자는 피해자의 자산이 모두 소진될 때까지 위와 같은 과정을 반복합니다. 악성 트랜잭션이 나타난 후 Socket은 신속하게 disableRoute를 호출하여 이전에 취약했던 경로를 차단하고 더 광범위한 공격을 방지했습니다.
7. 1월 23일, Socket은 1032 ETH를 회수했다고 발표했으며, 25일에는 모든 손실을 전액 보상하겠다고 발표했습니다. 이 사건은 해결되었습니다.
사고 요약
사용자 승인 횟수가 무제한인 라우팅 계약의 경우 악성 콜데이터 공격이 발생하지 않았습니다. 이전에 유사한 공격을 받은 사례로는 덱서블과 헥터 브리지가 있습니다. 2023년 2월 17일, 탈중앙화 거래소 덱서블이 공격을 받아 150만 달러 이상의 손실을 입었습니다. 익스플로잇자들은 사용자 자산을 탈취하기 위해 악의적인 콜데이터를 덱서블의 fill() 함수에 주입했습니다. 2023년 6월 2일, 헥터 네트워크의 프로토콜이 공격을 받았습니다. 공격자는 가짜 USDC 컨트랙트를 배포하고 악성 콜데이터를 통해 피해자의 컨트랙트에서 652,000개의 실제 USDC를 전송했습니다.
블록체인 집계 플랫폼은 일반적으로 일련의 브리지 및 라우팅 콘트랙트를 캡슐화하여 유동성을 높이고 소모를 줄입니다. 그러나 이러한 복잡한 캡슐화는 보안에 추가적인 문제를 야기할 수 있습니다. 소켓에서 발생한 이번 사건이 해결되어 기쁘게 생각하며, CertiK는 모든 유형의 집계 위험을 줄이고 커뮤니티 신뢰와 업계 전반의 보안 수준을 개선하기 위해 플랫폼에 대한 광범위한 감사 및 테스트를 제공하기 위해 계속 노력할 것입니다.