codehawks-2023-08-sparkn-l01
[L-01] If a winner is blacklisted on any of the tokens they can’t receive their funds
Summary
유저가 토큰 블락리스트에 올라 리워드를 분배할 수 없는 문제가 발생할 수 있다.
Keyword
blocklisting token, erc20, asset lock
Vulnerability
Sparkn 프로토콜은 일반적인 스테이블 토큰을 이용한다. 특히 USDC, DAI, USDT, JPYC를 이용한다 언급했다. 이 중 USDC와 USDT는 토큰이 자체적으로 블락리스트를 가지고 있다.
만약 리워드를 받아야 하는 유저 중 블락리스트에 오른 유저가 있다면 리워드 분배가 불가할 것이다.
리워드 대상자는 오프체인으로 결정하므로 단순히 이들을 제외하고 재분배해도 되지만, 블락리스트에 오른 유저가 리워드 대상에서 제외되었으므로 불공정하다. 또한 분배 비율도 다시 설정해야 한다.
Impact
블락리스트 유저때문에 리워드를 분배할 수 없게 되거나, 블락리스트에 올랐다는 이유만으로 빠지게 되어 불공정하다.
Mitigation
Pull over push 패턴으로 구현한다. Pull over push 패턴이란 토큰을 직접 전송해주는 게 아니라 유저가 자신의 리워드를 받기 위해 함수를 호출해 끌어가는 방식이다.
tags: bughunting, sparkn, smart contract, solidity, blocklisting token, erc20, asset lock, dos, pull over push, severity low