슬로우 미스트: 트랜짓 스왑이 외부 호출로 해킹당해 2500 BNB가 토네이도 캐시에 전송되었습니다
체인 캡처 메시지에 따르면, 느린 안개 보안 팀의 정보에 의하면, 크로스 체인 DEX 집계기 Transit Swap 프로젝트가 공격을 받아 사용자 자산이 예기치 않게 전출되었습니다. 느린 안개 보안 팀은 이번 도난 자금 규모가 2300만 달러를 초과한다고 분석 평가했으며, 해커 주소는 0x75F2...FD46 및 0xfa71...90fb입니다. 이어서 이번 공격 과정에 대한 분석을 진행했습니다:사용자가 Transit Swap에서 스왑을 진행할 때, 먼저 라우팅 프록시 계약(0x8785bb...)을 통해 다양한 교환 유형에 따라 다른 라우팅 브릿지 계약을 선택합니다. 이후 라우팅 브릿지 계약(0x0B4727...)은 권한 관리 계약(0xeD1afC...)의 claimTokens 함수를 통해 사용자가 교환할 토큰을 라우팅 브릿지 계약으로 전송합니다. 따라서 토큰 교환 전에 사용자는 먼저 권한 관리 계약(0xeD1afC...)에 대한 권한을 부여해야 합니다.claimTokens 함수는 지정된 토큰 계약의 transferFrom 함수를 호출하여 전송을 수행합니다. 수신된 매개변수는 상위 라우팅 브릿지 계약(0x0B4727...)에서 전달되며, 본래 이러한 매개변수에 대해 아무런 제한을 두지 않고 호출자가 라우팅 프록시 계약 또는 라우팅 브릿지 계약이어야만 확인합니다.라우팅 브릿지 계약(0x0B4727...)은 사용자가 교환할 토큰을 수신한 후 교환 계약을 호출하여 구체적인 교환 작업을 수행하지만, 교환 계약의 주소와 구체적인 함수 호출 데이터는 상위 라우팅 프록시 계약(0x8785bb...)에서 전달되며, 라우팅 브릿지 계약은 파싱된 교환 계약 주소와 호출 데이터에 대한 검사를 수행하지 않았습니다.또한 프록시 계약(0x8785bb...)이 라우팅 브릿지 계약(0x0B4727...)에 전달한 매개변수도 모두 사용자가 전달한 매개변수에서 비롯됩니다. 그리고 프록시 계약(0x8785bb...)은 사용자가 전달한 calldata 내 각 데이터 길이가 예상과 일치하는지 및 호출된 라우팅 브릿지 계약이 화이트리스트 매핑에 있는 주소인지 확인했을 뿐, calldata 데이터에 대한 구체적인 검사는 하지 않았습니다.따라서 공격자는 라우팅 프록시 계약, 라우팅 브릿지 계약 및 권한 관리 계약이 모두 전달된 데이터에 대한 검사를 하지 않는 결함을 이용했습니다. 라우팅 프록시 계약을 통해 구성된 데이터를 전달하여 라우팅 브릿지 계약의 callBytes 함수를 호출했습니다. callBytes 함수는 공격자가 지정한 교환 계약과 교환 데이터를 파싱하며, 이때 교환 계약은 권한 관리 계약 주소로 지정되고, 교환 데이터는 claimTokens 함수를 호출하여 지정된 사용자의 토큰을 공격자가 지정한 주소로 전송하는 것으로 지정되었습니다. 이를 통해 권한 관리 계약에 권한을 부여한 모든 사용자의 토큰을 탈취했습니다.이번 공격의 주요 원인은 Transit Swap 프로토콜이 토큰 교환을 진행할 때 사용자 전달 데이터에 대한 엄격한 검사를 하지 않아 임의 외부 호출 문제를 초래했기 때문입니다. 공격자는 이 임의 외부 호출 문제를 이용하여 사용자가 Transit Swap에 권한을 부여한 토큰을 탈취했습니다.현재까지 해커는 2,500 BNB를 Tornado Cash로 전송하였으며, 나머지 자금은 해커 주소에 분산 보관되어 있습니다. 해커의 흔적 분석 결과, 해커는 LATOKEN 등 플랫폼에서 입출금한 흔적이 발견되었습니다. 느린 안개 MistTrack은 도난 자금의 이동 및 해커 흔적 분석을 지속적으로 추적할 것입니다.(출처 링크)