MAINNETBETA

aave.com

5.3MODERATEhigh
6 sectionsrun #2
Findings4 critical19 high7 medium
DEPGOVTKNAUDCTR
Last analyzed 3d ago runs

Summary

Aave V3 is the dominant decentralized lending protocol (~$12.5B TVL across 20+ chains) with a core pool that has never been directly exploited and an audit history (OpenZeppelin, Trail of Bits, Certora, Sherlock, ABDK) that few competitors match. That pedigree is cold comfort after April 2026: a KelpDAO LayerZero bridge failure minted unbacked rsETH that Aave accepted as collateral, leaving an estimated ~$124M in unresolved bad debt and cutting TVL from ~$26B to ~$14B. Dependency risk scores 7.5/10—the highest dimension—while guardian multisigs retain veto and pause powers outside normal DAO votes. Overall risk is moderate-elevated at 5.3/10: a mature, heavily audited protocol whose recent losses came from things it listed, configured, or trusted rather than from broken pool math.

Trust Assumptions

Depositors must trust that Chainlink price feeds stay accurate and timely—AaveOracle reads latestAnswer() without on-chain staleness checks—and that risk stewards (Chaos Labs) will not misconfigure CAPO overlays, as happened in March 2026 when a wstETH parameter error triggered ~$26–27M in wrongful liquidations. They must trust collateral issuers' bridge security: Aave listed rsETH without verifying KelpDAO's 1-of-1 LayerZero DVN, inheriting a ~$124M hole when it failed. Users of the official interface must also trust that periphery adapters (ParaSwapRepayAdapter) are as safe as the audited core—they are not; one was exploited for ~$95k in 2024 and remains outside Immunefi bounty scope. Finally, they trust that the 5/9 Governance Guardian and 4/7 Protocol Guardian multisigs use emergency powers responsibly and stay uncompromised, and that the DAO will fairly resolve bad debt rather than socializing losses onto passive depositors.

What Could Go Wrong

A bridged or restaked collateral asset could again mint unbacked tokens off-chain while Aave values it at market price, enabling nine-figure borrows before Protocol Guardians freeze markets—depositors and Umbrella stakers (~$460M coverage, insufficient for rsETH-scale losses) absorb the shortfall. Stale Chainlink feeds or steward misconfiguration could trigger mass wrongful liquidations without a governance vote, repeating the CAPO incident at larger scale. Guardian multisigs could pause markets during volatility (trapping users) or be compromised to veto legitimate governance; meanwhile unaudited ParaSwap periphery contracts retain residual allowance patterns from the August 2024 exploit, and GHO's ~$584M supply faces peg pressure if collateral quality deteriorates further.

Recommendation

Aave core lending is suitable for mainstream assets on Ethereum mainnet with conservative LTV usage, but not a set-and-forget vault—size positions assuming external dependencies fail, not just smart-contract bugs. Avoid or minimize exposure to bridge-wrapped and restaked collateral (rsETH precedent), do not treat Immunefi coverage as protecting UI-layer adapters, and monitor rsETH bad debt resolution, CAPO parameter changes, and any guardian signer rotation. Umbrella stakers, GHO holders, and users on newer chain deployments bear disproportionate tail risk and should keep allocations small until risk-steward guardrails tighten and the ~$124M rsETH shortfall is resolved. Reduce allocation if BGD Labs' departure degrades upgrade review quality or if new collateral listings skip independent bridge audits.

Key Findings (30)

