<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Jiri123 Security Research</title>
<link>https://www.jiri123.xyz/</link>
<atom:link href="https://www.jiri123.xyz/feed.xml" rel="self" type="application/rss+xml"/>
<description>Field notes from a security researcher working in the age of AI.</description>
<language>en-US</language>
<item>
  <title>Why cached tokens are so cheap</title>
  <link>https://www.jiri123.xyz/posts/llm-prompt-caching/</link>
  <guid>https://www.jiri123.xyz/posts/llm-prompt-caching/</guid>
  <pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
  <category>Notes</category>
  <description>AI APIs charge as little as a tenth, sometimes a fortieth, of the normal input price for tokens they have seen before. The discount comes from skipping work the GPU already did. Most providers cache automatically, and keeping what changes at the end of the prompt gets you more hits. A cache hit only means your own organization sent the same prefix, although a 2025 audit found seven providers where caches were shared across users.</description>
</item>
<item>
  <title>What Jev can and can&#39;t do for bug bounty hunting</title>
  <link>https://www.jiri123.xyz/posts/jev-for-bug-bounties/</link>
  <guid>https://www.jiri123.xyz/posts/jev-for-bug-bounties/</guid>
  <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
  <category>Notes</category>
  <description>TypeSafe&#39;s Jev answers typed questions in well under a second for a fraction of a cent. I ran it on the code of a real Cantina contest, where two models together put 5 of the 9 confirmed bugs in their top 15 functions. That makes it a decent way to pick what to read first. It missed every bug that needed a neighboring function and can&#39;t say why a function looks wrong, so I still wouldn&#39;t use it to find bugs. As a judge, I&#39;d use it to sort duplicates.</description>
</item>
<item>
  <title>Write the PoC anyway</title>
  <link>https://www.jiri123.xyz/posts/write-the-poc/</link>
  <guid>https://www.jiri123.xyz/posts/write-the-poc/</guid>
  <pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate>
  <category>Audits</category>
  <description>I was annoyed when Cantina made proofs of concept mandatory. After a year of competing and judging, and a flood of AI-generated reports, I think it&#39;s the most useful rule in audit competitions.</description>
</item>
<item>
  <title>__Ownable2Step_init no longer sets an owner in OpenZeppelin 5</title>
  <link>https://www.jiri123.xyz/posts/ownable2step-oz5-initial-owner/</link>
  <guid>https://www.jiri123.xyz/posts/ownable2step-oz5-initial-owner/</guid>
  <pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate>
  <category>Notes</category>
  <description>In OpenZeppelin Contracts Upgradeable 4.x, calling __Ownable2Step_init() made the caller the owner. In 5.x it does nothing. Bump the dependency without updating your initializers, and new deployments end up with no owner at all.</description>
</item>
<item>
  <title>Rescuing NFTs during the Payment Processor exploit</title>
  <link>https://www.jiri123.xyz/posts/paymentprocessor-nft-rescue/</link>
  <guid>https://www.jiri123.xyz/posts/paymentprocessor-nft-rescue/</guid>
  <pubDate>Wed, 30 Sep 2026 00:00:00 GMT</pubDate>
  <category>Incidents</category>
  <description>In September 2026, an approval exploit drained NFTs and WETH from wallets that had approved Limit Break&#39;s Payment Processor. Here is what happened, why I stepped in as a whitehat, and how the assets went back to their owners.</description>
</item>
</channel>
</rss>
