1. 공격 직전에 다수의 계정들에 가스비로 쓸 near 토큰 분배. 각각이 병렬로 공격 수행.
2. 가짜 토큰 3개 배포 (1, 2, 3). 토큰 티커는 junk1,2,3.. 무튼 배포해서 대량민팅
3. Rhea dex에 USDC-junk1, junk1-junk2, junk2-wNEAR, junk2-junk3, junk3-wNEAR 풀 개설, 소량의 유동성 공급. 이때 junk1-junk2, junk2-junk3는 fee 99%로 설정
4. Rhea Lend에 마진거래 담보로 USDC 입금 (여기서는 1만불)
5. 마진 포지션 오픈. USDC 담보로 wNEAR 포지션 잡는, 정상처럼 보이는 포지션 개설 호출. Pyth 오라클은 USDC와 wNEAR 가격만 조회하니 그대로 통과.
6. 마진 포지션 잡으면 Rhea Lend가 예금자 풀에서 포지션만큼 (여기서는 4만불) 빌려서 DEX에서 스왑 실행
7. 문제1: 여기서 공격자가 Rhea Lend의 margin_execute_with_pyth 함수로 하여금 지정한 경로로 스왑하게 만드는 것을 허용한 것. 공격자는 이를 통해 Rhea DEX에서 USDC -> junk1 -> {junk2 <-> wNEAR} 20회 반복 -> junk3 -> wNEAR 스왑. (자기가 만들어둔 풀 경유하도록)
8. 스왑 과정에서 junk 토큰이 fee로 다 빨려서 없어지고, 스왑해서 나오는 wNEAR 또한 0에 가깝게 나옴.
9. 문제2: 이 과정에서 스왑 결과에 대한 min amount 검증 없어서 그대로 포지션 개설
10. 공격자가 해당 풀들의 개설자이자 유일한 LP이므로 Rhea에서 빌려온 4만불 그대로 가져감 -> bad debt
11. 병렬로 이렇게 열심히 반복해 공격
생각보다 과정이 복잡하네요. 단순히 가짜토큰 발행 -> 담보로 써서 오라클 우회 이런 흐름은 아닌..
공격자 계정: https://nearblocks.io/address/ad3a230823d00aab46fbe53132d3613f7c5eef99f31f0901af295ebe6f273956
(아직 어디 분석 나온거 없어서 뇌피셜이긴합니다)
