Open code423n4 opened 3 years ago
gpersoon
The function executeTrade does a low level call to matchOrders of TracerPerpetualSwaps.sol, to be able to catch reverts.
In the newer solidity versions it is also possible to use try / catch, which is more readable. See here: https://docs.soliditylang.org/en/latest/control-structures.html#try-catch
// https://github.com/code-423n4/2021-06-tracer/blob/main/src/contracts/Trader.sol#L67 function executeTrade(Types.SignedLimitOrder[] memory makers, Types.SignedLimitOrder[] memory takers) external override { ... (bool success, ) = makeOrder.market.call( abi.encodePacked( ITracerPerpetualSwaps(makeOrder.market).matchOrders.selector, abi.encode(makeOrder, takeOrder, fillAmount) ) );
Use try catch
Handle
gpersoon
Vulnerability details
Impact
The function executeTrade does a low level call to matchOrders of TracerPerpetualSwaps.sol, to be able to catch reverts.
In the newer solidity versions it is also possible to use try / catch, which is more readable. See here: https://docs.soliditylang.org/en/latest/control-structures.html#try-catch
Proof of Concept
// https://github.com/code-423n4/2021-06-tracer/blob/main/src/contracts/Trader.sol#L67 function executeTrade(Types.SignedLimitOrder[] memory makers, Types.SignedLimitOrder[] memory takers) external override { ... (bool success, ) = makeOrder.market.call( abi.encodePacked( ITracerPerpetualSwaps(makeOrder.market).matchOrders.selector, abi.encode(makeOrder, takeOrder, fillAmount) ) );
Tools Used
Recommended Mitigation Steps
Use try catch