_call1InchSwap executes a raw .call() to the 1inch router using entirely user-supplied calldata. While the destination contract is the trusted 1inch router, the function selector and all parameters are unconstrained.
The 1inch swap() function accepts a dstReceiver field in its descriptor struct. If this is set to an address other than address(this), swap proceeds are redirected off-contract.
Likelihood:
The owner constructs 1inch API calldata off-chain with no on-chain validation of its contents before execution
If ownership is transferred to a multisig or governance contract, signers may not inspect raw calldata byte-by-byte
Impact:
Swap proceeds redirected to an attacker-controlled address — contract cannot repay flash loan
Malicious calldata can invoke any function on the 1inch router, including ones that do not perform a swap
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.