Flare의 Challenger 컨트랙트는 보상 토큰(Reward tokens, Vault tokens)을 받아서 DEX 라우터를 통해 스왑합니다.
그런데 이때 슬리피지(slippage) 제한이 전혀 설정되어 있지 않음 → 공격자는 스왑에서 어떤 가격이든 강제로 받아들이게 만들 수 있습니다.
따라서 공격자가 가격쌍을 조작하거나 샌드위치 공격을 하면, Challenger는 사실상 0에 가까운 토큰을 받고도 거래를 성공으로 인식해버리며,
결국 보상 토큰(VaultTokens0)을 그대로 공격자가 가져갈 수 있습니다.
Slippage (슬리피지)
스왑 거래에서 기대 가격 대비 실제 가격 차이를 허용하는 비율.
예: 슬리피지 0.5%면, 0.5% 이상 불리해지면 거래가 revert.
문제 상황
(, amountsRecv) = _blazeSwapRouter.swapExactTokensForTokens(
_vaultAmount,
0, // <---------- 최소 수령량(minAmount)이 0 → 0개 받아도 거래 성공
toDynamicArray(address(_vaultToken), address(_fAsset)),
address(this),
block.timestamp
);