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.
| Date | Action | Status |
|---|---|---|
| 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.
| Contract | BaseScan | Sourcify | Note |
|---|---|---|---|
KerneVault 0x8005bc7A86AD904C20fd62788ABED7546c1cF2AC | Verified | Verified | |
kUSD v2 0x5C2EfdF0D8D286959b42308966bc2B97f5680AA3 | Verified | Verified | |
KUSDPSM 0xFf3025ec18e301855aB0f36Ec6ECa115a29A5Fbc | Verified | Verified | |
KerneToken 0xfEA3D217F5f2304C8551dc9F5B5169F2c2d87340 | Verified | Verified | Jan 7 source, partial-match metadata; 100M initial supply on chain. See KERNE token disclosure linked above. |
KerneYieldOracle 0x8DE2d5ac5aBc7331a6E1d450a5c021db18599CdB | Verified | Verified | |
KerneYieldDistributor 0x096e38a04B632D28E017f86836225E0956CaD878 | Verified | Verified | |
esKERNE 0x29c1d396A35aB75a8Bb8dC3949f98edFa5f25b34 | Verified | Verified | |
KerneReferral 0x1A04AF62baFc84b08b19d2aF7285eD5f8dAe4D9f | Verified | Verified | |
KerneStaking 0x032Af1631671126A689614c0c957De774b45D582 | Pending | Pending | Pre-2026-01-07 git-history reset; reproduction blocked. Documented in evidence doc. |
KerneInsuranceFund 0xE8799FCF327C6D2f78103a3c9308C93592A30403 | Verified | Verified | Redeployed 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 | Pending | Pending | Source drift; queued for redeploy via RedeployArbSuite. |
KerneTreasury 0x7c07517ABcc4BD674CC74B76D2Ab0d95A41560d5 | Verified | Verified | Redeployed 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.
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.