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 컨트랙트는 setSigVerifiercommitValSetHeader 두 과정을 거쳐 커밋을 한다. 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