codehawks-2023-07-dsc-l01
[L-01] Improving the burnDsc() to allow users to mitigate their liquidation’s impact
Summary
유저가 담보율을 높이기 위해 DSC를 소각하는 burnDsc 함수에서, 소각 후 담보율이 200% 이상이 되지 않으면 revert 된다. 유저가 청산의 영향을 완화하기 위해 200%까지는 아니지만 담보율을 올리고 싶을 수 있다. 하지만 revert 되므로 그럴 방법이 없다.
Keyword
business logic vul
Vulnerability
burnDsc 함수는 호출자의 DSC를 소각하는 함수로, 담보 비율이 깨졌을 때 스스로 이를 조정하기 위해 사용할 수 있다.
호출자가 소유한 모든 DSC를 소각하는 상황을 제외하고, 소각 후에도 담보 비율이 200% 이상을 충족하지 못하면 revert 된다. 즉, 부분적으로 소각했을 때에는 반드시 담보 비율이 200% 이상까지 올라가야 한다.
function burnDsc(uint256 amount) public moreThanZero(amount) {
_burnDsc(amount, msg.sender, msg.sender);
@> _revertIfHealthFactorIsBroken(msg.sender); // I don't think this would ever hit...
}사용자가 200%의 담보 비율을 충족하지는 못하더라도 담보 비율을 높여 청산의 영향을 완화시키고 싶을 수 있다. 하지만 이 설계로 인해 사용자는 이러한 방법을 택할 수 없다.
Impact
사용자가 청산의 영향을 완화시킬 방법이 없다.
Mitigation
burnDsc 함수에서 _revertIfHealthFactorIsBroken를 없애 유저가 200%까지는 아니더라도 담보 비율을 높여 청산의 영향을 완화할 수 있도록 한다.
function burnDsc(uint256 amount) public moreThanZero(amount) {
_burnDsc(amount, msg.sender, msg.sender);
- _revertIfHealthFactorIsBroken(msg.sender); // I don't think this would ever hit...
}tags: bughunting, codehawks, smart contract, solidity, business-logic-vul, severity low