Kerne Logo

Audit and Security Posture

Last updated: May 8, 2026

Every audit, security sprint, and on-chain verification action that has happened on Kerne to date, with hard finding counts and links to the supporting source documents. Where work is incomplete or gaps remain, those are listed here too. For the per-finding live status (open / partial / closed / mitigated) of every named item in the 2026-05-11 and 2026-05-08 audits, see the Findings Tracker. For the live continuous-verification surface (wired thresholds vs. on-chain values, refreshed every 60 seconds), see /risk.

Source verifications

10 of 12

On BaseScan and Sourcify

Latest audit

201 findings

2026-05-08 adversarial, full triage published

External audit

TVL-gated

Scoped for the deployed core before TVL scales past Genesis

Bug bounty

Active

See bug bounty program

Timeline

The full chronological record. Most recent first.

DateActionStatus
2026-05-08

Internal adversarial audit (10-auditor parallel red team)

Every .sol in src/ (80 contracts) under a 20-30 vector adversarial checklist per cluster: reentrancy, oracle manipulation, share inflation, flash-loan price manipulation, MEV, replay, ERC-4626 invariants, access control, cross-chain bridge attacks, role boundary violations. Identified the root cause of the live degraded WETH vault and catalogued cross-cutting attack patterns (recoverTokens / emergencyWithdraw single-key drains, init front-run on factory clones, spot-DEX or stale Chainlink as oracle, ERC-4626 inflation defense gaps, cross-chain message replay, permissionless deposit/donation as DoS, pause as griefing primitive, single-key admin / threshold = 1).

201 findings: 36 Critical / 51 High / 51 Medium / 37 Low / 26 Info. Full report at docs/security/ADVERSARIAL_AUDIT_2026-05-08.md. KerneStaking lock-bypass (§1.18) patched in source same-day with 7 regression tests; remainder on remediation queue per the audit's §3 triage order.
2026-04-26

KerneToken deployed-source disclosure

Public disclosure that the deployed KERNE contract is the Jan 7 source (100M initial mint, multisig-gated MINTER_ROLE), not the 1B fixed-supply Feb 28 rewrite. Marketing copy reconciled, public commitment on minter discipline published.

Published
2026-04-25

KerneToken source verification

On-chain bytecode reproduced from Jan 7 source, verified on BaseScan, Sourcify, Blockscout.

Complete
2026-04-21

Verification gaps evidence document

Per-contract deploy timestamps, first-diff character positions, resolution paths for the 6 unverified contracts.

Published
2026-04-18

Frontend security audit

kerne.fi and app.kerne.fi: CSP, secret leakage, open-redirect, address registry consistency, geo-block, sanitizer review.

17 PASS / 5 WARN / 0 FAIL
2026-04-17 to 2026-04-18

Orphan role revocation

All 6 operational roles (PAUSER x2, MANAGER, EXECUTOR, SENTINEL, STRATEGIST) revoked from the legacy EIP-7702-trapped deployer EOA.

Complete on-chain (Safe nonces 6 to 11)
2026-04-17

Security sprint (homoglyph & supply-chain class)

13 commits, full Solidity + Python + deployment surface review. Eliminated address-literal drift, unchecked send paths, over-permissive approvals, and contract-level hardening (skUSD inflation guard, LayerZero refund, IntentExecutor post-condition).

Complete
2026-04-09

Internal security assessment (Slither + Foundry)

All 12 deployed contracts plus 57+ Kerne-authored sources. Slither v0.11.3 + Foundry tests + role-access review.

Complete (see findings below)
2026-04-06

On-chain admin audit

DEFAULT_ADMIN_ROLE migration verification across 9 AccessControl contracts plus KerneTreasury.owner() and kUSD v2.

Complete (Safe holds admin on all)

Adversarial Audit, May 8, 2026

