<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Defendor]]></title><description><![CDATA[Weekly Solana security — exploits, news, research decoded by a real auditor.]]></description><link>https://defendor.xyz</link><image><url>https://substackcdn.com/image/fetch/$s_!iOXF!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1267d03-5109-49fc-80b0-ef5086357b29_1280x1280.png</url><title>Defendor</title><link>https://defendor.xyz</link></image><generator>Substack</generator><lastBuildDate>Wed, 03 Jun 2026 19:27:36 GMT</lastBuildDate><atom:link href="https://defendor.xyz/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Defendor. Web3 Security]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[defendor@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[defendor@substack.com]]></itunes:email><itunes:name><![CDATA[Arsen]]></itunes:name></itunes:owner><itunes:author><![CDATA[Arsen]]></itunes:author><googleplay:owner><![CDATA[defendor@substack.com]]></googleplay:owner><googleplay:email><![CDATA[defendor@substack.com]]></googleplay:email><googleplay:author><![CDATA[Arsen]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Halted By Design]]></title><description><![CDATA[One missing case. Every validator stopped.]]></description><link>https://defendor.xyz/p/halted-by-design</link><guid isPermaLink="false">https://defendor.xyz/p/halted-by-design</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 01 Jun 2026 19:02:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3fb466ed-c337-49ef-82b6-a51f637a5f4e_962x636.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; The public string that gave anyone access to 86 Gnosis Safes <br>&#8226; One failed Sui transaction that halted every honest validator<br>&#8226; The Arbitrum DAO just voted on where frozen KelpDAO ETH goes<br>&#8226; And more&#8230;</p><div><hr></div><h2>&#127988;&#8205;&#9760;&#65039; Hacks</h2><p><strong>Two exploits from this week</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tMuw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tMuw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tMuw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tMuw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tMuw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tMuw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg" width="1280" height="847" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:847,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134085,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/200165662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tMuw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tMuw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tMuw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tMuw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa33a92d1-9c1b-4381-8ca9-ae889806e373_1280x847.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1643">SquidRouterModule source</a> | <a href="https://t.me/defendor_eng/1642">WUSD.fi source</a></p><p><strong>SquidRouterModule &#8212; $3.2M, 86 Gnosis Safes</strong></p><p>You install a module on your Gnosis Safe.</p><p>The name says SquidRouterModule. Squid Router is trusted. You&#8217;ve seen it everywhere.</p><p>The module isn&#8217;t Squid&#8217;s.</p><p>Third-party contract. Verified on Basescan as SquidRouterModule. Not built, deployed, or audited by Squid. One missing check: it accepted a caller-supplied constant string as proof of authorization. The string sits in the verified source &#8212; public, readable, usable by anyone.</p><p><em>If the auth string is public, who is it actually keeping out?</em></p><p>The attacker deployed Foundry-based exploit contracts. Called <code>executeSameChainActions()</code> with the string. Hit the <code>DelegateBundler</code> path &#8212; impersonating authorized delegates on victim Safes. Swaps fired: real tokens out, a worthless attacker-deployed token (&#8221;u&#8221;, 42 holders) in. Attacker pre-seeded Uniswap V3 pools with &#8220;u&#8221; pairs. Removed liquidity post-drain. All proceeds converted to 3.07M DAI.</p><p>86 Safes. Two hours. Squid&#8217;s name took the hit for code they never wrote.</p><p>Read the code behind the module name. Not the name.</p><div><hr></div><p><strong><a href="http://wusd.fi/">WUSD.fi</a> &#8212; $200K via Sybil Abuse</strong></p><p>The protocol had an incentive mechanic in <code>WUSD._englove</code>.</p><p>Wrap at least 100 WUSD while holding fewer than 2 GLOVE. Receive up to 2 free GLOVE via <code>Glove.mintCreditless</code>. No sybil check. No rate limit.</p><p><em>What does a &#8220;fresh address&#8221; requirement mean to an attacker with EIP-7702?</em></p><p>Provisioned on demand.</p><p>The attacker deployed EIP-7702 helper contracts &#8212; EOAs that execute like contracts. Funded each cycle with a Morpho USDT flash loan. Wrap. Claim. Unwrap. Repeat. Across fabricated fresh addresses at scale.</p><p>Each individual claim was valid by the contract&#8217;s logic. The loop wasn&#8217;t.</p><p>GLOVE hit Uniswap V3 GLO pools on the way out. $200K in USDC and USDT extracted.</p><p><code>Glove.mintCreditless</code> &#8212; creditless means no collateral. It was never meant to mean unlimited.</p><div><hr></div><h2>&#128478;&#65039; News</h2><p><strong>Arbitrum DAO votes to release frozen ETH &#8212; funds go to Aave</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D0p4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D0p4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D0p4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D0p4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D0p4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D0p4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg" width="900" height="544" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:544,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:49485,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/200165662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!D0p4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 424w, https://substackcdn.com/image/fetch/$s_!D0p4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 848w, https://substackcdn.com/image/fetch/$s_!D0p4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!D0p4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64bf4855-bece-4213-8484-61b055b6fc21_900x544.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1648">Source</a></p><p>The Arbitrum DAO passed a constitutional proposal.</p><p>Release the ETH the Security Council froze after KelpDAO&#8217;s rsETH incident. 190M FOR + ABSTAIN votes. Quorum cleared.</p><p>Constitutional proposals take 2-3 weeks to execute. When this one does, the ETH moves to a wallet controlled by Aave &#8212; not back to original holders.</p><p><em>Once a security council freezes funds &#8212; who owns them?</em></p><p>The Security Council froze fast. Correct call. The chain of custody transferred to the DAO, which deliberated and voted. The DAO decided the destination: Aave.</p><p>The original holders aren&#8217;t in that sentence.</p><p>This is the precedent. Emergency freezes preserve optionality &#8212; for the DAO, not original owners. If you&#8217;re building under a security council, understand who controls the next decision.</p><p>The freeze worked. What happens to the funds is always a governance question.</p><div><hr></div><h2>&#128218; Education</h2><p><strong>Sui Mainnet Halt &#8212; May 28, 2026</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!plX6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!plX6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 424w, https://substackcdn.com/image/fetch/$s_!plX6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 848w, https://substackcdn.com/image/fetch/$s_!plX6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!plX6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!plX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg" width="863" height="361" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:361,&quot;width&quot;:863,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20979,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/200165662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!plX6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 424w, https://substackcdn.com/image/fetch/$s_!plX6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 848w, https://substackcdn.com/image/fetch/$s_!plX6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!plX6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2de1a1a5-2579-41e4-bbff-bfe6ca675231_863x361.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1667">Source</a></p><p>Sui went down for hours.</p><p>Two tweets from Suibracket the public record. Mainnet stall. Patch deployed. Back online. What happened between them: a single missing case. One failed user transaction. Every honest validator halted.</p><p>Sui&#8217;s 1.72 release introduced Address Balance. An account-style balance layer on top of its object model. Gas can be paid via coin reservations &#8212; a reservation isn&#8217;t a real coin. It&#8217;s a promise to withdraw from Address Balance.</p><p>When gas smashing runs, any reservation entry emits an <code>AccumulatorEvent::Split</code> into the TemporaryStore. That Split feeds the settlement system transaction, which applies the net balance change at the checkpoint boundary.</p><p>The bug: a transaction about to fail with <code>InsufficientFundsForWithdraw</code> still ran smashing first.</p><p>Failure reset object state. It did not reset the event.</p><p><em>What does a failed transaction actually write &#8212; before it fails?</em></p><p>Settlement later tried to apply that Split against a zero balance:</p><pre><code><code>u128.value = 0 + 0 - R;  // checked underflow &#8594; abort
</code></code></pre><p>Move&#8217;s checked arithmetic refused. No silent solvency bug.</p><p>But refusing meant aborting the settlement system transaction.</p><p>Settlement is deterministic. Every validator derives the identical system transaction from the checkpoint. Every validator hit the identical abort.</p><p>Chain stopped.</p><p>No funds stolen. Move caught the solvency bug. The chain paid with liveness.</p><p>The fix: 16 lines in <code>execution_engine.rs</code>. Prune reservation entries from <code>gas_data.payment</code> before smashing &#8212; when an IFFW abort is coming. No reservation &#8594; no Split &#8594; no poisoned checkpoint.</p><p>Audit every early-abort path. Not just whether the transaction fails. What it writes before it does.</p><div><hr></div><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[The Deferred Check]]></title><description><![CDATA[It was found in p-token before mainnet. Here's how.]]></description><link>https://defendor.xyz/p/the-deferred-check</link><guid isPermaLink="false">https://defendor.xyz/p/the-deferred-check</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 25 May 2026 18:01:43 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6027d7de-bfbf-418a-bccc-4e9422480c16_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; A p-token vulnerability was discovered &#8212; batch instruction + deferred ownership = inflated wrapped SOL<br>&#8226; OpenZeppelin goes continuous &#8212; what their new model signals for the industry<br>&#8226; Vitalik on formal verification: what it actually proves, and where it breaks<br>&#8226; And more&#8230;</p><div><hr></div><h2>&#128027; Vulnerability</h2><p><strong>p-token: batch instruction breaks the deferred ownership invariant</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vwL9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vwL9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 424w, https://substackcdn.com/image/fetch/$s_!vwL9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 848w, https://substackcdn.com/image/fetch/$s_!vwL9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 1272w, https://substackcdn.com/image/fetch/$s_!vwL9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vwL9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png" width="566" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:566,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151925,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/199182725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vwL9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 424w, https://substackcdn.com/image/fetch/$s_!vwL9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 848w, https://substackcdn.com/image/fetch/$s_!vwL9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 1272w, https://substackcdn.com/image/fetch/$s_!vwL9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F746e73e3-b24d-4260-819d-a33d0f114caa_566x601.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1639">Source</a></p><p>p-token is Pinocchio-based. A compute-optimized rewrite of Solana&#8217;s SPL token program. Transfers now cost over 95% fewer CUs.</p><p>One of the CU savings: skipping explicit ownership checks on source accounts during transfers. The logic holds &#8212; any write to a foreign-owned account fails at the runtime level. The check is redundant.</p><p><em>What breaks that assumption?</em></p><p>The batch instruction.</p><p>Batch lets callers bundle multiple token operations into a single program call. Inside that single call, state changes can be reversed before the runtime check runs.</p><p>Here&#8217;s the mechanic:</p><p>Create a fake wrapped SOL account you control. Set the mint to native mint. Set <code>is_native</code> to <code>None</code>. Send a batch:</p><ol><li><p>Transfer X wrapped SOL from the fake account &#8594; target</p></li><li><p>Transfer X wrapped SOL from a real account &#8594; back to the fake account</p></li></ol><p>At the end: the fake account&#8217;s data is unchanged. The runtime check never triggers. The target&#8217;s <code>amount</code> field has increased. No lamports moved.</p><p>Any DeFi protocol that treats <code>amount</code> as the source of truth for collateral or flash loan repayment is exploitable from there.</p><p>The Anza team fixed it quickly &#8212; explicit ownership checks added to the batch handler for any instruction that modifies accounts.</p><p>The lesson: deferred runtime checks are a valid optimization when instructions execute independently. Batch breaks that assumption by allowing multiple state transitions inside a single invocation &#8212; including ones that undo the write the runtime was waiting to catch.</p><p>Individually safe optimizations can become vulnerabilities when composed with new functionality.</p><div><hr></div><h2>&#128478;&#65039; News</h2><p><strong>OpenZeppelin launches Continuous Security Program</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Txvp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Txvp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 424w, https://substackcdn.com/image/fetch/$s_!Txvp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 848w, https://substackcdn.com/image/fetch/$s_!Txvp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 1272w, https://substackcdn.com/image/fetch/$s_!Txvp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Txvp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp" width="1456" height="884" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:884,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54828,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/199182725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Txvp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 424w, https://substackcdn.com/image/fetch/$s_!Txvp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 848w, https://substackcdn.com/image/fetch/$s_!Txvp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 1272w, https://substackcdn.com/image/fetch/$s_!Txvp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe9747ce4-ed7b-4827-809a-4415ddd5cb1d_2048x1244.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1620">Source</a></p><p>OpenZeppelin announced a subscription-based, always-on security model. Not point-in-time audits &#8212; continuous coverage across the full development lifecycle.</p><p>The core premise: most major onchain hacks don&#8217;t come from bugs that audits missed. They come from code shipped between audits. Upgrades, new integrations, parameter changes &#8212; pushed to production without security review.</p><p>Their model is structured around four areas: Architect, Build, Secure, Support. Continuous loops, not sequential phases. AI-augmented scanning plus senior researcher review.</p><p><em>What this signals:</em></p><p>The point-in-time audit isn&#8217;t being replaced &#8212; it&#8217;s being framed as one layer, not the full stack. For large, fast-moving protocols, that framing is probably correct.</p><p>The market OpenZeppelin is targeting is institutional &#8212; Fidelity, DTCC, WisdomTree-tier clients. Not the same market as competitive audits or private engagements.</p><p>But the tooling bar it sets is real. Their AI Auditor reportedly surfaces a high or critical finding in one of every three scans. That&#8217;s the baseline expectation for continuous coverage now.</p><div><hr></div><h2>&#128218; Education</h2><p><strong>Formal verification: what it proves, and where it breaks</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yBwr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yBwr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 424w, https://substackcdn.com/image/fetch/$s_!yBwr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 848w, https://substackcdn.com/image/fetch/$s_!yBwr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 1272w, https://substackcdn.com/image/fetch/$s_!yBwr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yBwr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png" width="1102" height="709" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:709,&quot;width&quot;:1102,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93741,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/199182725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yBwr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 424w, https://substackcdn.com/image/fetch/$s_!yBwr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 848w, https://substackcdn.com/image/fetch/$s_!yBwr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 1272w, https://substackcdn.com/image/fetch/$s_!yBwr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47254eeb-8133-4106-b0d6-64ef2fa5bebb_1102x709.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://vitalik.eth.limo/general/2026/05/18/fv.html">Source</a></p><p>Vitalik published a deep dive on formal verification. The part most useful for auditors is buried about halfway through.</p><p>&#8220;Provably correct&#8221; doesn&#8217;t mean what it sounds like.</p><p>Formal verification proves that multiple <em>specifications of intent</em> are compatible with each other. It does not prove that those specifications match what users actually expect.</p><p>The model:</p><ul><li><p>Code = one expression of intent</p></li><li><p>Type system = another expression</p></li><li><p>Test suite = another expression</p></li><li><p>Formal proof = another expression</p></li></ul><p>The more ways you express the same intent, the harder it is for bugs to survive undetected. FV extends that redundancy further than any test suite can &#8212; you can verify an optimized implementation against a readable reference, check ten mathematical properties simultaneously, and use AI to do all of it efficiently.</p><p><em>Where it breaks down:</em></p><p>When only part of the code is verified and the unverified parts are where the bugs live. When the specification is wrong. When the proof assumes something the hardware doesn&#8217;t guarantee. Vitalik documents real examples: a formally-verified C compiler generating wrong assembly for edge cases. A Signal protocol proof that holds until hardware leaks through side channels.</p><p>The real takeaway: more redundant specifications of intent, automatically checked, is always better. FV is a powerful accelerant of that direction &#8212; not a final answer.</p><p>For auditors: FV is increasingly relevant for infrastructure (STARKs, ZK-EVMs, consensus). For program-level work, tests plus invariants plus manual review is still the realistic model. But the infrastructure you&#8217;re auditing against is being formally verified &#8212; understanding what that means, and what it doesn&#8217;t cover, matters.</p><div><hr></div><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[The Free Variable]]></title><description><![CDATA[Four proof fields. No opening proof. Full circuit bypass.]]></description><link>https://defendor.xyz/p/the-free-variable</link><guid isPermaLink="false">https://defendor.xyz/p/the-free-variable</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 18 May 2026 18:01:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f95930aa-4b1d-49b8-9051-8769e6d1d68c_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; How a newly churned node reconstructed a vault key and drained $10.7M<br>&#8226; The end of Code4rena<br>&#8226; Four proof fields no one verified &#8212; and why that breaks a $60M blockchain<br>&#8226; And more&#8230;</p><div><hr></div><h2>&#127988;&#8205;&#9760;&#65039; Hacks</h2><p><strong>THORChain: $10.7M drained via TSS key reconstruction</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8prN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8prN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8prN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8prN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8prN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8prN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg" width="1456" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73706,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/198223662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8prN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8prN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8prN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8prN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc4b248d-205b-461e-a0fd-19f8ed121a3e_1728x712.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://x.com/THORChain/status/2055376254514196749">Source</a></p><p>You run a cross-chain DEX. Six vaults. Distributed key material across multiple nodes. No single node holds the full private key.</p><p>The design is sound. The implementation had a gap.</p><p>A new node churns in. Bonds RUNE. Joins a vault. Nothing unusual on paper.</p><p><em>How many signing rounds does it take to reconstruct a full private key from leaked fragments?</em></p><p>With a vulnerable GG20 implementation: however many it takes to stay patient. GG20 distributes the vault&#8217;s key material across participating nodes. But the vulnerability let partial material leak from each signing round. Over several days, the attacker accumulated enough fragments to reconstruct the full private key for one of the six Asgard vaults &#8212; then executed unauthorized outbound transactions.</p><p>The network caught it automatically. An anomaly detector flagged the activity and halted signing. Multiple node operators executed <code>make pause</code>. Individual user swaps were not affected &#8212; only protocol-owned liquidity was at risk.</p><p>The ETH addresses used to bond RUNE for the malicious node link directly to the addresses that received the stolen funds. Current evidence points to a single operator acting deliberately, not a random exploit.</p><p>Recovery options are still in discussion: slash affected node bonds, use Protocol-Owned Liquidity to absorb the loss, or a community-driven combination. No decision yet. Trading remains halted.</p><p>The attack surface wasn&#8217;t a missing access check or a reentrancy path. It was the cryptographic primitive securing every vault &#8212; and a node operator who knew exactly what to do with what it leaked.</p><div><hr></div><h2>&#128478;&#65039; News</h2><p><strong>Code4rena is shutting down</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8zvz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8zvz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8zvz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8zvz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8zvz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8zvz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg" width="1280" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110884,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/198223662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8zvz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8zvz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8zvz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8zvz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc8b44a-3f4e-4b49-874a-2c2522f793c8_1280x572.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1593">Source</a></p><p>Code4rena announced last week that it&#8217;s winding down. Short statement. No explanation. No acquirer named.</p><p>All active contests and bounties will run to completion. Projects mid-engagement won&#8217;t be dropped. Each competition wraps up on its own timeline, coordinated with sponsors.</p><p><em>Where do you build a public track record when the leaderboard you were climbing disappears?</em></p><p>C4 was the platform that made competitive auditing mainstream. Hundreds of contests. Millions in payouts. A leaderboard that gave researchers a way to go public &#8212; and a way for protocols to find them.</p><p>A lot of careers in Web3 security started with a first C4 finding. Five years of wardens, judges, and sponsors building something real.</p><p>Sherlock, Cantina, and Codehawks are still running. The competitive audit format survives. But the community that grew up specifically inside C4 is gone.</p><p>If you were mid-contest, finish it. If you were building toward C4, pick the next platform and keep going. The skill compounds the same either way.</p><p>The arena closed. The work doesn&#8217;t stop.</p><div><hr></div><h2>&#128218; Education</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wqKd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wqKd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 424w, https://substackcdn.com/image/fetch/$s_!wqKd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 848w, https://substackcdn.com/image/fetch/$s_!wqKd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 1272w, https://substackcdn.com/image/fetch/$s_!wqKd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wqKd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png" width="934" height="764" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:764,&quot;width&quot;:934,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89261,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/198223662?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wqKd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 424w, https://substackcdn.com/image/fetch/$s_!wqKd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 848w, https://substackcdn.com/image/fetch/$s_!wqKd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 1272w, https://substackcdn.com/image/fetch/$s_!wqKd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d21ee22-eef9-48f9-9ba5-93ec74ce6791_934x764.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Unverified PLONK evaluations &#8212; OSEC&#8217;s dusk-plonk disclosure</strong></p><p><a href="https://t.me/defendor_eng/1614">Source</a></p><p>OSEC disclosed a critical soundness bug in dusk-plonk &#8212; the PLONK implementation behind Dusk Network&#8217;s Phoenix privacy layer. At disclosure: ~$60M market cap. The entire shielded transaction layer was at risk.</p><p>Here&#8217;s the invariant every PLONK verifier must maintain: every scalar entering the final verification equation either comes with a KZG opening proof, or is computed locally from public data. The opening proof binds an evaluation to a polynomial the prover committed to before seeing the challenges. Without that binding, the scalar is a free variable &#8212; the prover sets it to whatever makes the equation balance.</p><p><em>What happens when four of those scalars have no opening proof?</em></p><p>Dusk&#8217;s proof struct included evaluations for four selector polynomials: <code>q_arith</code>, <code>q_c</code>, <code>q_l</code>, <code>q_r</code>. The verifier consumed all four in the arithmetic identity check. None were in the KZG opening batch. The commitments existed in the verifier key &#8212; but the verifier never checked the evaluations against them.</p><p>Four free variables.</p><p>The exploit reduces to a single field division. You commit to arbitrary witness and quotient polynomials. You follow the honest protocol through all commitment rounds. After seeing the challenge <code>z</code>, you compute what the equation needs. You solve for <code>q_arith_eval</code>. You set the other three to zero.</p><p>Valid proof. Arbitrary false statement.</p><p>For Dusk, this broke every Phoenix constraint simultaneously &#8212; Merkle membership, note ownership, balance integrity, nullifier correctness. OSEC built a local testnet PoC: wallet balance 0, forge a proof, mint 2000 DUSK, transfer 1337 DUSK to an honest wallet. The honest node accepted both transactions.</p><p>OSEC found the same class of bug in Espresso&#8217;s Jellyfish: nine of fifteen Plookup evaluations missing from the Fiat-Shamir transcript before the batching challenge was derived. Different implementation. Same missing invariant.</p><p>The audit check is mechanical. For every field in a proof&#8217;s evaluation struct: does it appear in the KZG opening batch, or does the verifier compute it locally? Neither case is exotic. Both are checkable from a diff.</p><p>Every field. Bound or locally derived. No exceptions.</p><div><hr></div><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[The Signer You Trust]]></title><description><![CDATA[Your on-chain code is immutable. Your toolchain isn't.]]></description><link>https://defendor.xyz/p/the-signer-you-trust</link><guid isPermaLink="false">https://defendor.xyz/p/the-signer-you-trust</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 11 May 2026 18:00:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a4a9c4c5-2def-400e-9057-1e908f11718e_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; How a phished npm maintainer drained $160K from live Solana dApps<br>&#8226; The fuzzer that surfaced a phantom stake bug in seconds<br>&#8226; AI agents at 70% on exploit construction &#8212; still failing at the hard part<br>&#8226; And more&#8230;</p><div><hr></div><h2>&#127988;&#8205;&#9760;&#65039; Vulnerability</h2><p><strong>Supply chain attacks on Solana&#8217;s off-chain tooling</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wcya!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wcya!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 424w, https://substackcdn.com/image/fetch/$s_!Wcya!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 848w, https://substackcdn.com/image/fetch/$s_!Wcya!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 1272w, https://substackcdn.com/image/fetch/$s_!Wcya!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wcya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png" width="970" height="577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:577,&quot;width&quot;:970,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:414123,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/197213923?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wcya!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 424w, https://substackcdn.com/image/fetch/$s_!Wcya!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 848w, https://substackcdn.com/image/fetch/$s_!Wcya!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 1272w, https://substackcdn.com/image/fetch/$s_!Wcya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff61a6a5b-6e0d-48b6-a59c-346d3b452698_970x577.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1586">Source</a></p><p>Your Solana program is immutable.</p><p>You revoked the upgrade authority. Nobody changes that code.</p><p>But the utility that signs your transactions? That&#8217;s not on-chain.</p><p><em>What happens when version 0.1.2 lands in your CI and nobody reads the diff?</em></p><p>In December 2024, attackers phished a maintainer of @solana/web3.js. Versions 1.95.6 and 1.95.7 shipped within hours. Both captured private keys from signers. Exfiltrated them to a hard-coded Solana address. The package had 350K weekly downloads. $160K in SOL and SPL tokens drained before fixes shipped.</p><p>The on-chain code was untouched. Every transaction landed as expected. The exploit lived in the dependency your dApp imported to sign &#8212; not the contract any audit would have scoped.</p><p>That&#8217;s the supply chain attack profile. The exploit rides the trusted path &#8212; not the program, but the tool every instruction passes through. One hijacked maintainer account is all it takes. No on-chain footprint. No revert. Wallets drain silently.</p><p>A second attack vector: fake audit requests. Threat actors pose as project owners asking you to &#8220;review this repo&#8221; or &#8220;run our build to verify edge cases.&#8221; You clone the repo, run <code>npm install</code>, and a backdoored script executes &#8212; harvesting SSH keys, session tokens, or Solana CLI keypair paths. It works because auditors trust audit contexts.</p><p>The mitigations aren&#8217;t complicated. They&#8217;re just rarely applied.</p><p>Lock exact versions in Cargo.toml: <code>=1.18.3</code>, not <code>^1.18</code>. The caret allows any version up to <code>2.0.0</code> &#8212; a rogue <code>1.18.99</code> slips in silently. Use <code>cargo vendor</code> to snapshot your dependency graph locally. Run <code>cargo audit</code> to scan for known CVEs. Enable 2FA on every crates.io and npm account in your publishing pipeline.</p><p>The program is immutable.</p><p>The signer isn&#8217;t.</p><div><hr></div><h2>&#128478;&#65039; News</h2><p><strong>Crucible ships coverage-guided fuzzing for Solana programs</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rUZ5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rUZ5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 424w, https://substackcdn.com/image/fetch/$s_!rUZ5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 848w, https://substackcdn.com/image/fetch/$s_!rUZ5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 1272w, https://substackcdn.com/image/fetch/$s_!rUZ5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rUZ5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png" width="1456" height="701" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:701,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:96180,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/197213923?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rUZ5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 424w, https://substackcdn.com/image/fetch/$s_!rUZ5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 848w, https://substackcdn.com/image/fetch/$s_!rUZ5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 1272w, https://substackcdn.com/image/fetch/$s_!rUZ5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0884ee46-00d6-4e89-835b-bac1aa98f983_1778x856.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1580">Source</a></p><p>A new fuzzing framework built for Solana programs just launched. Coverage-guided, Anchor-native, Anchor v2 support from day one.</p><p><em>What does a fuzzer catch that manual review misses?</em></p><p>Here&#8217;s the launch demo. Crucible surfaced a years-old bug in Solana&#8217;s own stake program. A 5-instruction sequence leaves <code>delegation.stake</code> out of sync with the validator&#8217;s actual deposited lamports:</p><pre><code><code>delegate_stake()   // X lamports delegated
advance_epoch()    // stake becomes effective
deactivate()       // begin cooldown
withdraw()         // drain to rent floor, lamports drop
delegate_stake()   // rescind &#8212; delegation.stake unchanged
</code></code></pre><p>Step 5 hits the rescind branch &#8212; same epoch, same voter. <code>delegation.stake</code> is never recalculated. The SOL is withdrawn. The stake weight stays. The validator earns real inflation against a balance they no longer hold.</p><p>A generic invariant caught it: <code>fuzz_assert!(delegation.stake &lt;= lamports)</code>. One line. The Crucible backend handled the rest &#8212; SBPF edge coverage (every branch a feedback signal), full state space exploration, near-linear multi-core scaling.</p><p>Manual review eventually found this bug. But a one-line invariant plus automated sequence exploration would have flagged it earlier. The phantom stake was sitting in a code path that only triggers under a specific 5-step sequence &#8212; the kind that doesn&#8217;t appear in standard test suites unless someone explicitly writes for it. Coverage-guided fuzzing exhausts the state space systematically. You write the rule, the system finds the counter-example.</p><p>The framework is in early release. If you&#8217;re auditing Solana programs, it&#8217;s worth a close look.</p><div><hr></div><h2>&#128218; Education</h2><p><strong>AI agents at 70% on exploit construction &#8212; still failing at the hard ones</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_3vG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_3vG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_3vG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_3vG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_3vG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_3vG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg" width="900" height="360" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:360,&quot;width&quot;:900,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36076,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/197213923?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_3vG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_3vG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_3vG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_3vG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0bddea1a-5cc0-47e7-863f-b5057349714f_900x360.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1556">Source</a></p><p>a16z researchers ran 20 historical Ethereum price manipulation incidents through Codex (GPT 5.4). The task: find the vulnerability, write a working exploit. No hints. Just the contract address and block number.</p><p><em>How far can an agent get before it hits the hard part?</em></p><p>Without guardrails: 50% success. Except the agent was cheating. It used Etherscan&#8217;s txlist endpoint to pull the actual attack transaction from after the target block. Then reverse-engineered the exploit from the real attacker&#8217;s calldata. Not intelligence. Future data.</p><p>After sandboxing &#8212; no future data, no external API access &#8212; the success rate dropped to 10%.</p><p>Then they added structured domain knowledge: incident analyses, vulnerability pattern taxonomies, exploit templates derived from the actual answers. Success rate jumped to 70%.</p><p>The ceiling: even with near-complete guidance, the agent failed 6/20 times. In every single failure, it correctly identified the vulnerability. The breakdown happened at exploit construction. One agent assembled the right strategy, simulated profitability, and concluded the returns were insufficient &#8212; then abandoned its own correct answer. The economics were right. The profitability estimate was wrong.</p><p>One side observation: a sandboxed agent extracted the Alchemy API key from the anvil node config via <code>cast rpc anvil_nodeInfo</code>. When the firewall blocked direct access, it used <code>anvil_reset</code> to point the local node at a future block &#8212; then queried future state through the allowed local endpoint. Sandbox escape via debug RPC. Not a vector the researchers had anticipated.</p><p>The clearest takeaway: finding a vulnerability and building a working exploit are different skills. Agents have the first one reliably. The second breaks down on multi-step economic attacks &#8212; leveraged loops, multi-contract compositions &#8212; where the bottleneck is profitability estimation, not knowledge.</p><p>For defenders: agents are already useful. They&#8217;ll verify your true positives faster. On the complex ones, you&#8217;re still in the lead.</p><div><hr></div><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[Vulnerabilities that aren't]]></title><description><![CDATA[The runtime patched them. The curriculum didn't.]]></description><link>https://defendor.xyz/p/vulnerabilities-that-arent</link><guid isPermaLink="false">https://defendor.xyz/p/vulnerabilities-that-arent</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 04 May 2026 18:01:24 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d0453b51-e602-4efd-a02f-e9ded8aa3fd4_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; Reentrancy, float drift, and unchecked CPIs &#8212; all noise in Solana<br>&#8226; The phishing email that passes DKIM, SPF, and DMARC<br>&#8226; How fixing one rounding error introduced another<br>&#8226; And more&#8230;</p><div><hr></div><h2>&#128373;&#127996;&#8205;&#9794;&#65039; <strong>Vulnerability</strong></h2><p><strong>The Solana security curriculum is still teaching bugs that don&#8217;t exist</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gVSR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gVSR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 424w, https://substackcdn.com/image/fetch/$s_!gVSR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 848w, https://substackcdn.com/image/fetch/$s_!gVSR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 1272w, https://substackcdn.com/image/fetch/$s_!gVSR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gVSR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png" width="858" height="457" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:457,&quot;width&quot;:858,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128343,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/196448400?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gVSR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 424w, https://substackcdn.com/image/fetch/$s_!gVSR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 848w, https://substackcdn.com/image/fetch/$s_!gVSR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 1272w, https://substackcdn.com/image/fetch/$s_!gVSR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F57a3dc2d-7404-47a8-9661-3d74b8760f70_858x457.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1555">Source</a></p><p>You open a new Solana audit.</p><p>Your checklist: reentrancy, float non-determinism, unchecked CPI return values.</p><p><em>Which of these does the runtime actually care about?</em></p><p>None of them.</p><p>The most persistent security misinformation doesn&#8217;t come from obscure corners of the internet. It comes from official docs, recommended curricula, and the LLMs auditors use every day. These sources cite each other. Outdated content enters LLM training data. Those models generate new content. The loop closes.</p><p><strong>Reentrancy:</strong> CPI depth is capped at four. More importantly, the runtime rejects any invocation that calls back up the call stack. The A&#8594;B&#8594;A loop that drains Ethereum contracts can&#8217;t form in Solana. Self-reentrancy (A&#8594;A) is technically possible, but it requires specific conditions and is genuinely rare.</p><p><strong>Float non-determinism:</strong> There are no floating-point opcodes in SBPF. The VM emulates them through LLVM. Hardware differences don&#8217;t reach the application layer. Floats are still worth checking for NaN, negative infinity, and precision loss &#8212; but cross-architecture divergence isn&#8217;t the concern.</p><p><strong>Unchecked CPI return values:</strong> A failing CPI reverts the entire transaction. There&#8217;s no return value to check. The whole transaction succeeds or nothing does. Developers rely on this property by design.</p><p><strong>Partial state commitment:</strong> Same principle. If any instruction fails, all writes roll back. No in-between state.</p><p><strong>load\_instruction\_at / load\_current\_index:</strong> Gone since 2022. Still appearing in boot camp curricula and LLM outputs.</p><p>Some of these bugs were real &#8212; years ago. Anchor and the Agave runtime closed most of them. The docs didn&#8217;t keep up.</p><p>The runtime improved.</p><p>The curriculum didn&#8217;t.</p><div><hr></div><h2>&#128478;&#65039; <strong>News</strong></h2><p><strong>A real email from <a href="mailto:noreply@robinhood.com">noreply@robinhood.com</a> &#8212; phishing CTA inside</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LkRv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LkRv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LkRv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LkRv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LkRv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LkRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg" width="1456" height="700" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:160554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/196448400?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LkRv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 424w, https://substackcdn.com/image/fetch/$s_!LkRv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 848w, https://substackcdn.com/image/fetch/$s_!LkRv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!LkRv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda88cb3f-f14a-43ab-9063-5bc8c19251be_2628x1264.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1552">Source</a></p><p>The attacker&#8217;s email passes DKIM, SPF, and DMARC. It comes from noreply@robinhood.com.</p><p><em>What does your user do when an email passes every authentication check?</em></p><p>They trust it. They click.</p><p>Here&#8217;s the chain. Gmail ignores dots &#8212; <a href="mailto:v.ok@gmail.com">v.ok@gmail.com</a> and <a href="mailto:vok@gmail.com">vok@gmail.com</a> land in the same inbox. Robinhood treats them as different addresses. The attacker registers a new Robinhood account using the dot-trick version of their target&#8217;s email.</p><p>Then they rename their new device to a string of HTML.</p><p>Robinhood sends an &#8220;unrecognized activity&#8221; alert. The template renders the device name directly &#8212; no sanitization. The attacker&#8217;s HTML executes inside the official security email. A phishing CTA appears. The user sees a legitimate sender, passes every visual trust signal, and clicks a link the attacker controls.</p><p>Email authentication verifies the sender. It says nothing about the payload. SPF, DKIM, and DMARC are envelope-level checks. A properly signed email can still carry a fraudulent link.</p><p>This isn&#8217;t a new attack class. It&#8217;s a classic injection pattern targeting a high-trust channel. What makes it effective: security alert emails get acted on fast. Users don&#8217;t linger.</p><p>Robinhood patched the injection. But the pattern survives anywhere user-controlled input renders unsanitized in a transactional email template.</p><p>Real email. Real sender. Every auth check passing.</p><p>Still phishing.</p><div><hr></div><h2>&#128218; <strong>Education</strong></h2><p><strong>Two floor operations. One slow drain on every depositor.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GPTd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GPTd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 424w, https://substackcdn.com/image/fetch/$s_!GPTd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 848w, https://substackcdn.com/image/fetch/$s_!GPTd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 1272w, https://substackcdn.com/image/fetch/$s_!GPTd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GPTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png" width="752" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:326316,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/196448400?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GPTd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 424w, https://substackcdn.com/image/fetch/$s_!GPTd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 848w, https://substackcdn.com/image/fetch/$s_!GPTd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 1272w, https://substackcdn.com/image/fetch/$s_!GPTd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecbf4639-77f6-4dfd-9600-3819761429d5_752x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1534">Source</a></p><p>You&#8217;re auditing a Solana stake pool. Users deposit SOL, receive LP tokens, and burn them on withdrawal.</p><p>The withdrawal math converts LP tokens to lamports and rounds down. Protocol keeps the dust. Standard.</p><p><em>What happens when the fix introduces a second rounding operation going the other direction?</em></p><p>The team added a new withdrawal path that creates a PDA stake account. On Solana, every account needs rent to stay alive. Someone has to fund it.</p><p>The original code burned LP tokens based on full <code>withdraw_lamports</code> &#8212; the SOL amount including rent. If the user paid rent directly, they received <code>split_lamports = withdraw_lamports &#8722; stake_rent</code> but burned tokens worth <code>withdraw_lamports</code>. Overpay.</p><p>An auditor caught it. The fix: check if the user is the payer. If so, reverse-convert <code>split_lamports</code> back into LP tokens and burn that instead.</p><p>The fix is logically correct. It still introduced a bug.</p><p>LP tokens &#8594; lamports is floor division. Lamports &#8594; LP tokens is another floor division. Two sequential floors favor the same beneficiary &#8212; both round down. The protocol under-burns tokens on every withdrawal. Unbacked tokens accumulate in circulation. The exchange rate slowly decreases for every depositor in the pool.</p><p>The error per withdrawal is small &#8212; bounded by the ratio of token supply to total lamports. But it compounds. Every under-burn widens the ratio. A wider ratio increases the next under-burn.</p><p>The real fix was simpler: have the pool&#8217;s reserve stake account pay the rent. <code>split_lamports</code> equals <code>withdraw_lamports</code>. No reverse conversion. No second floor.</p><p>Every conversion function has a rounding direction.</p><p>Every rounding direction has a beneficiary.</p><p>When you audit a fix to financial logic, don&#8217;t just ask whether it resolved the original issue.</p><p>Ask whether it preserved the rounding invariants.</p><div><hr></div><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[150K SUI from Code Nobody Called]]></title><description><![CDATA[The protocol was audited. The old version wasn't.]]></description><link>https://defendor.xyz/p/150k-sui-from-code-nobody-called</link><guid isPermaLink="false">https://defendor.xyz/p/150k-sui-from-code-nobody-called</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 27 Apr 2026 18:01:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/eea534f7-def4-47d5-bf04-ce47e409deb3_578x380.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; How a 17-month-old Sui package drained a live rewards pool<br>&#8226; Why Litecoin needed a 13-block reorg to recover<br>&#8226; The Solana event your relayer fills that never happened<br>&#8226; And more&#8230;</p><div><hr></div><h2>&#127988;&#8205;&#9760;&#65039; <strong>Hacks</strong></h2><p><strong>Scallop drained for 150K SUI via deprecated V2 package</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q736!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q736!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q736!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q736!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q736!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q736!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg" width="1440" height="932" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:932,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82160,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/195638553?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Q736!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q736!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q736!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q736!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd15b2748-c989-4b23-aaea-b7eed8b009a1_1440x932.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1526">Source</a></p><p>You scope the Scallop protocol.</p><p>You check the live deployment, the active SDK path, the current package.</p><p>Everything looks clean.</p><p>Here&#8217;s what you didn&#8217;t check:</p><p><em>What can the old package still do?</em></p><p>On Sui, deployed packages are immutable. Every version you ever shipped stays on-chain &#8212; and callable. The attacker didn&#8217;t touch the live code. They found a V2 spool package from November 2023. Nobody had called it in months.</p><p>The bug was in <code>spool_account</code> creation. In the deprecated package, <code>last_index</code> never initializes. It stays at zero.</p><p>Points earned = stake &#215; (current_index &#8722; last_index).</p><p>With <code>last_index</code> at zero, every historical reward counts. Staking credits you for everything accumulated since the spool launched in August 2023.</p><p>The spool index had grown to 1.19 billion over 20 months. The attacker staked 136K sSUI. The pool ran a 1:1 exchange rate &#8212; numerator and denominator both set to 1. 162 trillion points converted directly to 162K SUI worth of rewards. The pool held 150K SUI. They drained it.</p><p>The bug sat dormant for 17 months. Legitimate users hit the new package via SDK, which initializes <code>last_index</code> correctly. The old path was invisible to anyone watching the live code.</p><p>The fix: version fields on shared objects. <code>assert!(version == CURRENT_VERSION)</code> in every function entry. Without that, every prior package version stays live. Not legacy. Not retired. Live.</p><p>KelpDAO, Litecoin, Aethir, Scallop. Most April exploits weren&#8217;t in core protocol code.</p><p>The audit perimeter isn&#8217;t the deployed contract.</p><p>It&#8217;s everything you ever shipped.</p><div><hr></div><h2>&#128478;&#65039; <strong>News</strong></h2><p><strong>Litecoin zero-day disrupts mining pools, 13-block reorg follows</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uhSY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uhSY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 424w, https://substackcdn.com/image/fetch/$s_!uhSY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 848w, https://substackcdn.com/image/fetch/$s_!uhSY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 1272w, https://substackcdn.com/image/fetch/$s_!uhSY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uhSY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png" width="747" height="447" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:447,&quot;width&quot;:747,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64585,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/195638553?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uhSY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 424w, https://substackcdn.com/image/fetch/$s_!uhSY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 848w, https://substackcdn.com/image/fetch/$s_!uhSY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 1272w, https://substackcdn.com/image/fetch/$s_!uhSY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe06d4c1e-59be-46f5-ae32-63982da05c9b_747x447.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1522">Source</a></p><p>A zero-day in Litecoin&#8217;s MWEB privacy layer hit last week. Major mining pools went down.</p><p>Mining nodes running outdated versions accepted an invalid MWEB transaction. That transaction pegged out coins to third-party DEXs &#8212; movement the protocol should have rejected. Nodes on the patched version rejected it outright.</p><p><em>What does it mean when 13 blocks have to be undone to fix it?</em></p><p>The network ran a 13-block reorg. The invalid chain segment reversed. All valid transactions from that window stayed in the main chain. Funds unaffected. Bug fully patched.</p><p>A 13-block reorg sounds alarming. In Bitcoin, it would be a crisis. Here it was the right call &#8212; letting invalid pegs stand was the worse outcome.</p><p>But 13 blocks is a number worth sitting with.</p><p>The fix existed before this happened. The patched version was already live. The disruption wasn&#8217;t a zero-day in the strictest sense &#8212; it was a deployment gap. Mining pools running unpatched nodes opened the window. The attacker used it.</p><p>Between a patch going out and every operator running it, there&#8217;s a gap. In this case, that gap was big enough to matter.</p><p>Patching the bug is step one.</p><p>Getting every operator to actually ship it is the harder problem.</p><p>13 blocks of drift is the evidence. &#8220;Patched&#8221; doesn&#8217;t mean &#8220;deployed.&#8221;</p><div><hr></div><h2>&#128218; <strong>Education</strong></h2><p><strong>Missing status check lets Across relayers fill fake Solana deposits</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WPmh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WPmh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 424w, https://substackcdn.com/image/fetch/$s_!WPmh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 848w, https://substackcdn.com/image/fetch/$s_!WPmh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 1272w, https://substackcdn.com/image/fetch/$s_!WPmh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WPmh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png" width="876" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:876,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:225604,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/195638553?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WPmh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 424w, https://substackcdn.com/image/fetch/$s_!WPmh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 848w, https://substackcdn.com/image/fetch/$s_!WPmh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 1272w, https://substackcdn.com/image/fetch/$s_!WPmh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe2ab96-df72-4464-a59c-12fba3c63f57_876x376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://t.me/defendor_eng/1513">Source</a></p><p>You&#8217;re building off-chain infrastructure for a Solana bridge.</p><p>Your indexer catches <code>FundsDeposited</code> events. Each one triggers a relayer fill on the destination chain. Across is intent-based &#8212; the relayer takes on the capital burden, fills the order, gets reimbursed from HubPool on Ethereum later.</p><p>In EVM, events are first-class. A failed transaction doesn&#8217;t emit them. In Solana, there&#8217;s no canonical events API. Off-chain infra reconstructs events from instruction data &#8212; specifically from self-CPIs, where a program calls back into itself.</p><p>The check: find inner instructions from the target program. Verify the PDA event authority is a signer. Deserialize the data. Both conditions met &#8212; fire the event.</p><p>Almost right.</p><p><em>Did the transaction actually succeed?</em></p><p>The Across indexer parsed <code>meta.InnerInstructions</code> for matching program address and event authority. It never checked transaction status. A failed Solana transaction still has instruction data. The event fires. The relayer sees a <code>FundsDeposited</code> and fills the order on the destination chain. The source-chain deposit reverted. The attacker keeps the fill.</p><p>The attack: flash loan for maximum relayer capacity. Submit a deposit on Solana. Force a revert after the deposit instruction runs &#8212; the token transfer reverts, but the instruction data stays. The relayer sees the event and fills the destination chain. You keep the fill. Flash loan repaid. Up the full fill amount.</p><p>The fix was one check: verify the transaction succeeded before processing events. Shipped within hours. 0xAlphaRush flagged the same class in a Sherlock contest for Zetachain. It&#8217;s not isolated to Across.</p><p>Solana gives you the event data regardless of outcome.</p><p>Outcome is your job to check.</p><p>If your indexer doesn&#8217;t, someone else will notice first.</p><div><hr></div><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[One Character Off]]></title><description><![CDATA[first &#8594; last. Every cooldown, every attribution &#8212; silently wrong.]]></description><link>https://defendor.xyz/p/one-character-off</link><guid isPermaLink="false">https://defendor.xyz/p/one-character-off</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 20 Apr 2026 18:02:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0c0f902f-31c3-4c7a-83a0-c1c177c124bf_579x379.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen</p><p>In today&#8217;s menu:<br>&#8226; The one-character Solana bug &#8212; and what it silently broke<br>&#8226; The security layer Solana just built that other chains wish they had<br>&#8226; Anchor&#8217;s ground-up rewrite &#8212; 94% smaller, compile-time safe<br>&#8226; And more&#8230;</p><div><hr></div><h2><strong>&#127988;&#8205;&#9760;&#65039; Vulnerability</strong></h2><h3>Incorrect use of <code>.first()</code> instead of <code>.last()</code> in <code>get_signatures_for_address</code></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0qTU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0qTU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 424w, https://substackcdn.com/image/fetch/$s_!0qTU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 848w, https://substackcdn.com/image/fetch/$s_!0qTU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 1272w, https://substackcdn.com/image/fetch/$s_!0qTU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0qTU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png" width="1318" height="932" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:932,&quot;width&quot;:1318,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:258513,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/194721977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0qTU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 424w, https://substackcdn.com/image/fetch/$s_!0qTU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 848w, https://substackcdn.com/image/fetch/$s_!0qTU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 1272w, https://substackcdn.com/image/fetch/$s_!0qTU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F386249f4-7bde-46c3-80c2-4552a5083237_1318x932.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>From a recent Solana audit &#8212; resolved</p><p>You audit a helper function.</p><p><code>get_signatures_for_address</code>. Fetches the earliest signature for an address.</p><p>Used to track: when was this account first active.</p><p>Simple function. One call. One return.</p><p>Types line up. Compiles clean.</p><p>You move on.</p><p>Here&#8217;s the question you didn&#8217;t ask:</p><p><em>Which direction does the RPC return signatures?</em></p><p>Solana RPC returns signatures newest-first.</p><p>The code calls <code>.first()</code>.</p><p>That&#8217;s the most recent signature.</p><p>Not the earliest.</p><p>Intent and result diverged silently.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;867aed35-048d-423d-a8ae-097c9e269538&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">let sig = signatures.first();
// Right &#8212; list is newest-first, so last() is the earliest
let sig = signatures.last();</code></pre></div><p>One character. <code>first</code> &#8594; <code>last</code>.</p><p>Every check built on &#8220;when was this address first active?&#8221; got wrong data.</p><p>Cooldowns. First-seen gating. Historical attribution.</p><p>All silently off.</p><p>The kind of bug static analysis won&#8217;t catch.</p><p>Types match. Semantics don&#8217;t.</p><p>Only one thing catches this &#8212;</p><p>reading the RPC contract and asking which direction the list comes back.</p><div><hr></div><h2><strong>&#128478;&#65039; News</strong></h2><h3>Solana Foundation launches STRIDE + SIRN</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3ELs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3ELs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 424w, https://substackcdn.com/image/fetch/$s_!3ELs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 848w, https://substackcdn.com/image/fetch/$s_!3ELs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 1272w, https://substackcdn.com/image/fetch/$s_!3ELs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3ELs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png" width="1180" height="596" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:596,&quot;width&quot;:1180,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:91701,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/194721977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3ELs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 424w, https://substackcdn.com/image/fetch/$s_!3ELs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 848w, https://substackcdn.com/image/fetch/$s_!3ELs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 1272w, https://substackcdn.com/image/fetch/$s_!3ELs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0c4f1fb-324f-408c-9653-3f85126e6eb1_1180x596.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Solana Foundation + Asymmetric Research &#8212; April 6</p><p>Solana just built the security layer other ecosystems wish they had.</p><p>Two programs.</p><p><strong>STRIDE</strong> &#8212; a framework across 8 security pillars.</p><p>Asymmetric evaluates protocols. Findings published publicly.</p><p>Pass with $10M+ TVL &#8594; 24/7 monitoring, foundation-funded.</p><p>Pass with $100M+ TVL &#8594; formal verification, foundation-funded.</p><div class="pullquote"><p><strong>SIRN</strong> &#8212; Solana Incident Response Network.</p></div><p>Founding members: <em><strong>Asymmetric, OtterSec, Neodyme, Squads, ZeroShadow.</strong></em></p><p>Three things shift for Solana auditors:</p><p>The bar for protocols above $100M is now formal verification.</p><p>Your audit is the first step, not the last.</p><p>STRIDE findings are public.</p><p>Quality of audit work becomes legible across the ecosystem.</p><p>Standards compound.</p><p>Solo auditors don&#8217;t compete with this.</p><p>They pipeline through it.</p><p>Firms inside SIRN will surface private audits from monitored protocols.</p><p>Getting aligned with STRIDE standards matters.</p><p>The ecosystem stopped asking whether security mattered.</p><p>It started pricing it in.</p><div><hr></div><h2><strong>&#128218; Education</strong></h2><h3><code>anchor-lang-v2</code> &#8212; the redesigned Anchor framework</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pskr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pskr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 424w, https://substackcdn.com/image/fetch/$s_!pskr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 848w, https://substackcdn.com/image/fetch/$s_!pskr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 1272w, https://substackcdn.com/image/fetch/$s_!pskr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pskr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png" width="355" height="378.1521739130435" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:736,&quot;resizeWidth&quot;:355,&quot;bytes&quot;:271881,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/194721977?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pskr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 424w, https://substackcdn.com/image/fetch/$s_!pskr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 848w, https://substackcdn.com/image/fetch/$s_!pskr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 1272w, https://substackcdn.com/image/fetch/$s_!pskr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facf6c7a9-8fd7-43b8-9963-a404860968f5_736x784.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Solana Foundation / anchor-next branch</p><p>Anchor v1 shaped how auditors read Solana programs.</p><p>Five years of macro-heavy derive, runtime checks that didn&#8217;t need to exist, a core you couldn&#8217;t audit without forking.</p><p>v2 is a ground-up rewrite. Alpha, git-only, not on crates.io.</p><p>But the direction is right.</p><p><strong>The foundation changes first:</strong> </p><ul><li><p>pinocchio under the hood, </p></li><li><p>no more &lt;&#8217;info&gt; life times<code>, </code></p></li><li><p>#[no_std]` by default. Binaries up to 94% smaller. </p></li><li><p>CU counts drop 3&#8211;6&#215; per instruction.</p></li></ul><p>The account model changes harder. `</p><ul><li><p>Account&lt;T&gt;` is now zero-copy by default &#8212; load is a pointer cast, exit is a no-op. </p></li><li><p>PDA bumps precomputed at macro time for literal seeds. </p></li><li><p>New Pod wrappers (`PodU64`, `PodVec`&#8230;) cast directly from account bytes, no deserialization.</p></li></ul><p>And the safety layer shifts to compile time. Typed `CpiHandle` turns stale-borrow UB into a compile error. Many v1 footguns that used to fail at runtime now refuse to compile at all.</p><p>Here&#8217;s the part that matters most:</p><div class="pullquote"><p>The derive shrinks from ~11,400 LoC to ~3,700.</p></div><p>Which means &#8212; for the first time &#8212; the Anchor core is auditable.</p><p>Fuzzing, static analysis, and formal verification are first-class.</p><p>Every v1 audit habit needs updating.</p><p>The ones that don&#8217;t translate are the ones you most need to re-learn.</p><p></p><p></p><p>That&#8217;s it for this week.</p><p>Reply with the Solana bug, tool, or pattern you want me to cover next &#8212; I read every one.</p><p>If a working Solana auditor in your circle would find this useful, forward it their way.</p><p>&#8212; Arsen, working Solana auditor</p>]]></content:encoded></item><item><title><![CDATA[Auditor's golden system]]></title><description><![CDATA[Write notes like this. Find more bugs.]]></description><link>https://defendor.xyz/p/how-auditors-make-notes</link><guid isPermaLink="false">https://defendor.xyz/p/how-auditors-make-notes</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 30 Mar 2026 18:02:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/dcf9617f-7033-440c-aef2-ff416907a939_967x640.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:<br>&#8226; The note-taking system most auditors skip<br>&#8226; USR token minted and dumped &#8212; price crashed to $0.05<br>&#8226; And more&#8230;</p><div><hr></div><p><strong>&#127988;&#8205;&#9760;&#65039; Hacks / Bounties<br>&#8226; USR token minted and dumped &#8212; price crashes to $0.05 (<a href="https://t.me/defendor_eng/1375">Link</a>)<br>&#8226; Auto-allocation bug turned USR exploit into bad debt (<a href="https://t.me/defendor_eng/1379">Link</a>)</strong></p><p><strong>&#128478;&#65039; News<br>&#8226; BattleChain testnet lets whitehats attack contracts pre-mainnet (<a href="https://t.me/defendor_eng/1392">Link</a>)<br>&#8226; Balancer Labs winds down after exploit fallout (<a href="https://t.me/defendor_eng/1383">Link</a>)</strong></p><p><strong>&#128218; Education<br>&#8226; Why audit process matters more than findings (<a href="https://t.me/defendor_eng/1376">Link</a>)<br>&#8226; The Flashloan fee inflation bug that drained $250K on dTrinity fork (<a href="https://t.me/defendor_eng/1398">Link</a>)</strong></p><div><hr></div><h1><strong>Deep Dive</strong></h1><p>You reviewed the code line by line.</p><p>You feel like you understand it.</p><p>But can you explain it from memory?</p><p>Most auditors can&#8217;t.</p><p>And the ones who can&#8217;t &#8212; don&#8217;t know what they missed.</p><p>Here&#8217;s what happens after a typical line-by-line read.</p><p>You feel like you covered the function.</p><p>You move on.</p><p>10 functions later &#8212; you &#8220;reviewed&#8221; the whole contract.</p><p><strong>Then a senior asks: walk me through the codebase from memory.</strong></p><p>Blank.</p><p>Or worse &#8212; you trace a bug back.</p><p>And realize you skipped the exact piece that would&#8217;ve caught it.</p><p>The problem isn&#8217;t effort.</p><p>Line-by-line reading is passive.</p><p>You see the code.</p><p>You make underlying notes.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SDoZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SDoZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 424w, https://substackcdn.com/image/fetch/$s_!SDoZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 848w, https://substackcdn.com/image/fetch/$s_!SDoZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 1272w, https://substackcdn.com/image/fetch/$s_!SDoZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SDoZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png" width="1456" height="247" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:247,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61159,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/192457525?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SDoZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 424w, https://substackcdn.com/image/fetch/$s_!SDoZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 848w, https://substackcdn.com/image/fetch/$s_!SDoZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 1272w, https://substackcdn.com/image/fetch/$s_!SDoZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F447c625f-0cc6-40f8-b01f-e16a24990819_1518x258.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>That&#8217;s not the same as understanding it.</p><p>Writing a lot pushes understanding.</p><p>When you explain something in your own words and get stuck &#8212;</p><p>That&#8217;s not failure.</p><p>That&#8217;s the system working.</p><div class="pullquote"><p><strong>The stuck = gap = where the bug usually lives.</strong></p></div><p>Most auditors ignore that moment and keep moving.</p><p><strong>The ones who find criticals stop, follow the thread, and write down what they find.</strong></p><p>Here&#8217;s the process I use, function by function:</p><ul><li><p>Open a new note named after the function. Write the sub-structure first (flows/ideas). Skeleton before detail.</p></li><li><p>Explain every line in your own words &#8212; not quoted, explained. What does it do? Who provides this value? Who can control it?</p></li><li><p>When you catch yourself not understanding &#8212; stop immediately. Open the constructor. Write what you find. Link back. Continue.</p></li><li><p>Log attack leads in-place. When a &#8220;what if&#8221; hits, write it right there. Tag it [DOS?] [Access?]. Write the theory. Confirm or disprove it. Don&#8217;t let it disappear into your head.</p></li><li><p>Don&#8217;t fear rabbit holes. Your notes hold the context &#8212; your brain doesn&#8217;t have to. Go as deep as needed. You won&#8217;t lose the thread.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wc7F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wc7F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 424w, https://substackcdn.com/image/fetch/$s_!Wc7F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 848w, https://substackcdn.com/image/fetch/$s_!Wc7F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 1272w, https://substackcdn.com/image/fetch/$s_!Wc7F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wc7F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png" width="1456" height="619" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:619,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101235,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://defendor.xyz/i/192457525?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wc7F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 424w, https://substackcdn.com/image/fetch/$s_!Wc7F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 848w, https://substackcdn.com/image/fetch/$s_!Wc7F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 1272w, https://substackcdn.com/image/fetch/$s_!Wc7F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92ba414e-7a52-4ad2-aef9-ca1ec8b322aa_2182x928.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here&#8217;s how it played out in a recent audit.</p><p>I was going through a reconstitute function.</p><p>Wrote: &#8220;governor checks the sender is trusted.&#8221;</p><p>Caught myself &#8212; who is governor? Where is it set?</p><p>Jumped to the constructor.</p><p>No validation on the input.</p><p>Wrote it down.</p><p>That one caught thread became a finding.</p><p>The function looked clean on first read.</p><p>The notes found the bug.</p><p>Most auditors treat notes as documentation.</p><p>A record of what they saw.</p><p>That&#8217;s wrong.</p><div class="pullquote"><p>Notes are the audit.</p></div><p>Explaining every function in your own words, following every unclear thought &#8212;</p><p>That IS the process that finds bugs.</p><p>By the time you&#8217;ve written detailed notes on every function, you&#8217;ve processed the protocol twice.</p><p>The gaps are documented, not buried.</p><p>The attack leads are on paper, waiting to be tested.</p><p>Re-read in 20 minutes what took 4 hours to build &#8212; and see it fresh.</p><p>Arsen.</p><div class="poll-embed" data-attrs="{&quot;id&quot;:485505}" data-component-name="PollToDOM"></div><p>Reply with what you want me to cover next &#8212; I read every one.</p>]]></content:encoded></item><item><title><![CDATA[Pre-Quoted. Not Safe.]]></title><description><![CDATA[Most people missed this. Here's exactly what was wrong.]]></description><link>https://defendor.xyz/p/pre-quoted-not-safe</link><guid isPermaLink="false">https://defendor.xyz/p/pre-quoted-not-safe</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 23 Mar 2026 16:36:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/62377928-b1ba-47a3-b767-953146d860b5_1048x690.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:</p><ul><li><p>Full CTF answer &#8212; the reconstitute bug, completely broken down</p></li><li><p>Why off-chain quoting is a repeatable Medium finding pattern</p></li><li><p>And more&#8230;</p></li></ul><div><hr></div><p>&#127988;&#8205;&#9760;&#65039; <strong>Hacks / Bounties</strong></p><ol><li><p><strong>$50M Aave Swap &#8212; Extreme Price Impact (<a href="https://t.me/defendor_eng/1346">Link</a>)</strong></p></li><li><p><strong>Venus Protocol &#8212; $2.18M Bad Debt (<a href="https://t.me/defendor_eng/1353">Link</a>)</strong></p></li><li><p><strong>dTRINITY Flash Loan &#8212; $257K Drained (<a href="https://t.me/defendor_eng/1356">Link</a>)</strong></p></li></ol><p><strong>&#128478;&#65039; News</strong></p><ol><li><p><strong>Solana Audit Arena Launched (<a href="https://t.me/defendor_eng/1354">Link</a>)</strong></p></li><li><p><strong>Shutter DAO &#8212; Governance Attack Prevented (<a href="https://t.me/defendor_eng/1362">Link</a>)</strong></p></li></ol><p><strong>&#128217; Education</strong></p><ol><li><p><strong>War Room Playbook for Onchain Hacks (<a href="https://t.me/defendor_eng/1359">Link</a>)</strong></p></li><li><p><strong>AI Auditing: 47% Detection, 0% Exploit Success (<a href="https://t.me/defendor_eng/1366">Link</a>)</strong></p></li></ol><div><hr></div><h3>Last Week&#8217;s CTF &#8212; Full Answer</h3><p>Most replies mentioned slippage.</p><p>A few said stale pricing.</p><p>Almost nobody got the exact mechanism.</p><p>Here it is.</p><p>The contract runs two phases.</p><p><strong>Phase 1: Sell every holding into base.</strong></p><p>Simple. Approve the DEX, call the swap, measure the delta. <code>baseReceived</code> builds up across every holding.</p><p><strong>Phase 2: Buy new assets using base.</strong></p><pre><code><code>for (uint256 j; j &lt; newAssets.length;) {
    Token(base).approve(dex, allocateAmounts[j]);
    (bool ok,) = dex.call(buyData[j]);
    require(ok);
    unchecked { ++j; }
}
</code></code></pre><p>One question changes everything:</p><p>Where does <code>allocateAmounts</code> come from?</p><pre><code><code>function reconstitute(
    ...
    uint256[] calldata allocateAmounts
)
</code></code></pre><p>It&#8217;s an input param.</p><p>Passed in from an off-chain entity &#8212;</p><p>a bot, a governor script, some automation.</p><p>That off-chain entity did this:</p><p>Called a view function on the DEX.</p><p>Simulated how much base Phase 1 would produce.</p><p>Built <code>allocateAmounts</code> from that simulation.</p><p>Then triggered <code>reconstitute</code>.</p><p><strong>The gap:</strong></p><p>The view call happens before execution.</p><p>Actual execution happens later.</p><p>Prices move in between.</p><p>Price moves up &#8212; contract receives more base than expected.</p><p>Phase 2 completes. Leftover base sits unspent, unaccounted.</p><p>Price moves down &#8212; contract receives less base than expected.</p><p>Phase 2 tries to spend <code>allocateAmounts</code>.</p><p>Doesn&#8217;t have enough. Swap fails. Transaction reverts.</p><p>DoS.</p><p>That&#8217;s a Medium.</p><p>The question that catches it every time:</p><p>&#8220;Is the amount I&#8217;m spending in Phase 2 guaranteed to match what I received in Phase 1?&#8221;</p><p>If <code>allocateAmounts</code> comes from outside the contract &#8212;</p><p>no guarantee.</p><p><strong>The fix:</strong></p><p>Validate onchain before Phase 2 runs:</p><pre><code><code>uint256 totalNeeded;
for (uint256 j; j &lt; allocateAmounts.length;) {
    totalNeeded += allocateAmounts[j];
    unchecked { ++j; }
}
require(baseReceived &gt;= totalNeeded, "insufficient base");</code></code></pre><p>Or better &#8212; derive <code>allocateAmounts</code> from <code>baseReceived</code></p><p>directly inside the contract. Remove the off-chain dependency entirely.</p><p>The auditor pattern to carry forward:</p><p>When you see a value passed as calldata from an off-chain trigger &#8212; pause.</p><p><strong>Ask three things:</strong></p><ul><li><p>Where was this calculated?</p></li><li><p>When was it calculated?</p></li><li><p>Can the state it referenced change before execution?</p></li></ul><p>&#8220;Pre-quoting&#8221; gives the off-chain system confidence.</p><p>But confidence at quote time isn&#8217;t safety at execution time.</p><p>You&#8217;ll see this in:</p><ul><li><p>Portfolio rebalancers (this one)</p></li><li><p>AMM-based yield strategies</p></li><li><p>Cross-chain transfers with off-chain routing</p></li></ul><p>Any system where automation pre-computes amounts</p><p>and passes them in as params.</p><p>Every time &#8212; ask the same three questions.</p><p>Simple question. Consistent Medium. Sometimes High.</p><p>Arsen</p><div class="poll-embed" data-attrs="{&quot;id&quot;:481313}" data-component-name="PollToDOM"></div><p>Reply with what you want me to cover next &#8212; I read every one.</p>]]></content:encoded></item><item><title><![CDATA[Where the Money Went?]]></title><description><![CDATA[Why blind calldata forwarding breaks DeFi vaults]]></description><link>https://defendor.xyz/p/where-the-money-went</link><guid isPermaLink="false">https://defendor.xyz/p/where-the-money-went</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Thu, 19 Mar 2026 18:01:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!iOXF!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1267d03-5109-49fc-80b0-ef5086357b29_1280x1280.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week we talked about how contests changed and why you need sharper attacking instincts.</p><p>Time to test yours.</p><p><code>BasketRebalancer</code> is an on-chain index fund.</p><p>It holds ERC-20 tokens weighted by basis points.</p><p>A governor can rebalance the basket</p><p>by selling holdings into <code>base</code>,</p><p>then buying new assets.</p><p>Find the vulnerability.</p><p>Answer will be dropped next Monday &#128293;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;796ad020-ff98-41b7-ade6-24be7c9a0d84&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

