MAINNETBETA

pendle.finance

5.7MODERATEhigh
6 sectionsrun #1
Findings2 critical9 high19 medium
DEPGOVTKNAUDCTR
Last analyzed 15d ago runs

Summary

Pendle Finance is a yield-trading protocol with roughly $1.15B TVL across 11 chains, tokenizing future yield into Principal Tokens (PT) and Yield Tokens (YT) traded on a custom AMM. It has operated since 2021 with no confirmed direct smart-contract exploit, supported by 15+ audits and $2.5M in active Cantina bug bounties. The main concerns are 45% unverified contracts, a 3-of-5 multisig that can upgrade core logic without timelock, and permissionless market creation that enabled the $27M Penpie ecosystem loss in September 2024. Overall risk is medium-high at 5.7/10.

Trust Assumptions

Users trust that the 3-of-5 governance multisig (0x8119…ee1) will not abuse immediate upgrade authority over ProxyAdmin, PendleRouterV4, and core factories. Depositors assume unverified bytecode for sPENDLE (~33M supply) and ProxyAdmin matches audited logic, that permissionless SY adapters and markets they interact with are sound, and that LayerZero cross-chain messaging delivers timely, accurate PT exchange rates. Integrators relying on Pendle's internal AMM TWAP oracles must trust those prices cannot be manipulated within observation windows.

What Could Go Wrong

A compromised 3-of-5 multisig could swap core contract implementations instantly via ProxyAdmin—no timelock—potentially affecting the full $1.15B TVL before users can react. A malicious or defective permissionless SY adapter could poison exchangeRate() pricing across markets and cross-chain oracles, repeating the Penpie pattern where a fake market enabled a $27M third-party loss. The Optimism PT OFT Adapter Factory is controlled by a single EOA (Core Deployer), so key compromise could reconfigure cross-chain PT bridging on that chain; combined with LayerZero latency and no Chainlink fallback, stale rates could cause mispriced liquidations on spoke chains.

Recommendation

Pendle is suitable for moderate capital allocation given its five-year track record, strong audit discipline, and demonstrated crisis response—the team paused all contracts within one hour during Penpie and reportedly protected $70–105M in downstream TVL. Actively monitor governance multisig transactions (especially ProxyAdmin upgrades and router facet remaps), verification status of the 18 unverified contracts, and any new permissionless markets or SY adapters before depositing. Consider reducing exposure if upgrade timelocks are not implemented, the Optimism EOA factory is not migrated to multisig control, or large vePENDLE unlocks (~64.6M PENDLE, 23% of supply) accelerate selling during the sPENDLE migration.

Key Findings (30)

critical
18 Unverified Contracts Across Core Infrastructureverification
critical
Optimism PT OFT Factory Controlled by EOAaccess-control
high
Unverified ProxyAdmin Controls Core Upgradeable Proxiesupgradability
high
sPENDLE Token Bytecode Unverifiedverification
high
YieldContractFactoryV6 Implementation Unverified on Ethereumverification
high
Cross-Chain Bridge and Oracle Stack Unverified on Ethereumverification
high
No Timelock on Proxy Upgradesupgradability
high
No Timelock on Admin Actions or Upgradestimelock
high
Cross-Chain Governance Threshold Asymmetry on Optimismcross-chain
high
Per-Asset SY Adapter Contagionprotocol
high
Penpie Third-Party Exploit — Sep 2024 ($27M)ecosystem
medium
Cross-Chain Governance Threshold Divergenceaccess-control
medium
Secondary Governance Proxy Controls MarketFactory and GaugeControllerupgradability
medium
PendleRouterV4 Diamond Pattern with Governance-Controlled Facetsarchitecture
medium
Permissionless Market and SY Creationarchitecture
medium
Unverified Deployments on Plasma and HyperEVMverification
medium
Bridge Factory Controlled by Weaker Dev Multisigcentralization
medium
Dual Governance Architecture Increases Operational Riskcentralization
medium
LayerZero Endpoint Owners Are LZ Delegate Contractsdependency
medium
Guardian Role Enables Emergency Pauseemergency
medium
vePENDLE Wind-Down Creates Unlock Overhangunlock_pressure
medium
Multisig Controls On-Chain Emission Updatesgovernance
medium
LayerZero Cross-Chain PT Dependencybridge
medium
Cross-Chain Exchange Rate Oracle via LayerZero V2oracle
medium
Internal AMM TWAP Oracles — No External Price Fallbackoracle
medium
LayerZero V1 Sender Endpoint Controls Message Routingbridge
medium
Derived SY Adapters Out of Audit Scopeaudit-gap
medium
Cross-Chain PT Infrastructure Largely Unauditedaudit-gap
medium
Boros Margin Math Insolvency Risk Unresolvedaudit-finding
medium
CPIMP Proxy Attack — Jul 2025 (Small Fund Loss)incident