An internal red team ran a 10-auditor parallel adversarial review of every Solidity file insrc/, applying a 20 to 30 vector adversarial checklist per cluster (reentrancy, oracle manipulation, share inflation, flash-loan price manipulation, MEV, replay, ERC-4626 invariants, access control, cross-chain bridge attacks, role boundary violations). The full report is preserved at docs/security/ADVERSARIAL_AUDIT_2026-05-08.md in the public repository.

Result: 201 findings across 80 contracts. 36 Critical, 51 High, 51 Medium, 37 Low, 26 Info. The audit identified the root cause of the live degraded WETH vault (KerneVault bucket-transition asymmetry:sweepToExchangeand three sibling functions decrement_trackedOnChainAssetsbut do not atomically incrementoffChainAssets, collapsingtotalAssets()between strategist updates and triggering the ERC-4626 1-wei-inflation case on the next deposit). It also catalogued cross-chain bridge triple-mint primitives, OFT V1/V2 single-key mint backdoors, withdrawal-queue stale-asset payment, KerneYieldStripper PT/YT pool insolvency, KerneVerificationNode threshold defaults to 1, KernePrime accounting-only ledger, KernePriceOracle slot0 fallback, six contracts with single-key recoverTokens or emergencyWithdraw drains, init front-run on factory clones, attacker-supplied calldata patterns on aggregator harvest paths, DarkPool RFQ permitting self-swap, ZINRouter pocketing surplus over minAmountOut, InsuranceFund socializeLoss with no cap or cooldown, Airdrop emergencyWithdraw draining locked balances, esKERNE vesting math broken on second emission, and the RWA adapter convertToShares round-trip ignoring receipt.

Remediation cadence. The audit's§1.18KerneStaking lock-bypass was patched in source the same day. Seven regression tests intest/unit/KerneStaking.t.soldemonstrate the exploit is now blocked (forge test reports 25 of 25 staking tests passing includingtest_stake_cannotShortenExistingLock_attackBlocked). The remaining findings are queued per the audit's§3triage order: Phase 1 live-exploitability items first (vault bucket atomicity, KernePrime ledger wiring, IntentExecutor V1 SOLVER_ROLE, OFT mint backdoor, oracle slot0 fallback), then Phase 2 launch-blocking (bridge replay, verification node threshold, yield system insolvency, attestation forgery, adapter clone init, RWA depeg surface), then Phase 3 capital-protective hardening, then Phase 4 code hygiene.

We commit to disclosing the open finding count on this page weekly until it converges to zero, and to engaging a professional external auditing firm before any TVL scaling beyond the Genesis Window phase.

Internal Security Assessment, April 9, 2026

Slither v0.11.3 (Trail of Bits) was run against the entire codebase, producing 692 total findings across all severity levels. Foundry test suite reports 949 of 951 tests passing. Of the 7 high-severity findings, 5 affect contracts that are not deployed on mainnet (KerneDarkPool, KerneMigrationRouter, KerneZINPool) and are flagged for pre-deployment review only. The two high-severity findings on deployed contracts (KerneVault, KerneFlashArbBot) are protected by role-based access control and were assessed as low actual risk after review.

No critical vulnerabilities were identified in deployed production contracts. This represents automated tooling output and internal analysis. It does not constitute a professional third-party security audit, and we are committed to engaging a professional auditing firm before scaling TVL beyond the genesis phase.

Security Sprint, April 17, 2026

