저희의 내부 분석 도구는 4월 5일에 Tether Gold 컨트랙트에서 공격자가 사전 정의된 주소로 누구의 XAUt(Tether Gold) 토큰이든 전송할 수 있는 버그를 발견했습니다. 팀은 저희의 보고를 받았고 내부적으로 이 문제를 파악하고 있었다고 밝혔습니다. 오늘 저희는 해당 문제가 수정되었음을 확인하였으며, 여기에서 그 세부 사항을 공유하고자 합니다. 또한, Phalcon Fork를 사용하여 이 취약점의 PoC를 개발하고 디버깅하는 방법을 설명하겠습니다.
0x0. 취약점

컨트랙트의 transferFrom 함수에서, 누구든지 이 함수를 호출하여 다른 사용자의 토큰을 토큰 소유자가 정의한 신뢰할 수 있는 수신 주소로 전송할 수 있습니다. 이 취약점은 공격자의 계정으로 직접 토큰을 전송하는 데 사용될 수는 없지만, 공격자는 여전히 풀의 토큰을 전송하여 풀(예: WETH-XAUt 풀)의 토큰 가격을 조작하여 이익을 취할 수 있습니다.
이 취약점에 대한 수정은 다음과 같이 간단합니다.

0x1. 취약점 악용 방법
PoC를 작성하고 디버깅하기 위해 Phalcon Fork를 사용할 수 있습니다. 먼저, 취약점이 패치되기 전에 Fork를 생성할 수 있습니다. Fork API를 통해 Fork를 생성할 때 블록 높이 17038763을 사용했습니다.

1단계: 충분한 이더 준비
첫 번째 단계는 공격자의 가스비를 위한 충분한 이더를 확보하는 것입니다. 계정에 이더가 없을 경우, vitalik.eth로부터 이더를 전송하는 트랜잭션이 발행됩니다.
2단계: Tether Gold 컨트랙트의 소유권 이전
Tether Gold 컨트랙트의 소유자는 멀티시그 지갑(0xC6CDE7C39eB2f0F0095F41570af89eFC2C1Ea828)입니다. 소유권을 공격자에게 이전하기 위해서는 멀티시그 트랜잭션을 제출한 후 해당 트랜잭션을 확인해야 합니다.

3단계: Tether Gold 컨트랙트에 권한 있는 계정 추가
저희는 새로운 계정 0x189e7947a9d9210eec3a41dcf5f536bb1d7726f5를 권한 있는 계정으로 추가했습니다. 그런 다음, transferFrom 함수를 호출하여 피해자로부터 권한 있는 계정으로 XAUt 토큰을 전송합니다.

0x2. PoC
다음 깃허브에서 PoC를 확인하세요:



