function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2
require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded
sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale");
reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED);
merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds
flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check
require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1)
assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor();
IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338)
- cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only
mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner);
uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000
[PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external {
prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy");
+ require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17
forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap)
function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2
require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded
sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale");
reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED);
merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds
flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check
require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1)
assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor();
IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338)
- cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only
mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner);
uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000
function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2
require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded
sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale");
reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED);
merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds
flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check
require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1)
assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor();
IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338)
- cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only
mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner);
uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000
[PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external {
prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy");
+ require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17
forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap)
function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2
require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded
sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale");
reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED);
merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds
flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338) · - cf = reserve.collateralFactor; // no freshness check
require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only · mediation: MODIFY -> severity = CRITICAL (IMP-C1)
assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner); · uint256 cf = reserve.freshCollateralFactor();
IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000 · [PASS] test_exploit_drainsHealthyPosition() (gas: 412338)
- cf = reserve.collateralFactor; // no freshness check · require(cf.updatedAt > block.timestamp - 1 hours, "stale"); · reward = min(max(pct * fundsAtRisk, floor), cap) · function liquidate(address v, uint256 id) external { · prevHash <- headHash // append-only
mediation: MODIFY -> severity = CRITICAL (IMP-C1) · assert(obligation.ownershipTransferState == APPROVED); · merkleRoot = H(H(e1,e2), H(e3,e4)) // head 9c41e0…a7d2 · require(healthFactor(v) < 1e18, "healthy"); · + require(msg.sender == pendingOwner);
uint256 cf = reserve.freshCollateralFactor(); · IMP-C1 Critical direct theft of user funds · flashLoan(amount); _reenter(); _settle(); // guarded · sha256(payload) = 3f9a2b7c…c21e // event #17 · forge test --match-contract Vault --fuzz-runs 50000
Bug bounty programs
Explore bounties
Each program shows its locked rulebook version, how it's funded, and how it has actually behaved. Median response times, SLA compliance and mediation reversals are computed from real case events.
- Total bounties available
- $0
- Paid to researchers
- $0
- Verified disclosures
- 0
- Researchers
- 0
Top programs by reward
Program
Max bounty
Payout assurance
Median response
Rules updated
Tidal Bridge
BridgeEthereumOptimismBase+1
$2,500,000
No payouts yet
Partially funded
$800K reserve
1.5h ack
100% within SLA
v1 · May 8, 2026
Quanta Oracle
OracleEthereumSolana
$1,000,000
$100K paid
Payment guarantee
$1M reserve
2.5h ack
100% within SLA
v1 · Jun 7, 2026
Helix FinanceSafe Harbor
LendingBESC HyperchainEthereumArbitrum
$1,000,000
$210K paid
Payment guarantee
$1.5M reserve
4.0h ack
100% within SLA
v3 · 12d ago
Orbit Exchange
DEXBESC HyperchainEthereumBase
$500,000
$5K paid
Funded
$600K reserve
6.0h ack
100% within SLA
v1 · May 18, 2026
Lumen Staking
Liquid StakingBESC HyperchainEthereum
$300,000
No payouts yet
Funded
$400K reserve
— ack
No data yet
v1 · Jun 17, 2026
Nimbus WalletKYC
WalletBESC HyperchainEthereumPolygon
$100,000
No payouts yet
Unfunded
24.0h ack
100% within SLA
v1 · May 28, 2026
Meridian DAOVDP
Web2 / SaaSEthereum
Recognition
No payouts yet
Unfunded
6.0h ack
100% within SLA
v1 · Aug 1, 2026