Analysis Sections

Pendle is controlled by Gnosis Safe multisigs, not on-chain DAO voting. Ethereum mainnet governance is a 3-of-5 Safe (0x8119…ee1) that owns PENDLE, Router, ProxyAdmin, and several factories; a PendleGovernanceProxy (0x2aD6…f31e, same address on all chains) holds DEFAULT_ADMIN over MarketFactory, GaugeController, and LimitRouter per verified initialize() source. A separate 2-of-5 Dev Multisig (0xE6F0…cb1) owns PT OFT Adapter Factory and Arbitrum bridge factories. No timelock was found on upgrades. Cross-chain governance is asymmetric: Optimism uses a weaker 2-of-4 Safe while other chains use 3-of-5. LayerZero endpoint owners are LZ delegate contracts, not Pendle multisigs.

Findings (8)

highNo Timelock on Admin Actions or Upgrades

On-chain verification found no TimelockController or delay mechanism on ProxyAdmin, PendleGovernanceProxy (UUPS), or core factory proxies. The 3-of-5 governance multisig can execute upgrades, parameter changes, and batched admin calls via PendleGovernanceProxy.aggregate() immediately. PENDLE token config changes have a 7-day delay, but contract upgrades do not.

on-chain RPCProxyAdmin.owner() = 0x8119ec16f0573b7dac7c0cb94eb504fb32456ee1; getMinDelay() on candidate timelock addresses reverts; PendleGovernanceProxy._authorizeUpgrade uses onlyAdmin with no delay
verified contract source (Etherscan)PendleGovernanceProxy: function aggregate(Call[] calldata calls) external payable onlyAdmin; function _authorizeUpgrade(address) internal view override onlyAdmin
highCross-Chain Governance Threshold Asymmetry on Optimism

Per-chain Gnosis Safe governance proxies use different signer sets and thresholds. Optimism governance Safe (0xa06C863fcf17cA6f24AA81aeA75E23953193fF6A) is 2-of-4, while Ethereum (0x8119…ee1), Arbitrum/Base (0x7877…75Ac), and BSC (0xA066…a9Ec) are 3-of-5 with overlapping signer sets. Optimism is the weakest governance link for chain-specific actions.

on-chain RPCethereum 0x8119…ee1: getThreshold()=3, 5 owners; arbitrum/base 0x7877…75Ac: getThreshold()=3, 5 owners (same signer set); optimism 0xa06c…ff6a: getThreshold()=2, 4 owners; bsc 0xa066…a9ec: getThreshold()=3, 5 owners
GitHub deployments1-core.json governance=0x8119…; 42161/8453 governance=0x7877…; 10-core.json governance=0xa06C…; 56-core.json governance=0xA066…
mediumBridge Factory Controlled by Weaker Dev Multisig

PT OFT Adapter Factory on Ethereum (0x905aF80C4DE82E0075a19fDE2f5777f1A6636732) and Arbitrum (0x4F215b3F8a6E056Ff293E6818F3f501B5F4787D7) report owner() as the Dev Multisig (0xE6F0489ED91dc27f40f9dbe8f81fccbFC16b9cb1), a 2-of-5 Safe — not the main 3-of-5 governance Safe. Cross-chain PT bridging configuration can be changed with a lower threshold than core protocol upgrades.

on-chain RPCPT OFT Adapter Factory owner() = 0xe6f0489ed91dc27f40f9dbe8f81fccbfc16b9cb1; Dev Multisig getThreshold()=2, getOwners() returns 5 addresses
mediumDual Governance Architecture Increases Operational Risk

Pendle uses two control layers: (1) direct 3-of-5 multisig ownership of PENDLE token, PendleRouterV4, ProxyAdmin, SYFactory, YieldContractFactoryV6, and SenderEndpoint; (2) PendleGovernanceProxy (AccessControl + UUPS) as owner of MarketFactoryV6, GaugeController, and LimitRouter on all chains. Deployment config initializes GovernanceProxy with the main governance Safe as DEFAULT_ADMIN. This split increases the attack surface and operational complexity versus a single governance path.

on-chain RPCMarketFactoryV6.owner()=0x2ad631…f31e; PENDLE.governance()=0x8119…ee1; Router.owner()=0x8119…ee1; ProxyAdmin.owner()=0x8119…ee1
verified contract source (Etherscan)initialize(address governance) { _grantRole(DEFAULT_ADMIN_ROLE, governance); }
GitHub deployments/1-core.jsongovernance: 0x8119EC16F0573B7dAc7C0CB94EB504FB32456ee1, governanceProxy: 0x2aD631F72fB16d91c4953A7f4260A97C2fE2f31e
mediumLayerZero Endpoint Owners Are LZ Delegate Contracts