Triggered by an internal incident in which 787 USDC was sent to a homoglyph vanity address (the visually similar but distinct address that had been hardcoded as the Hyperliquid bridge in the bot). The sprint produced 13 commits and eradicated five classes of bug across the bot, the Solidity surface, and the deployment scripts.

  • Address-literal drift. The HL bridge fix, plus wstETH and cbETH homoglyphs in solver Python, plus a dead-EOA Aerodrome router constant, plus a wrong Uniswap router constant.
  • Unchecked send paths. Receipt-status guards added on six call sites that had been logging success on tx hash return without verifying on-chain success.
  • Server-supplied safeTxHash trust. Client-side recompute before Trezor signing; the RFQ server zero-byte signature fallback returns HTTP 503 instead of a fake signature.
  • Over-permissive approvals. capital_router infinite approvals replaced with exact-amount approvals to an allowlisted Li.Fi Diamond; Hyperliquid withdrawals gated by an env-driven destination allowlist.
  • Contract-level hardening. skUSD ERC-4626 inflation-attack mitigation via _decimalsOffset = 6, LayerZeroRelay refund routed to msg.sender for AA/EIP-7702 safety, IntentExecutor V1 and V2 typed revert if post-swap balance is insufficient.

The 787 USDC is unrecovered and treated as paid tuition. Every other instance of the same bug class was eliminated in the same sprint, plus a pre-commit secret scanner (gitleaks with two Kerne-specific rules) was added to prevent regression.

Frontend Security Audit, April 18, 2026

White-box static analysis plus live HTTP probe of both kerne.fi and app.kerne.fi. Verdict: 17 PASS, 5 WARN, 0 FAIL.

All 17 PASS items: no .env or .git/config exposed in production, HSTS plus subdomains delivered, X-Frame-Options DENY, X-Content-Type-Options nosniff, tight Permissions-Policy, strict Referrer-Policy, full CSP, no eval or innerHTML in the terminal app, only one dangerouslySetInnerHTML site-wide (sanitized, fed by static data), no open-redirect pattern, no client-side secret env exposure, contract addresses match the canonical registry exactly, OFAC sanctions coverage complete, geo-block enforced server-side, JSON.parse of untrusted data try-catch guarded, localStorage holds no sensitive data.

The 5 WARN items are documented accepted trade-offs: Next.js App Router CSP requires unsafe-inline and unsafe-eval for hydration, the marketing sanitizer is regex-based but only fed static repo data, /api/apy and /api/apy/history use Access-Control-Allow-Origin star for cross-site read, /api/stats falls back to public Base RPC if the env var is unset, and Ukraine is blocked at the country level as a Crimea proxy because Vercel does not expose region-level headers.

Orphan Role Revocation, April 17 to 18, 2026

The original deployer EOA at 0x57D400cED462a01Ed51a5De038F204Df49690A99was delegated to a drainer contract under EIP-7702 and could no longer sign transactions, but it still held six operational roles across four contracts. All six were revoked through the 2-of-3 Safe at Safe nonces 6 through 11.

  • KerneVault PAUSER_ROLE (nonce 6)
  • KerneToken PAUSER_ROLE (nonce 7)
  • KerneInsuranceFund MANAGER_ROLE (nonce 8)
  • KerneFlashArbBot EXECUTOR_ROLE (nonce 9)
  • KerneFlashArbBot SENTINEL_ROLE (nonce 10)
  • KerneVault STRATEGIST_ROLE (nonce 11; flagged post-sprint and revoked April 18)

Verified on chain at block 44,883,093. The drainer EOA now holds zero AccessControl roles across every Kerne contract.

Source Verification Status

10 of 12 deployed Kerne contracts have their source verified on both BaseScan and Sourcify. The remaining 2 are tracked with documented reasons and resolution paths.

KERNE token, deployed-source disclosure

Verifying the KerneToken contract surfaced a meaningful gap between the deployed source and the previously published documentation. The deployed contract is the January 7 version with a 100,000,000 initial mint and a multisig-gated MINTER_ROLE, not the February 28 rewrite that claimed a 1,000,000,000 cryptographically-fixed supply. We published the gap, the reconciled facts, and a public commitment on minter discipline rather than letting it be discovered without context. Read the full KERNE token disclosure.

ContractBaseScanSourcifyNote

KerneVault

0x8005bc7A86AD904C20fd62788ABED7546c1cF2AC
VerifiedVerified

