Notes / Findings

Cross-ecosystem finding (2026-09-17): Aave V3's emergency guardian is the SAME 9-person committee on Arbitrum and Base

Findings2026-09-17Chain: Ethereum, Base, Arbitrum, Robinhood Chain

Source: data/finding_2026-09-17-cross-ecosystem-aave-guardian-overlap.md in the repository, rendered here without changes. Source file

What this closes#

This project's own README (SolGov comparison, point 3) states its differentiator against every existing risk tool -- including its own closest precedent, SolGov -- is checking whether the same key sits behind two protocols tracked as independent: "SolGov's columns are all per-protocol; it never checks whether the same key sits behind two protocols it lists as independent." Until today, this project's own crossExposureScore had the identical limitation one level up: every non-Robinhood-Chain ecosystem (Ethereum L1, Arbitrum, Base) published a flat crossExposureScore = 100 for every target, explicitly disclosed as "not computed this pass -- no cross-ecosystem signer-overlap dataset exists yet" (scripts/lib/cross_ecosystem_overlap.py's own _CROSS_EXPOSURE_NOTE). The infrastructure to check existed (scripts/lib/cross_ecosystem_overlap.py, scripts/check_cross_ecosystem_overlap.py) but had never been extended to Arbitrum (added as a scored ecosystem after this module was first written) and had gone stale for Ethereum L1 (its own "ethena" group only listed 1 of the 5 targets this project tracks under that Safe as of today) and Base (missing a known local guardian Safe its own scorer already reads the address of, just never resolved the owners of).

What was found#

Extending the module to include Arbitrum for the first time, updating Ethereum L1's stale group, adding Base's missing guardian group, and re-running the full live check (33 groups across 4 EVM ecosystems: 23 Robinhood Chain, 3 Ethereum L1, 4 Arbitrum, 3 Base) found exactly one real cross-ecosystem overlap:

Arbitrum's and Base's Aave V3 GOVERNANCE_GUARDIAN Safes -- the committee that can cancel a governance payload outside the normal timelock delay on each chain -- share the EXACT SAME 9 owner addresses, at 5-of-9 threshold, at two different Safe addresses:

ChainSafe addressThresholdOwners
Arbitrum0x1A05…973b5-of-90xDA5Ae43e..., 0x1e380435..., 0x4f967430..., 0xebED04E9..., 0xbd4DCfA9..., 0xA3103D0E..., 0x936CD965..., 0x0D2394C0..., 0x4C30E337...
Base0x360c…bcFe5-of-9(identical set, same order)

Zero other overlaps were found anywhere else in the 33 groups checked -- not within Robinhood Chain's own 23 groups (already known, re-confirmed), not between Robinhood Chain and any of the other 3 ecosystems, not between Ethereum L1's expanded Ethena group (now correctly covering all 5 Safe-governed targets) and anything else, not among Arbitrum's other three groups (GMX, Camelot, the Arbitrum Security Council itself), and critically not between Ethereum L1's own Aave PROTOCOL_GUARDIAN Safe (4-of-7, 0x2CFe…Aa30) and the Arbitrum/Base committee -- confirmed live to share zero signers, a genuinely separate, older, mainnet-only governance body.

No identical Safe address was found across ecosystems (the find_identical_safe_addresses check, distinct from and stronger than a signer-overlap check) -- this is signer-level overlap at two different addresses, the CREATE2-redeployed-with-same-owner-set pattern, not a literal cross-chain address collision.

Why this matters#

This is exactly the pattern this project's own cited sister research, multisig-overlap, documented for ether.fi, Curve, Aave V3 and others: a protocol that looks diversified because it's deployed on two "independent" chains is not diversified against key compromise at all if the same human committee holds the emergency-override key on both. Found here, for the first time, in this project's own live tracked targets -- not cited from that sister research, independently re-derived.

Concretely: a GOVERNANCE_GUARDIAN compromise (9 signers, 5 needed) does not just let an attacker cancel a pending Arbitrum governance payload -- the same 5-of-9 compromise cancels a pending Base payload too. Two chains' "defense in depth" against a malicious or stalled governance proposal collapses to one shared point of failure.

What changed in the code#

What this does NOT do#

Reproduction#

python3 scripts/check_cross_ecosystem_overlap.py

CORRECTION (2026-09-20): the L1 PROTOCOL_GUARDIAN committee is not "mainnet-only"#

This document (and scripts/lib/cross_ecosystem_overlap.py) treated Ethereum L1's Aave PROTOCOL_GUARDIAN (4-of-7, zero overlap with the 9-signer committee above, which is still correct) as a mainnet-only body. Read live on all five chains, the Safe holding isEmergencyAdmin on each Aave ACLManager (Ethereum L1, Arbitrum, Base, Plasma, Monad) is a 4-of-7 Safe with the IDENTICAL 7 owners, at a different Safe address per chain. On Monad the same Safe also holds isPoolAdmin. See data/finding_2026-09-20-unscored-role-sweep.md section 1.

UPDATE (2026-09-20): the convention is decided, and two statements above are stale#

Not an audit, not investment advice. All notes · Back to the dashboard.