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