LayerZero Endpoint contracts on Ethereum, Arbitrum, and Base report owner() as chain-specific LZ delegate contracts (~14KB bytecode, nonce 507 on Ethereum), not Pendle multisigs. Pendle cannot unilaterally upgrade or reconfigure the underlying LZ endpoint; cross-chain PT bridging depends on LayerZero infrastructure governance.

on-chain RPCethereum LZ Endpoint owner=0xbe010a7e3686fdf65e93344ab664d065a0b02478; arbitrum owner=0x9a3ce220d17a92dd4df9766cee48fdd0c448ba4f; base owner=0xa0392d116d71ed3b75086194aba6de3cd1e39b7e; getOwners() reverts (not Gnosis Safe)
mediumGuardian Role Enables Emergency Pause

PendleGovernanceProxy defines a GUARDIAN role (AccessControl) with pause(address[]) capability on any IPPausingInterface contract. GUARDIAN or DEFAULT_ADMIN can invoke pause. This is an appropriate emergency lever but concentrates pause power in multisig-controlled roles without public timelock oversight.

verified contract source (Etherscan)modifier onlyGuardian() { require(hasRole(GUARDIAN, msg.sender) || hasRole(DEFAULT_ADMIN_ROLE, msg.sender)); } function pause(address[] calldata addrs) external onlyGuardian
lowCore Deployer Is an EOA

The Core Deployer address (0x1FcCC097db89A86Bfc474A1028F93958295b1Fb7) has no contract code on Ethereum (EOA). It deployed PendleGovernanceProxy via CREATE2 factory in Aug 2024. While not currently an on-chain admin of live contracts, EOA deployer keys represent deployment-time key-person risk.

on-chain RPCeth_getCode(0x1fccc097db89a86bfc474a1028f93958295b1fb7) returns 0x (EOA)
Etherscan contract creation APIGovernanceProxy 0x2ad631… created by 0x1fccc097… via factory 0xe84d36a8…
infoDocumentation Claims Do Not Match On-Chain Multisig Parameters

Third-party sources and discovery notes reference a 2-of-4 multisig. On-chain verification shows Ethereum main governance is 3-of-5 (nonce 800+), Dev Multisig is 2-of-5, and only Optimism matches a 2-of-N pattern (2-of-4). Users relying on docs may underestimate mainnet quorum requirements.

on-chain RPC0x8119…ee1 getThreshold()=3, 5 owners; 0xe6f0489…cb1 getThreshold()=2, 5 owners
protocol docs / third-partyExponential.fi and OAK Research describe 2/4 multisig control

Governance Checklist

Multisig (not EOA) for core governanceEthereum 3-of-5 Gnosis Safe at 0x8119…ee1
Timelock on upgradesNo timelock found; ProxyAdmin and UUPS upgrades are immediate
On-chain token voting (DAO)PENDLE has vote delegation but no Governor contract; multisig controls parameters
Consistent cross-chain governanceOptimism 2-of-4 vs 3-of-5 elsewhere; per-chain Safe addresses differ
Bridge contracts under main governancePT OFT Factory owned by 2-of-5 Dev Multisig; LZ endpoints owned by LZ delegates
Emergency pause capabilityPendleGovernanceProxy GUARDIAN role can pause contracts

Verified Multisig Parameters

ChainRoleAddressThresholdSigners
EthereumMain Governance0x8119EC16F0573B7dAc7C0CB94EB504FB32456ee13 / 50x231fC5…, 0x7bd456…, 0x9ce6de…, 0x38ab4a…, 0xf51736…
EthereumDev Multisig0xE6F0489ED91dc27f40f9dbe8f81fccbFC16b9cb12 / 50x806c8c…, 0xe397e6…, 0xf51736…, 0xe81b32…, 0x231fC5…
ArbitrumChain Governance0x7877AdFaDEd756f3248a0EBfe8Ac2E2eF87b75Ac3 / 5Same 5 signers as Ethereum main
BaseChain Governance0x7877AdFaDEd756f3248a0EBfe8Ac2E2eF87b75Ac3 / 5Same 5 signers as Ethereum main
OptimismChain Governance0xa06C863fcf17cA6f24AA81aeA75E23953193fF6A2 / 40xf51736…, 0x9ce6de…, 0x38ab4a…, 0x7bd456…
BSCChain Governance0xA06627d9884996BC27a7c20fDA94FC94C13aa9Ec3 / 5Same 5 signers as Ethereum main

Core Contract Ownership (Ethereum)

multisigethereumMain Governance Safe (3/5)
governance-proxymultiPendleGovernanceProxy (UUPS)
multisigethereumDev Multisig (2/5)