23년 2월 7일 FrieDrakeProtocol는 해커에게 flashloan공격을 당했다.
손실액은 10k 달러이다.
Attacker address: 0x14d8ada7a0ba91f59dc0cb97c8f44f1d177c2195
Attack CA: 0xdb2d869ac23715af204093e933f5eb57f2dc12a9
Vulnerable CA: 0x1954b6bd198c29c3ecf2d6f6bc70a4d41ea1cc07
Attack Tx: 0x09925028ce5d6a54801d04ff8f39e79af6c24289e84b301ddcdb6adfa51e901b
FDP에서 balanceOf() 함수는 그림과 같은 흐름으로 진행되는데 이때 currentRate에 의해 계산이 된다.
그런데 여기서 rTotal 변수가 감소하지 않는다.
그 후 공격자는 tAmount를 이용하여 deliver함수를 호출해 rTotal을 감소시킨다.
deliver() 함수를 호출 후 rTotal은 28% 감소하고 tTotal이 유지되면 _getRate()가 작아진다. 그러면 획득한 금액이 커지게 되고 공격자는 증가된 FDP를 인출하여 WBNB로 스왑 하였다.
그래서 총 16 WBNB를 획득하였다.
Step1
flashloan을 통해 1363 WBNB를 빌렸다.
Step2
그중 16 WBNB를 499,353,729,887,463 FDP로 교환하였다.
Step3
28,463,162,603,437 FDP를 이용하여 deliver함수를 호출했으며 _rTotal을 감소시켰다.
28,463,162,603,437 FDP는 전체 FDP 공급량의 28%에 해당하였으며 _rTotal을 28% 감소시켰다.
Step4
그리고 증가된 FDP를 WBNB로 바꾸고 fashloan을 이용하여 1363 WBNB를 갚았다.
최종적으로 공격자는 16 WBNB를 획득하였다.
출처: https://twitter.com/BeosinAlert/status/1622806021730340867