sherlock-2025-06-symbiotic-relay-m07
[M-07] A malicious operator will control consensus without risking stake (stake-exit lag exploit)
Summary
커밋은 밸리데이터의 선정과 커밋 두 단계에 거쳐 이루어진다. 밸리데이터로 선정된 후에 언스테이킹해도 여전히 투표권을 유지하므로, 악성 밸리데이터는 슬래시의 위험 없이 활동할 수 있다.
Keyword
consensus bypass, slash bypass, business logic vul
Vulnerability
Settlement 컨트랙트는 setSigVerifier 와 commitValSetHeader 두 과정을 거쳐 커밋을 한다. setSigVerifier 는 관리자가 활동할 밸리데이터를 선정하는 함수이고, commitValSetHeader 는 밸리데이터가 활동하여 커밋을 하는 함수이다. 등록과 활동 사이에 갭이 존재하므로, 등록된 후 언스테이킹한 밸리데이터가 여전히 이번 Epoch에 활동할 수 있다.
- Epoch 1
- 악성 밸리데이터가 자신의 금고에 대량의 스테이킹을 하여 정족수 임계값보다 많은 투표권을 얻는다.
- 오프체인 릴레이는
setSigVerifier를 호출하여 악성 밸리데이터를 등록한다. - Epoch 종료 직전, 악성 밸리데이터는
withdraw를 호출하여 언스테이킹을 시작한다.
- Epoch 2
- 악성 밸리데이터가
claim을 호출하여 언스테이킹을 완료한다. - 토큰을 인출했음에도 악성 밸리데이터의 투표권은 활성 상태로 유지된다.
- 악성 밸리데이터가
commitValSetHeader에 서명을 제출하여 슬래시의 위험 없이 컨센서스를 통제할 수 있다.
- 악성 밸리데이터가
Impact
밸리데이터가 스테이킹을 제거했음에도 Voting power를 유지할 수 있음. 슬래시의 위험 없이 컨센서스를 통제할 수 있다.
Mitigation
Verifier의 선정과 Commit 작업을 원자적으로 처리하는 함수를 추가한다.
Memo
언스테이킹한 밸리데이터가 이미 Verifier로 등록되어 있다면 여전히 행동을 허용하는 것은 의도된 구현이라고 하였다. 하지만 이로 인해 패널티를 피할 수 있다는 점은 유효하게 보았다. Voting power가 정족수를 넘지 않는다면 심각도가 약해지므로 Medium으로 판정하였다.
tags: bughunting, symbiotic, smart contract, solidity, restaking, staking, severity medium, consensus, business-logic-vul