critical
Unverified ACLManager (Ethereum Core Access Control)verification
critical
Unverified Base Pool Proxyverification
critical
rsETH/KelpDAO LayerZero Bridge Collateral Trustcollateral
critical
April 2026 rsETH / KelpDAO Bridge Bad Debt (Unresolved)incident
high
Unverified Governance V3 Core (Ethereum)verification
high
Unverified GranularGuardian (Ethereum)verification
high
Unverified GHO Token (Ethereum)verification
high
Unverified Arbitrum Executor Lvl1verification
high
Unverified Base CrossChainControllerverification
high
Unverified Optimism BridgeExecutor (Legacy)verification
high
Unverified Polygon VotingMachineverification
high
Unverified Avalanche PayloadsControllerverification
high
Governance-Controlled Pool Upgrade Pathupgradability
high
ParaSwap Adapter Residual Allowance Patternperiphery
high
Governance Guardian 5-of-9 multisig with veto powerscentralization
high
Protocol Guardian 4-of-7 can pause markets without governance votecentralization
high
GHO Peg Relies on Collateral Quality and GSM Counterparty Backingpeg
high
rsETH Bad Debt Creates Umbrella Slashing and GHO Socialization Riskbad_debt
high
CAPO Misconfiguration by Risk Steward (Chaos Labs)oracle
high
Chainlink Feeds Without Staleness Validationoracle
high
ParaSwapRepayAdapter V3 exploited while unauditedaudit-gap
high
Periphery ParaSwap adapters excluded from core audit scope and bug bountyaudit-gap
high
March 2026 CAPO Oracle Misconfiguration (wstETH)incident
medium
TransparentUpgradeableProxy for Governance Infrastructureupgradability
medium
Governance V3 Mutual Executor–PayloadsController Ownershipaccess-control
medium
GovernanceGuardian 5/9 Gnosis Safeaccess-control
medium
Cross-Chain Pool Address Inconsistencycross-chain
medium
Legacy L2 BridgeExecutors Alongside CrossChainControllerbridge
medium
Tiered executor timelocks with bounded delay rangetimelock
medium
GranularGuardian splits cross-chain emergency rolescentralization

Analysis Sections

Aave V3 is controlled by on-chain Governance V3 on Ethereum: AAVE/stkAAVE holders vote via VotingMachine portals, approved payloads queue on PayloadsController with tiered Executor timelocks (Level 1 ~1 day, Level 2 ~7 days), and CrossChainController relays execution to 20+ chains. Verified on-chain: GovernanceGuardian Safe is 5-of-9 (0xCe52ab41…), Protocol Guardian is 4-of-7 (0x2CFe3ec4…), Executor_lvl1 owner is PayloadsController and PoolAddressesProvider owner is Executor_lvl1. Residual risks: dual guardian emergency powers, BGD-controlled GranularGuardian/PermissionedPayloadsController paths, risk stewards with delegated parameter authority, legacy BridgeExecutors on some L2s, and Aave Labs holding off-chain product/IP separate from DAO treasury.

Findings (10)

highGovernance Guardian 5-of-9 multisig with veto powers

The GovernanceGuardian at 0xCe52ab41C40575B072A18C9700091Ccbe4A06710 is a Gnosis SafeProxy. On-chain verification confirms threshold 5 and 9 owners (community-elected entities including Certora, DeFi Saver, Balancer, Lido representatives). This Safe can cancel Governance V3 proposals, cancel queued PayloadsController payloads, rescue misconfigured voting portals, and invoke GranularGuardian.solveEmergency on CrossChainController. These are intentional safety valves but constitute centralized veto over DAO-approved actions.

on-chain RPC via Etherscan APIgetThreshold() = 5; getOwners() returns 9 addresses including 0xda5ae43…, 0x4f967430…, 0xbd4dcfa9…, 0x4c30e337…
aave-permissions-bookAave Governance Guardian Ethereum 5/9; onlyGuardian cancelProposal, cancelPayload, solveEmergency.
protocol docsGovernance Guardians can cancel malicious governance proposals under 5/9 multisig.
highProtocol Guardian 4-of-7 can pause markets without governance vote

Separate from the Governance Guardian, the Aave Protocol Guardian Safe (0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa30) is verified on-chain as 4-of-7. It holds EMERGENCY_ADMIN on ACLManager and can call setPoolPause/setReservePause and setReserveFreeze on PoolConfigurator—potentially halting user activity on short multisig notice. Service providers Chaos Labs, LlamaRisk, BGD Labs, Certora, and others are documented signers.

on-chain RPC via Etherscan APIProtocol Guardian Safe getThreshold() = 4
aave-permissions-bookAave Protocol Guardian Ethereum 4/7; onlyEmergencyOrPoolAdmin setPoolPause, setReservePause; EMERGENCY_ADMIN role.
governance forumProtocol Emergency Guardian signers include Chaos Labs, LlamaRisk, BGD Labs, Certora.
mediumTiered executor timelocks with bounded delay range

PayloadsController enforces per-access-level execution delays between MIN_EXECUTION_DELAY (86,400s / 1 day) and MAX_EXECUTION_DELAY (864,000s / 10 days), with payload expiration at EXPIRATION_DELAY (~3,024,000s / 35 days). Level 1 (Executor 0x5300A1a1…) handles routine protocol ops with ~1-day queue; Level 2 (Executor 0x17Dd33Ed…) controls ProxyAdminLong and governance contract upgrades with ~7-day queue per activation docs. Upgrades to PayloadsController itself require the strictest executor level.

