Access control vulnerabilities in disclosed bug bounty reports

The most-paid bug class on most programmes, because a missing modifier is worth whatever the contract holds.

Reports indexed
70
Total paid
$850k
Critical
1
Largest payout
$600k

Access control findings dominate disclosed bug bounty volume, and they are almost never subtle. A privileged function ships without its modifier. An initializer can be called a second time. An upgrade path leaves an implementation contract unowned. A role is granted in a constructor that a proxy never runs.

What makes this class worth studying rather than dismissing is the second tier: the cases where the modifier is present and still wrong. Role checks that verify membership in the wrong registry, signature-gated functions where the signer is recovered but never compared, cross-chain message handlers that check the sender but not the source chain, and admin paths reachable through a delegatecall that resets `msg.sender`.

This category also holds the account-level findings from wallet and infrastructure programmes — key handling, session scoping and permission prompts — where the vulnerable surface is the client rather than the chain.

What reviewers look for

  • Public or external state-changing functions with no modifier
  • Initializers callable more than once, or implementation contracts left uninitialized
  • Signature recovery without a comparison to an expected signer
  • Cross-chain handlers that validate the sender address but not the origin chain
  • `delegatecall` paths where the caller identity is not what the check assumes

Curated highlights

The largest disclosed payouts in this group, with our own summary of each. Every report links back to the original disclosure.

criticalAccess controlSolana-Rust$600k

Missing owner check on Solana instruction lets attacker drain vault

A missing program ownership check in a Solana yield vault protocol allowed unauthorized account spoofing during withdrawal processing. Because the instruction handler accepted an unchecked account and verified only a discriminator byte rather than validating account ownership, an attacker could supply a custom state account with manipulated fields. The protocol trusted the forged state data and generated a Program Derived Address (PDA) signature to execute a token transfer, enabling complete draining of the protocol's vault funds.

Solana Yield VaultimmunefiNov 3, 2022Open
highAccess controlCosmos-SDK$250k

Cosmos SDK module allows unauthorized state migration via missing ante handler check

A logic flaw in a Cosmos SDK module's state migration handler allowed unauthorized signers to execute privileged state updates. The message authority check relied on a helper function that returned true when the authority field was empty, and the message route was incorrectly exposed as a standard transaction rather than being restricted to governance. An attacker could issue state updates with an empty authority field to inject malicious counterparties into the IBC channel allowlist, enabling the execution and processing of forged cross-chain transactions.

IBC App ChainimmunefiDec 5, 2023Open
mediumAccess controlEVM-Solidity$0

PoolTogether: `drawManager` can be set to a malicious address

The PoolTogether PrizePool contract is vulnerable to a front-running attack due to a missing access control modifier on the setDrawManager function. A malicious actor can intercept the initial setup to designate an attacker-controlled address as the draw manager. Because the contract prevents subsequent changes to the draw manager once assigned, this compromise is permanent, granting the attacker perpetual control over critical administrative functions, including the ability to withdraw from the reserve and manipulate prize draw operations.

PoolTogethercode4renaAug 7, 2026Open
highAccess controlEVM-Solidity$0

PoolTogether: `Vault.mintYieldFee` function can be called by anyone to mint `Vault Shares` to any recipient address

The mintYieldFee function in the PoolTogether Vault contract contained a critical access control vulnerability that allowed unauthorized users to steal protocol-accrued yield fees. The function failed to restrict access to authorized callers and incorrectly allowed the sender to specify an arbitrary address to receive minted shares, rather than sending them to the designated protocol address. By exploiting this, an attacker could mint and claim fee shares intended for the protocol, leading to a direct loss of revenue. The flaw was mitigated by removing the user-inputted recipient parameter and forcing the function to use the hardcoded yield fee recipient address.

PoolTogethercode4renaAug 7, 2026Open
mediumAccess controlEVM-Solidity$0

The Wildcat Protocol: Role providers can bypass intended restrictions and lower expiry set by other providers

In Wildcat Protocol's credential management logic, role updating rules were intended to prevent one role provider from reducing the expiry duration set by another provider. However, an authorized role provider can circumvent this restriction via a two-transaction sequence. By first issuing a call to extend the user's role expiry slightly beyond its current timestamp, the calling provider becomes the recorded owner of the credential; subsequent calls by that same provider can then arbitrarily reduce or expire the role.

The Wildcat Protocolcode4renaOct 24, 2024Open
mediumAccess controlEVM-Solidity$0

Superposition: Users can't remove liquidity while a pool is disabled

In Superposition's Seawater pool contract, an emergency pool disable mechanism inadvertently locks user funds. While protocol documentation intended to allow liquidity removal during pool pauses, the internal position update function strictly enforced an active pool state assertion regardless of whether liquidity was being added or removed. Consequently, when a pool is disabled during an emergency, users are blocked from withdrawing their liquidity, temporarily trapping funds.

Superpositioncode4renaOct 18, 2024Open

All reports in this group

Chains where this class shows up

Related vulnerability category pages