sherlock-2025-07-mellow-m01
[M-01] Flawed Logic in ShareManager Inverts Transfer Whitelist Behavior
Summary
ShareManager에 TransferWhitelist 플래그를 설정하면 토큰을 보내고 받는 계정 모두 허용리스트일때만 토큰을 전송할 수 있게 제한해야 한다. 하지만 조건을 잘못 확인하여 허용리스트가 아닌 계정이 토큰을 전송할 수 있다.
Keyword
logic flaw, allowlist
Vulnerability
ShareManager에 TransferWhitelist 플래그를 설정하면 토큰을 보내고 받는 계정 모두 허용리스트일 때만 토큰을 전송할 수 있게 제한한다. 그런데 info.canTransfer를 잘못 확인하여 토큰을 보내는 이가 허용리스트가 아닐 때에도 토큰을 전송할 수 있다.
function updateChecks(address from, address to) public view {
...
if (from != address(0)) {
...
if (to != address(0)) {
if (flags_.hasTransferPause()) {
revert TransferPaused();
}
@> if (flags_.hasTransferWhitelist()) {
@> if (info.canTransfer || !$.accounts[to].canTransfer) {
revert TransferNotAllowed(from, to);
}
}
}
...
}
...
}Impact
TransferWhitelist 플래그가 설정되어도 허용리스트가 아닌 계정이 토큰을 전송할 수 있음
Mitigation
if (flags_.hasTransferWhitelist()) {
- if (info.canTransfer || !$.accounts[to].canTransfer) {
+ if (!info.canTransfer || !$.accounts[to].canTransfer) {
revert TransferNotAllowed(from, to);
}
}tags: bughunting, mellow, smart contract, solidity, severity medium, logic flaw, allowlist