smarts.md indexed on-chain readsMIN_EXECUTION_DELAY=86400, MAX_EXECUTION_DELAY=864000, EXPIRATION_DELAY=3024000, guardian=0xCe52ab41…
governance activation planLevel 1 timelock 1 day; Level 2 timelock 7 days mirrored from v2 short/long executors.
contract sourceExecutor.sol: executeTransaction is onlyOwner; owner set to PayloadsController at deployment.
mediumGranularGuardian splits cross-chain emergency roles

GranularGuardian (0x4457cA11…) is not upgradeable and routes CrossChainController emergency functions: BGD address (0xb812d094…) holds RETRY_ROLE for retryEnvelope/retryTransaction; GovernanceGuardian Safe holds SOLVE_EMERGENCY_ROLE for solveEmergency; Executor_lvl1 is DEFAULT_ADMIN for updateGuardian. Contract source is unverified on Etherscan in this workspace, increasing audit opacity despite permissions-book documentation.

aave-permissions-bookGranularGuardian onlyRetryGuardian BGD; onlyEmergencyGuardian Governance Guardian; onlyDefaultAdmin Executor_lvl1.
aave-delivery-infrastructure sourceGranularGuardianAccessControl grants SOLVE_EMERGENCY_ROLE and RETRY_ROLE to distinct guardians.
VERIFICATION_STATUS.mdGranularGuardian 0x4457cA11… marked unverified on Ethereum.
mediumCross-chain execution via PayloadsControllers with legacy bridge executors

Governance V3 routes approved payloads from Ethereum CrossChainController to per-chain PayloadsControllers (e.g., Arbitrum 0x89644CA1…, Base 0x2DC219E7…, Polygon 0x401B5D02…). On-chain verification shows L2 Executor_lvl1 contracts are owned by their local PayloadsController (Arbitrum owner 0x89644ca1…, Polygon 0x401b5d02…). Each L2 also deploys chain-specific GranularGuardian and GovernanceGuardian addresses (e.g., Arbitrum guardian 0x1A0581dd…). Legacy BridgeExecutors (Arbitrum/Polygon/Optimism 0x7d910357…) remain deployed with L2 timelock+guardian cancel paths, creating overlapping governance infrastructure that must stay configuration-aligned.

on-chain RPC via Etherscan APIArbitrum Executor_lvl1 owner=0x89644ca1… (PayloadsController); Polygon Executor_lvl1 owner=0x401b5d02…
aave-address-bookGovernanceV3Arbitrum: separate PAYLOADS_CONTROLLER, GRANULAR_GUARDIAN, GOVERNANCE_GUARDIAN, EXECUTOR_LVL_1.
contract sourceArbitrumBridgeExecutor: guardian can cancel queued actions; onlyEthereumGovernanceExecutor can queue via L1 alias.
mediumRisk stewards hold delegated parameter authority

Beyond governance votes, Chaos Labs and other stewards can adjust caps, rates, and oracle configurations within bounded roles (e.g., PoolConfigurator onlyRiskOrPoolAdmins). The March 2026 CAPO misconfiguration for wstETH triggered wrongful liquidations, demonstrating that steward errors can cause user harm without a full DAO vote. Stewards are service providers, not on-chain elected entities.

aave-permissions-bookupdateReserveCaps, updateRiskParameters executable by Governance and Steward roles.
discovery incidentsChaos Labs CAPO misconfiguration Mar 2026 caused ~$862k-$27M wrongful liquidations depending on source.
mediumBGD-controlled PermissionedPayloadsController parallel path

A separate PermissionedPayloadsController (0xF86F77F7…) with BGD as guardian and AFC as payloads manager can create/cancel payloads and set execution delays outside the standard permissionless PayloadsController flow. While scoped to operational/maintenance actions, this is a non-DAO-controlled execution lane that bypasses community proposal requirements for its permitted actions.

aave-permissions-bookPermissionedPayloadsController onlyPayloadsManager AFC createPayload; onlyGuardian BGD setExecutionDelay, cancelPayload.
mediumKey governance proxy implementations unverified on block explorers

