Lido DG

CertoraCode version: not recorded (see the report)

Audit · firm’s term: security assessment · Includes formal verification

Certora reviewed Lido (Lido DG) on 5 Feb 2025: 23 findings, 2 critical; 22 marked fixed, 1 acknowledged.

2 critical findings, fixed
Open the reportOpen Lido’s security record

Report hosted on GitHub.

Trustblock does not review code.

Findings23

Statuses are the security firm’s own, from its report.

SeverityOpenAcknowledgedFixed
Critical002
High006
Medium0110
Low004
CriticalDOS on Proposers.sol::unregister due to the last proposer's ExecutorData not getting updatedFixed

The report gives no description here.

CriticalEvading the RageQuit's second sealFixed

The report gives no description here.

HighcancelAllPendingProposals() is callable in any stateFixed

The report gives no description here.

HighgetVetoerState() doesn't return the right unstETHLockedShares valueFixed

The report gives no description here.

HighGriefing _batchesQueue.close()Fixed

The report gives no description here.

HighRageQuit can fail to start even after the threshold have passed by frontrunFixed

The report gives no description here.

HighRageQuit is DOS-d if the minimum amount of stEth to withdraw is 0Fixed

The report gives no description here.

HightieBreakerResumeSealable has no call to activateNextState before checking for a tieFixed

The report gives no description here.

MediumcancelAllPendingProposals does not trigger a state transitionFixed

The report gives no description here.

MediumFront loading non-existing proposalsFixed

The report gives no description here.

Show 10 more
MediumHashConsensus.scheduledAt is not updated when the user changes their vote from true to false to trueFixed

The report gives no description here.

MediumLack of access control for TiebreakerSubCommittee.seala bleResumeFixed

The report gives no description here.

MediumOverride proposal statusFixed

The report gives no description here.

MediumQuorum change with pending votesFixed

The report gives no description here.

MediumrequestWithdrawals() can be called whenRageQuit should have startedFixed

The report gives no description here.

MediumState transition to RageQuit isn’t persisted when it should beFixed

The report gives no description here.

MediumtieBreakerScheduleProposal does not trigger a state transition which will lead to wrong state post executionFixed

The report gives no description here.

Mediumuint256 rageQuitRound = Math.min(self.rageQuitRound + 1, type(uint8).max); will revert when self.rageQuitRound == type(uint8).maxFixed

The report gives no description here.

LowlastAssetsLockTimestamp is updated even though unstEthIds = [ ]Fixed

The report gives no description here.

LowremoveSealableWithdrawalBloc ker does not return a boolean or revert when failing to removeFixed

The report gives no description here.

Show 2 more
LowSealableCalls.sol.callResume() isPaused flag is wrongFixed

The report gives no description here.

LowwithdrawETH is callable with unstEthIds = [ ]Fixed

The report gives no description here.

Contracts in scope

No deployed address is recorded for this audit.

The report names a repository or files. Open the report to see its scope.

Part of Lido’s security record

Lido
Audits54 audits by 13 firmsLast audit Sep 2026, by Composable Security.
Critical findings2 criticals acknowledged, not fixedReported in 2 reports, the latest by Statemind, Apr 2023. The team acknowledged both.
Open Lido’s security record

Security firm

Certora

9 projects reviewed · 17 reports · latest Jun 2026

See Certora’s audits

Something wrong on this page? A missing report, a wrong date, a finding that was fixed since. Tell us and we check it against its source.

Tell us