kUSD v2

0x5C2EfdF0D8D286959b42308966bc2B97f5680AA3
VerifiedVerified

KUSDPSM

0xFf3025ec18e301855aB0f36Ec6ECa115a29A5Fbc
VerifiedVerified

KerneToken

0xfEA3D217F5f2304C8551dc9F5B5169F2c2d87340
VerifiedVerifiedJan 7 source, partial-match metadata; 100M initial supply on chain. See KERNE token disclosure linked above.

KerneYieldOracle

0x8DE2d5ac5aBc7331a6E1d450a5c021db18599CdB
VerifiedVerified

KerneYieldDistributor

0x096e38a04B632D28E017f86836225E0956CaD878
VerifiedVerified

esKERNE

0x29c1d396A35aB75a8Bb8dC3949f98edFa5f25b34
VerifiedVerified

KerneReferral

0x1A04AF62baFc84b08b19d2aF7285eD5f8dAe4D9f
VerifiedVerified

KerneStaking

0x032Af1631671126A689614c0c957De774b45D582
PendingPendingPre-2026-01-07 git-history reset; reproduction blocked. Documented in evidence doc.

KerneInsuranceFund

0xE8799FCF327C6D2f78103a3c9308C93592A30403
VerifiedVerifiedRedeployed 2026-05-16. Sourcify perfect match; Basescan auto-syncs. Legacy 0x3C93E2…08B9 retired (held 0 WETH). Safe Multisig is sole admin; intentionally NO AUTHORIZED_ROLE on any vault.

KerneFlashArbBot

0x57e73919Efc8a70B40a0bFc562C4DC9e58c4D76F
PendingPendingSource drift; queued for redeploy via RedeployArbSuite.

KerneTreasury

0x7c07517ABcc4BD674CC74B76D2Ab0d95A41560d5
VerifiedVerifiedRedeployed 2026-05-16. Sourcify perfect match; Basescan auto-syncs. Legacy 0x0067F4…2106 retired (held 0 of every token). Safe Multisig is owner; WETH+USDC approved for buyback.

External Audit Posture

External audit engagement is scoped and TVL-gated: it begins for the deployed core (KerneVault, kUSD v2, KUSDPSM, esKERNE, KerneYieldDistributor, KerneYieldOracle) before the protocol scales TVL beyond the Genesis-phase fee tier. The internal adversarial audit above (201 findings disclosed, full triage published) is the current authoritative finding set, and the operating commitment is to disclose the open finding count weekly until it converges to zero.

Target firms include those active in the delta-neutral category (Spearbit, Trail of Bits, Sherlock contests, Code4rena audits). Engagement status will be updated on this page when a contract is signed.

In the interim, the bug bounty program is the primary external verification channel.

Past Incidents

2026-04-17

787 USDC sent to a homoglyph vanity address

During an early Hyperliquid bridge funding action, the bot sent 787.334576 USDC on Arbitrum to a vanity address whose first ten hex characters matched the canonical Hyperliquid bridge but whose remaining characters did not. The funds are sitting in an attacker-controlled EOA and are treated as unrecoverable. No user funds were involved; no kUSD was minted; no Safe action was required to remediate.

The same day, the entire Solidity, Python, and deployment surface was audited for the same bug class. Five classes of issue were eliminated across thirteen commits, plus a pre-commit secret scanner and address-class regression tests were added. The full sprint writeup is summarized above.

Report a vulnerability via the Bug Bounty Program. See the live risk surface on the Transparency page and the canonical exit-trigger rules in the emergency runbook.

Track audit progress

Get audit findings as they close

Subscribers receive a single email each time an audit finding moves from open to closed, with the commit hash that did it. Plus milestone updates: external audit engagement, TVL gates, incident post-mortems. No volume.

By subscribing you agree to receive milestone updates from Kerne Protocol. We do not share email addresses. Read the privacy policy.