취약점 요약

Flare의 Challenger 컨트랙트에는 runArbitrageWithCustomParams()라는 함수가 있습니다.

이 함수는 차익거래를 실행하기 위해 설계된 것인데, public하고, 내부에서 사용하는 파라미터(_agentVault, _flashLender, _blazeSwapRouter, _to)에 대한 검증이 전혀 없습니다.

공격자는 이 점을 이용해 가짜 컨트랙트(FakeVault)를 넣고 호출하여:

타겟 위치

알아야하는 정보

문제의 함수

function runArbitrageWithCustomParams(
    address _agentVault,
    IERC3156FlashLender _flashLender,
    IBlazeSwapRouter _blazeSwapRouter,
    address _to
) public {
    // 청산 시작
    IIAssetManager _assetManager =
        IIAgentVault(_agentVault).assetManager();
    _assetManager.startLiquidation(address(_agentVault));

    // 차익거래 데이터 준비
    Ecosystem.Data memory _data = Ecosystem.getData(
        _agentVault,
        address(_blazeSwapRouter),
        address(_flashLender)
    );

    _runArbitrageWithData(_data);

    // 수익 전송
    uint256 earnings =
        IERC20(_data.vaultToken).balanceOf(address(this));
    IERC20(_data.vaultToken).transfer(_to, earnings);
}