{"id":1204,"date":"2026-01-14T16:23:22","date_gmt":"2026-01-14T14:23:22","guid":{"rendered":"https:\/\/ackee.xyz\/blog\/?p=1204"},"modified":"2026-01-14T16:29:13","modified_gmt":"2026-01-14T14:29:13","slug":"kamino-lend-fuzz-tests-summary","status":"publish","type":"post","link":"https:\/\/ackee.xyz\/blog\/kamino-lend-fuzz-tests-summary\/","title":{"rendered":"Kamino Lend Fuzz Tests Summary"},"content":{"rendered":"<p>Kamino Lend is a decentralized lending platform deployed on the Solana blockchain that enables users to lend and borrow assets with flexible terms and interest rates.<\/p>\n<p>Kamino engaged Ackee Blockchain Security to perform fuzz testing focused on the Kamino Lend protocol with a total time donation of 6 engineering days in a period between January 20 and January 30, 2025. Manual code review was not performed.<\/p>\n<p>Kamino then engaged Ackee Blockchain Security to perform a second fuzz testing round of the Kamino Lend protocol with a total time donation of 15 engineering days in a period between June 23 and July 28, 2025.<\/p>\n<p>Revision 2.1 was a review of the fixes of findings from the previous revision.<\/p>\n<h2><span style=\"font-weight: 400;\">METHODOLOGY<\/span><\/h2>\n<p>The fuzz testing followed this systematic approach:<\/p>\n<ol>\n<li><strong>Code and architecture analysis<\/strong>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>High-level review of the Solana program specifications, Rust sources, and instruction handlers to understand the program\u2019s size, scope, and functionality.<\/li>\n<li>Analysis of Solana program entry points to identify instruction processors, account validation logic, and critical operations.<\/li>\n<li>Comparison of the Rust implementation and given specifications, ensuring that the program logic correctly implements everything intended.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li><strong>Fuzz testing with Trident<\/strong>\n<ol>\n<li><strong>Interface Analysis<\/strong>\n<ol>\n<li>Detailed examination of Solana instruction handlers and their account parameters<\/li>\n<li>Identification of Program-derived Addresses (PDAs), account ownership, and cross-program invocation patterns<\/li>\n<li>Mapping of account state transitions and Solana runtime data flows<\/li>\n<\/ol>\n<\/li>\n<li><strong>Initial behavior exploration<\/strong>\n<ol>\n<li>Writing simple Trident fuzz tests to observe Solana program instruction execution<\/li>\n<li>Understanding account validation constraints and Solana runtime limitations<\/li>\n<li>Identifying unexpected program behaviors, panics, or edge cases in instruction processing<\/li>\n<\/ol>\n<\/li>\n<li><strong>Invariant definition<\/strong>\n<ol>\n<li>Writing invariants based on expected Solana program properties and account state requirements<\/li>\n<li>Defining security-critical conditions for account ownership, balance constraints, and authority validation<\/li>\n<li>Establishing assertions for account state consistency and program-derived address integrity<\/li>\n<\/ol>\n<\/li>\n<li><strong>Complex stateful fuzz testing <\/strong>\n<ol>\n<li>Writing complex Trident fuzz tests that model stateful interactions across multiple Solana instructions<\/li>\n<li>Testing transaction sequences and their effects on account states and program data<\/li>\n<li>Exploring interdependencies between instruction handlers and cross-program invocations<\/li>\n<\/ol>\n<\/li>\n<li><strong>Extended fuzz testing campaigns<\/strong>\n<ol>\n<li>Running extended Trident fuzz testing campaigns to explore all edge cases in instruction execution<\/li>\n<li>Allowing the fuzzer to explore deep account state combinations and program execution paths<\/li>\n<li>Maximizing Rust code coverage and Solana instruction handler path exploration<\/li>\n<\/ol>\n<\/li>\n<li><strong>Dashboard analysis<\/strong>\n<ol>\n<li>Continuous analysis of the Trident fuzz testing dashboard throughout the process<\/li>\n<li>Monitoring for program panics, instruction failures, and Rust code coverage metrics<\/li>\n<li>Identifying patterns that indicate potential Solana program vulnerabilities or runtime issues<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<li><strong>Vulnerability assessment<\/strong>\n<ol>\n<li>Classification of discovered Solana program issues by severity and impact on protocol security<\/li>\n<li>Development of proof-of-concept transaction sequences for critical findings<\/li>\n<li>Recommendations for Rust code remediation based on Trident fuzz testing results<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2><span style=\"font-weight: 400;\">SCOPE<\/span><\/h2>\n<p>The fuzz testing was performed on commit <code class=\"codehl\">829c1f3<\/code> and the scope was the following:<\/p>\n<ul>\n<li>Kamino Lending, excluding external dependencies.<\/li>\n<\/ul>\n<p>The second fuzz testing was performed on the commit <code class=\"codehl\">fe1ad10<\/code> with extended coverage, and the scope was the following:<\/p>\n<ul>\n<li>Kamino Lending, excluding external dependencies.<\/li>\n<\/ul>\n<p>The third fuzz testing was done on given commits <code class=\"codehl\">4c58439<\/code>, <code class=\"codehl\">89a6a81<\/code>, and <code class=\"codehl\">542ffdb<\/code> respectively. The findings reported in the previous revision were fixed \u2013 find the complete details including Kamino&#8217;s acknowledgments in the full audit report linked below.<\/p>\n<h2><span style=\"font-weight: 400;\">FINDINGS<\/span><\/h2>\n<p>The classification of a security finding is determined by two sub-ratings: Impact and Likelihood. This two-dimensional rating makes the severity of issues more noise-free, without losing any information. The likelihood factor usually decreases severity of medium issues that would be just acknowledged by the team to infos and warning.<\/p>\n<p>Our review resulted in <strong>8 findings<\/strong> of Warning and Informational severity:<\/p>\n<h3>Critical severity<\/h3>\n<p>No critical severity issues were found.<\/p>\n<h3>High severity<\/h3>\n<p>No high severity issues were found.<\/p>\n<h3>Medium severity<\/h3>\n<p>No medium severity issues were found.<\/p>\n<h3>Low severity<\/h3>\n<p>No low severity issues were found.<\/p>\n<h3>Warning severity<\/h3>\n<p>W1: WithdrawObligationCollateralV2 subtraction overflow<\/p>\n<p>W2: RepayAndWithdrawAndRedeemV2 subtraction overflow<\/p>\n<p>W3: Unhandled panics<\/p>\n<p>W4: Borrow limit excludes fees when validating borrow amount<\/p>\n<p>W5: Liquidation instruction causes panic due to unwrap on None value<\/p>\n<p>W6: Withdraw obligation collateral instruction reverts due to immutable owner<\/p>\n<p>W7: Instructions cause panic due to division by zero when deposited value is zero<\/p>\n<h3>Informational severity<\/h3>\n<p>I1: Unused code<\/p>\n<h2><span style=\"font-weight: 400;\">CONCLUSION<\/span><\/h2>\n<p><b><a href=\"https:\/\/ackee.xyz\">Ackee Blockchain Security<\/a> recommended Kamino to:<\/b><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li aria-level=\"1\">investigate the findings and severity of the issues;<\/li>\n<li aria-level=\"1\">read and review the complete audit report; and<\/li>\n<li aria-level=\"1\">address all identified issues.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><b>Ackee Blockchain Security\u2019s full Kamino Lend fuzzing report can be found <a href=\"https:\/\/github.com\/Kamino-Finance\/audits\/blob\/93c586fcfacd973a929beb9bea7c65bd417f645d\/kamino_lend_ackee_blockchain_fuzz_tests.pdf\" target=\"_blank\" rel=\"noopener\">here<\/a>.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">We were delighted to audit Kamino and look forward to working with them again.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kamino Lend is a decentralized lending platform deployed on the Solana blockchain that enables users to lend and borrow assets with flexible terms and interest rates. Kamino engaged Ackee Blockchain Security to perform fuzz testing focused on the Kamino Lend protocol with a total time donation of 6 engineering days in a period between January 20 and January 30, 2025. Manual code&hellip;<\/p>\n","protected":false},"author":30,"featured_media":1267,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,5,113],"tags":[159,6,114],"class_list":["post-1204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-audits","category-solana","category-trident","tag-fuzzing","tag-solana","tag-trident"],"aioseo_notices":[],"featured_image_src":"https:\/\/ackee.xyz\/blog\/wp-content\/uploads\/2025\/11\/ka-prev-600x400.png","featured_image_src_square":"https:\/\/ackee.xyz\/blog\/wp-content\/uploads\/2025\/11\/ka-prev-600x600.png","author_info":{"display_name":"Tom\u00e1\u0161 Kova\u0159\u00edk","author_link":"https:\/\/ackee.xyz\/blog\/author\/tomas-kovarik\/"},"_links":{"self":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/posts\/1204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/users\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/comments?post=1204"}],"version-history":[{"count":0,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/posts\/1204\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/media\/1267"}],"wp:attachment":[{"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/media?parent=1204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/categories?post=1204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ackee.xyz\/blog\/wp-json\/wp\/v2\/tags?post=1204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}