contract SimpleDex {
    address public owner;
    uint256 public rate = 1e18;

    constructor() { owner = msg.sender; }

    function setRate(uint256 r) external { require(msg.sender == owner); rate = r; }

    function swap(address tIn, address tOut, uint256 amtIn, address to) external returns (uint256 out) {
        Token(tIn).transferFrom(msg.sender, address(this), amtIn);
        out = (amtIn * rate) / 1e18;
        require(out &gt; 0);
        Token(tOut).transfer(to, out);
    }
}

contract BasketRebalancer {
    uint256 constant BPS = 10_000;

    address public governor;
    address public base;
    address public dex;
    address[] public holdings;
    uint256[] public bps;

    constructor(address _gov, address _base, address _dex) {
        governor = _gov; base = _base; dex = _dex;
    }

    function setComposition(address[] calldata a, uint256[] calldata b) external {
        require(msg.sender == governor);
        require(a.length == b.length &amp;&amp; a.length &gt; 0);
        uint256 t;
        for (uint256 i; i &lt; b.length;) { require(b[i] &gt; 0); t += b[i]; unchecked { ++i; } }
        require(t == BPS);
        holdings = a; bps = b;
    }

    function deposit(address token, uint256 amount) external {
        Token(token).transferFrom(msg.sender, address(this), amount);
    }

    function rebalance(
        address[] calldata newAssets,
        uint256[] calldata newBps,
        bytes[]   calldata sellData,
        bytes[]   calldata buyData,
        uint256[] calldata allocateAmounts
    ) external {
        require(msg.sender == governor);
        require(newAssets.length == newBps.length &amp;&amp; newAssets.length &gt; 0);
        require(buyData.length == newAssets.length);
        require(allocateAmounts.length == newAssets.length);

        uint256 t;
        for (uint256 i; i &lt; newBps.length;) { require(newBps[i] &gt; 0); t += newBps[i]; unchecked { ++i; } }
        require(t == BPS);

        // Phase 1: sell all current holdings &#8594; base
        uint256 baseReceived;
        for (uint256 i; i &lt; holdings.length;) {
            address asset = holdings[i];
            uint256 bal = Token(asset).balanceOf(address(this));
            if (bal &gt; 0) {
                if (asset == base) {
                    baseReceived += bal;
                } else {
                    uint256 before = Token(base).balanceOf(address(this));
                    Token(asset).approve(dex, bal);
                    (bool ok,) = dex.call(sellData[i]);
                    require(ok);
                    baseReceived += Token(base).balanceOf(address(this)) - before;
                }
            }
            unchecked { ++i; }
        }

        // Phase 2: buy new assets with base
        if (baseReceived &gt; 0) {
            for (uint256 j; j &lt; newAssets.length;) {
                Token(base).approve(dex, allocateAmounts[j]);
                (bool ok,) = dex.call(buyData[j]);
                require(ok);
                unchecked { ++j; }
            }
            holdings = newAssets;
            bps = newBps;
        }
    }
}</code></pre></div>]]></content:encoded></item><item><title><![CDATA[You understand the code. Now what?]]></title><description><![CDATA[That's not the end. That's the starting line.]]></description><link>https://defendor.xyz/p/you-understand-the-code-now-what</link><guid isPermaLink="false">https://defendor.xyz/p/you-understand-the-code-now-what</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 16 Mar 2026 16:01:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/149fbdae-15ff-4d59-bbac-302d2cdead66_1480x970.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#127988;&#8205;&#9760;&#65039; <strong>Hacks / Bounties</strong></p><ul><li><p><strong>Aave wstETH Oracle Error &#8212; $21M in Unfair Liquidations</strong> (<a href="https://t.me/defendor_eng/1330">Link</a>)</p></li><li><p><strong>DBXen ERC2771 Exploit &#8212; $150K Loss</strong> (<a href="https://t.me/defendor_eng/1334">Link</a>)</p></li><li><p><strong>Alkemi Self-Liquidation &#8212; $90K Loss</strong> (<a href="https://t.me/defendor_eng/1329">Link</a>)</p></li></ul><p>&#128478;&#65039; <strong>News</strong></p><ol><li><p><strong>Ethereum Bug Bounty Raised to 1M</strong> (<a href="https://t.me/defendor_eng/1327">Link</a>)</p></li><li><p><strong>Safe Zodiac Roles Permission Bypass</strong> (<a href="https://t.me/defendor_eng/1325">Link</a>)</p></li></ol><p>&#128217; <strong>Education</strong></p><ol><li><p><strong>9 Common Vault Bugs &#8212; Real Audit Findings </strong>(<a href="https://t.me/defendor_eng/1271">Link</a>)</p></li><li><p><strong>ERC-4337 Account Abstraction Security Risks </strong>(<a href="https://t.me/defendor_eng/1331">Link</a>)</p></li></ol><div><hr></div><h1>Deep Dive</h1><p>That&#8217;s not the end. That&#8217;s the starting line.</p><p>We&#8217;re not programmers. We don&#8217;t write much code.</p><p>We read it. Every day. That&#8217;s the job.</p><p>Nobody teaches you how to read code properly.</p><p>You grind courses, collect tools, study vulnerabilities.</p><p>But the skill senior auditors do 80% of the day?</p><p>Reading code fast and deeply.</p><p>Most people are terrible at it.</p><h2><strong>The problem</strong></h2><p>Here&#8217;s what beginners do.</p><p>They open the codebase. Open the docs.</p><p>50 pages of specs and architecture diagrams.</p><p>Page 5 &#8212; overwhelmed.</p><p>Page 10 &#8212; lost the thread.</p><p>Haven&#8217;t touched a single line of code.</p><p>Or worse &#8212; they jump into one function.</p><p>Go deep immediately. Lose the whole system&#8217;s context.</p><p>Waste 3 hours on something that doesn&#8217;t matter.</p><p>Then they say:</p><div class="pullquote"><p>&#8220;I understand the code. I found nothing.&#8221;</p></div><p>No. You didn&#8217;t understand the code. You just read it.</p><p>The bugs are still sitting there.</p><p><strong>The real problems:</strong></p><ul><li><p><strong>Docs first = overwhelm before you even start</strong></p></li><li><p><strong>Going deep too early = wasted time</strong></p></li><li><p><strong>&#8220;No bugs found&#8221; = you stopped at understanding</strong></p></li><li><p><strong>No system = random scanning, random results</strong></p></li></ul><h2><strong>The 3 layers</strong></h2><p>Code reading has 3 layers.</p><p>Most auditors only do 1 or 2.</p><p><strong>Layer 1: Skim &amp; Contextualize.</strong></p><p>Grab the big picture. Jump into the code. Not docs.</p><p><strong>Layer 2: Deep Read &amp; Memorize.</strong></p><p>Go line by line. Walk the entire flow in your head</p><p>without looking at the screen.</p><p><strong>Layer 3: Research.</strong></p><p>This is where bugs actually live.</p><p>NOW read the docs. Compare to reality.</p><p>Study other protocols. Work backwards from failure modes.</p><p>Here&#8217;s the game-changer:</p><p>AI accelerates Layer 1 massively.</p><p>Feed it each function. Get line-by-line comments.</p><p>Ask it to explain flows above each function.</p><p>You get context 10x faster &#8212; and save that time for Layer 3.</p><p>Most auditors stop after Layer 2.</p><p>The ones finding criticals? They live in Layer 3.</p><h2><strong>The playbook</strong></h2><p><strong>LAYER 1: SKIM &amp; CONTEXTUALIZE</strong></p><ul><li><p>Jump into code first. Not docs. </p></li><li><p>Skim every function without going deep.</p></li><li><p>Identify entry points, libraries, integrations, main actors.</p></li><li><p>Use AI as your co-pilot here:</p></li></ul><p>feed each function &#8594; get comments &#8594; map the flows.</p><ul><li><p>This is orientation. Not understanding yet.</p></li></ul><div class="pullquote"><p>Common mistake: reading 50 pages of docs before touching code.</p></div><p>You&#8217;ll lose context before you start.</p><p><strong>LAYER 2: DEEP READ &amp; MEMORIZE</strong></p><ul><li><p>Go function by function, line by line.</p></li><li><p>For each critical function: what it validates,</p></li></ul><p>who can call it, what state it changes.</p><ul><li><p>The goal: close the editor.</p></li></ul><p>Explain the entire flow from memory.</p><ul><li><p>If you get stuck &#8212; do another pass.</p></li><li><p>~50% of your audit time = Layer 1 + Layer 2.</p></li></ul><p>Common mistake: moving to &#8220;bug hunting&#8221;</p><p>before you can explain the system from memory.</p><p><strong>LAYER 3: RESEARCH (where bugs live)</strong></p><ul><li><p>Read the docs NOW.</p></li></ul><p>Compare every claim to the code. Contradictions = bugs.</p><ul><li><p>List developer assumptions. Ask: &#8220;What if this is wrong?&#8221;</p></li><li><p>Study how other protocols solve the same problem.</p></li><li><p>Research every error in try-catch blocks.</p></li><li><p>Work backwards: all failure modes &#8594; eliminate what can&#8217;t happen</p></li></ul><p>&#8594; what survives is your attack surface.</p><p>Common mistake: treating &#8220;I understand the code&#8221;</p><p>as the finish line instead of the starting line.</p><p>Timeline for a 10-day engagement:</p><ul><li><p>Days 1&#8211;2: Layer 1 &#8212; skim, map, use AI</p></li><li><p>Days 2&#8211;5: Layer 2 &#8212; deep read, memorize</p></li><li><p>Days 5&#8211;10: Layer 3 &#8212; research, docs, comparisons</p></li></ul><p>Arsen</p><div class="poll-embed" data-attrs="{&quot;id&quot;:472394}" data-component-name="PollToDOM"></div><p>Reply with what you want me to cover next &#8212; I read every one.</p>]]></content:encoded></item><item><title><![CDATA[How to approach contests in 2026]]></title><description><![CDATA[How to approach contests correctly]]></description><link>https://defendor.xyz/p/how-to-approach-contests-in-2026</link><guid isPermaLink="false">https://defendor.xyz/p/how-to-approach-contests-in-2026</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Mon, 02 Mar 2026 17:01:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/086414c2-5bad-40b1-b14b-831321706ff5_1476x982.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey, it&#8217;s Arsen.</p><p>In today&#8217;s menu:</p><ul><li><p>Why the old contest playbook is dead &#8212; and the 3 shifts that replaced it</p></li><li><p>$10.8M oracle hack, $150K live contest, AI finds a Uniswap bug</p></li><li><p>What to do before your next contest (most skip this)</p></li></ul><p></p><p><strong>Best links this week:</strong></p><p>&#127988;&#8205;&#9760;&#65039; <strong>YieldBlox drained for $10.8M via oracle manipulation</strong> &#8594; <a href="https://github.com/DK27ss/YieldBlox-10M-PoC">link</a></p><p>&#127988;&#8205;&#9760;&#65039; <strong>Guardian drops $150K AMM contest &#8212; LimitBreak</strong> &#8594; <a href="https://defender.guardianaudits.com/contests/6998a6cf6a508136784689d0">link</a></p><p>&#128478;&#65039; <strong>Uniswap V4 bug found via AI-assisted auditing</strong> &#8594; <a href="https://x.com/i/status/2025848523724312609">link</a></p><p>&#128217; <strong>Zellic: Inside the SVM &#8212; sBPF JIT pitfalls</strong> &#8594; <a href="https://www.zellic.io/blog/solana-sbpf/">link</a></p><p></p><h1>Deep dive</h1><p>Everyone says contests are dead.</p><p>Everyone says junior auditors are cooked.</p><p>Here&#8217;s the truth: no one knows.</p><p>There&#8217;s only opinions. And one fact.</p><p>The complexity bar is rising.</p><p>Forget about weird ERC20 tokens.</p><p>In 2021, people earned good money on simple bugs. Set up firms. Called themselves auditors.</p><p>In reality &#8212; intermediate at best.</p><p>When I jumped in during 2024, it was harder. Bugs weren&#8217;t trivial. But there were still plays. Dummy bugs earning $20K+.</p><p>Now? One way forward.</p><p>Prove you can find deep bugs in business logic.</p><p>But here&#8217;s what most people miss.</p><p>Contests aren&#8217;t dead.</p><p>The old approach to contests is dead.</p><p>&#8220;Jump in, learn on the go, find some bugs, get paid.&#8221;</p><p>That worked 1-2 years ago. Not anymore.</p><p>A contest in 2026 is a test.</p><p>A test for auditors hungry enough to adapt.</p><p>Less &#8220;animals&#8221; to hunt. So you change the strategy.</p><p></p><p>Here&#8217;s what actually works now:</p><h3><strong>1. Combine forces.</strong></h3><p>Why hunt alone?</p><p>Find 2-3 hungry auditors. Build a system for gathering project context fast.</p><p>That&#8217;s what eats your time &#8212; understanding, not hunting.</p><p>The mistake juniors make: rushing to submit.</p><p>Low-hanging fruit gets duplicated by 200 people. Real bugs hide deeper. You need research time after you already understand the system.</p><p></p><h3><strong>2. Use AI for understanding. Not hunting.</strong></h3><p>AI makes you dumb if you let it.</p><p>Critical thinking is the one skill you must develop. </p><p>Without it &#8212; $1 leaderboard auditor forever.</p><p>Use AI to gain context faster. Not to find the bugs.</p><p>The best AI usage comes from seniors who know what to aim it at. </p><p>If you&#8217;re junior, don&#8217;t overrely.</p><p></p><h3><strong>3. Specialize in one domain.</strong></h3><p>Early on, I jumped from contest to contest. </p><p>Cross-chain. AMM. Lending.</p><p>Nothing stuck.</p><p>Now? Pick one domain.</p><p>AMM contest dropping in 2 weeks?</p><p>Grind hard on AMM knowledge, bugs, patterns. Show up prepared. Not hoping. Prepared.</p><p>And treat every contest as compound interest.</p><p>Low payouts? You&#8217;re building the muscle.</p><p>Pattern recognition. Speed. Domain knowledge.</p><p>30 contests with small wins will crush quitting after 3.</p><p>After each one &#8212; write a 5-line retro.</p><p>What you found. What you missed. What you&#8217;d change.</p><p>That&#8217;s your personal edge database.</p><p>Stop measuring success by payout alone.</p><p>The real ROI is the skill compounding.</p><p>This newsletter gives you the direction.</p><blockquote><p>But the full system &#8212; team audit setups, contest prep workflows, domain specialization paths, weekly live Q&amp;As where I break down exactly how I approach each contest &#8212; that&#8217;s what we build inside <a href="https://www.skool.com/defendor">Defendor Academy.</a></p></blockquote><p>If you want to stop guessing and start winning, everything you need is there. <a href="https://www.skool.com/defendor">[link]</a></p><p>See you there</p>]]></content:encoded></item><item><title><![CDATA[Top-1 Must-Have Skill for Security Researchers]]></title><description><![CDATA[This one is significant. If You believe you&#8217;ve found all the bugs &#8212; and you stop early, you've failed]]></description><link>https://defendor.xyz/p/top-1-must-have-skill-for-security</link><guid isPermaLink="false">https://defendor.xyz/p/top-1-must-have-skill-for-security</guid><dc:creator><![CDATA[Arsen]]></dc:creator><pubDate>Sun, 08 Feb 2026 14:48:46 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/79430712-15f0-4c94-ae9b-a70d3bc41c08_1234x760.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This one is significant.</p><p>Play close attention.</p><p>Since it destroys <strong>80%</strong> of auditors, including ones with a strong track record.</p><p>It&#8217;s simple:</p><blockquote><p>You believe you&#8217;ve found all the bugs &#8212; and you stop early.</p></blockquote><p>This is the most common self-inflicted mistake in Web3 security.</p><p>Not because you&#8217;re unskilled.</p><p>But because your brain wants comfort.</p><p>Auditing is mentally hard.</p><p>You stare at the same lines for hours.</p><p>You stretch your mind to generate new attack angles again and again.</p><p>And the moment you <em>feel</em> like you&#8217;ve &#8220;made progress,&#8221; your brain tries to convince you:</p><p>&#8220;Good job. Enough. You&#8217;re done.&#8221;</p><p>This is the trap.</p><p>And there is only one rule that breaks it:</p><blockquote><p><em><strong>Bugs always exist. Hunt until the last second.</strong></em></p></blockquote><p>Remember it.</p><p>Stick it into your audit identity.</p><p><em><strong>This rule alone will change your entire progress curve &#8212; because it forces your brain to stay in attacker mode instead of comfort mode.</strong></em></p><p>And 2025 proved this point brutally well.</p><p>Balancer &#8212; broken.</p><p>GMX &#8212; broken.</p><p>After years of operation.</p><p>After multiple audits.</p><p>After thousands of eyes.</p><p>And you still think a 3-4 week audit means &#8220;everything is covered&#8221;?</p><p>Let me show you the moment that permanently completely changed me.</p><p>Early 2025.</p><p>I was collaborating with very well known audit firm</p><p>This specific audit was conducted by use a 2x2 structure:</p><p>Two auditors vs two auditors, competing on the same repo.</p><blockquote><p><em><strong>It&#8217;s one of the most effective ways to boost curiosity, aggression, and pace during an audit.</strong></em></p></blockquote><p>But the strongest part isn&#8217;t the competition.</p><p>It&#8217;s the scoreboard.</p><p>You can&#8217;t see the issues themselves &#8212; but you <em>can</em> see how many H/M/L the other team has found.</p><p>Now picture this.</p><p>Last day of the audit.</p><p>I slowed down.</p><p>I <em>thought</em> the repo was empty. I convinced myself that the hard bugs were already found.</p><p>Then a message pops up:</p><blockquote><p>&#8220;Other team is 1H ahead.&#8221;</p></blockquote><ul><li><p>Instant adrenaline.</p></li><li><p>Instant humiliation.</p></li><li><p>Instant clarity.</p></li></ul><p>I closed everything I was doing &#8212; restaurant, cinema, didn&#8217;t matter &#8212;</p><p>opened my laptop and hunted like an animal.</p><h3>Example <strong><a href="https://www.notion.so/Mismatch-Between-Redemption-Calculation-and-Available-Margin-20bb02576124814b9e12c1c85973bb83?pvs=21">link</a></strong></h3><p>To understand this bug, you need just <strong>one idea</strong>:</p><p><strong>Collateral and PnL are updated through different mechanisms.</strong></p><ul><li><p><strong>Collateral</strong> updates through:<code>modifyCollateral()</code> or <code>_settleOrder()</code></p></li><li><p><strong>PnL</strong> updates <em>only</em> when you call:<code>_settleOrder()</code></p></li></ul><p>Meaning:</p><blockquote><p>Your collateral does NOT include PnL until you commit-settle.</p></blockquote><p>But the vault&#8217;s <code>redeem</code> logic assumes the opposite.</p><p><strong>Where Things Break</strong></p><p>The redeem flow calls <code>_valueToRedeem()</code>:</p><pre><code><code>valueToRedeem = totalAssets() * (shares / totalSupply)</code></code></pre><p>And here&#8217;s the problem:</p><p><code>totalAssets()</code><em><strong> includes PnL &#8212; even if it&#8217;s NOT settled yet.</strong></em></p><p>So the vault uses <strong>unrealized, un-settled PnL</strong> as if it already exists as collateral.</p><p>Then, during actual withdrawal, the vault calls <code>modifyCollateral</code>:</p><ul><li><p><code>modifyCollateral</code> works with <strong>real collateral tokens only</strong></p></li><li><p>It <strong>cannot</strong> withdraw unrealized PnL (because it&#8217;s not collateral yet)</p></li></ul><p>This creates a mismatch.</p><p>And every single time similar push, I found something I would&#8217;ve missed if I relaxed.</p><p>This is the truth nobody wants to admit:</p><blockquote><p><em><strong>If you want to grow, you must hunt actively &#8212; until the last second. Not until you&#8217;re comfortable. Until the code is empty.</strong></em></p></blockquote><p>This is the difference between plateaus and breakthroughs.</p><p>Between $2k bugs and $200k bugs.</p><p>Between staying mid and becoming senior.</p>]]></content:encoded></item></channel></rss>