In the fetched contract set, Governance V3 core proxy (0x9AEE0B04…), GranularGuardian (0x4457cA11…), and ACLManager on several chains lack verified source on Etherscan. Proxy shells (PayloadsController, CrossChainController) are verified but implementation logic requires trust in off-chain audits and permissions-book mappings. Adversarial reviewers cannot fully audit bytecode from explorers alone.

VERIFICATION_STATUS.md10/43 contracts unverified including Governance V3 Core, GranularGuardian, ACLManager (Ethereum), several L2 ACL admins.
contract file0x9aee0b04… and 0x4457ca11… files contain 'source NOT VERIFIED' stubs.
lowAave Labs vs Aave DAO: off-chain product layer tension

On-chain control rests with Aave DAO (Governance V3, treasury Collector, service-provider mandates). Aave Labs (founder Stani Kulechov) historically developed the protocol and operates the aave.com frontend/product layer; brand, IP, and frontend routing are not fully on-chain and have been subject to community debate. No Aave Labs EOA or contract appears as owner of core pool/governance contracts—Labs influence is off-chain via product and historical reputation, not direct admin keys.

discovery.json entitiesAave Labs: original developer, operates aave.com frontend; Aave DAO: protocol governance and treasury.
on-chain RPC via Etherscan APIPoolAddressesProvider owner = Executor_lvl1 (DAO-controlled), not Aave Labs address.
infoGovernance V3 hub-and-spoke architecture

Ethereum hosts the Governance V3 core (0x9AEE0B04…), PayloadsController (0xdAbad81…), VotingMachine (0x06a1795a…), and CrossChainController (0xEd42a7D8…). Proposals are created on Ethereum, voted via storage-proof VotingMachines (Ethereum, Polygon, Avalanche portals), and execution payloads are registered per chain then queued through PayloadsControllers. Executor contracts are immutable Ownable executors; PayloadsController is the sole owner of Executor_lvl1/2 and invokes executeTransaction after timelock expiry.

aave-governance-v3 docsCore Network settlement on Ethereum; Voting Networks via storage proofs; Execution Networks via PayloadsController timelock.
on-chain RPC via Etherscan APIExecutor_lvl1 (0x5300A1a1…) owner() = PayloadsController (0xdabad81…); PoolAddressesProvider owner() = Executor_lvl1.
aave-permissions-bookExecutor_lvl1 onlyOwner PayloadsController executeTransaction; Executor_lvl2 controls ProxyAdminLong upgrades.

Governance Checklist

On-chain DAO governance (Governance V3)AAVE/stkAAVE voting on Ethereum with cross-chain execution
Multisig guardians (not single EOA)Governance Guardian 5/9; Protocol Guardian 4/7 — verified on-chain
Timelock on executor actionsPayloadsController queues 1–10 day delays (Level 1 ~1d, Level 2 ~7d)
Guardian veto / emergency pause powersGuardians can cancel payloads/proposals and pause markets
Cross-chain governance parityPer-chain PayloadsControllers + legacy BridgeExecutors; separate L2 guardian addresses
All core contracts verified on explorersGov V3 impl, GranularGuardian, ACLManager unverified in fetched set
No parallel non-DAO execution pathsPermissionedPayloadsController (BGD/AFC) for scoped ops

Guardian Multisigs (Ethereum, verified on-chain)

RoleAddressThresholdKey powers
Governance Guardian0xCe52ab41C40575B072A18C9700091Ccbe4A067105 / 9cancelProposal, cancelPayload, solveEmergency (cross-chain)
Protocol Guardian0x2CFe3ec4d5a6811f4B8067F0DE7e47DfA938Aa304 / 7setPoolPause, setReservePause, setReserveFreeze
GranularGuardian0x4457cA11E90f416Cc1D3a8E1cA41C0cdEcC251d4Role-basedRETRY (BGD), SOLVE_EMERGENCY (Gov Guardian), admin (Executor_lvl1)

Governance V3 Execution Hierarchy (Ethereum)

contractethereumAaveGovernanceV3 Core
contractethereumPayloadsController
contractethereumExecutor Level 1
contractethereumExecutor Level 2
contractethereumCrossChainController
contractethereumVotingMachine

Key Governance Parameters

Governance Guardian threshold
5 / 9
Protocol Guardian threshold
4 / 7
Min payload execution delay
86400seconds (1 day)
Max payload execution delay
864000seconds (10 days)
Payload expiration
3024000seconds (~35 days)
Chains with PayloadsController
20+
Loading dependency graph…