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