<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cve on Tolmo</title><link>https://tolmo.com/tags/cve/</link><description>Recent content in Cve on Tolmo</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 14 Oct 2026 09:00:00 -0700</lastBuildDate><atom:link href="https://tolmo.com/tags/cve/index.xml" rel="self" type="application/rss+xml"/><item><title>One byte in nginx, and why 90 days is too long</title><link>https://tolmo.com/blog/one-byte-in-nginx/</link><pubDate>Wed, 14 Oct 2026 09:00:00 -0700</pubDate><guid>https://tolmo.com/blog/one-byte-in-nginx/</guid><description>&lt;h2 id="in-short"&gt;In short&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;F5 published &lt;a href="https://my.f5.com/manage/s/article/K000162607"&gt;K000162607&lt;/a&gt;
today for &lt;strong&gt;CVE-2026-93479&lt;/strong&gt;, a heap buffer overflow in nginx&amp;rsquo;s script
engine. We reported it on July 25. Fixed in nginx 1.31.7 and 1.30.6.&lt;/li&gt;
&lt;li&gt;It is a one-byte NUL write past a heap allocation, reachable without
authentication through the &lt;code&gt;access_log&lt;/code&gt; path in both HTTP and Stream. In
Stream, a bare TLS ClientHello is enough.&lt;/li&gt;
&lt;li&gt;It is an incomplete-fix variant of CVE-2026-42533, the &amp;ldquo;major&amp;rdquo; map and
regex overflow patched in June. The hardening capped copies at the end of
the buffer, but the end of the buffer included the caller&amp;rsquo;s NUL reserve.&lt;/li&gt;
&lt;li&gt;nginx wrote the fix in four days. The advisory shipped 81 days after our
report. The advisory credits a second researcher, so the bug was found at
least twice while it sat in the queue.&lt;/li&gt;
&lt;li&gt;Vulnerability discovery now runs at machine speed. Disclosure and patching
still run at calendar speed. The second part of this post is about closing
that gap.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="part-1-the-bug"&gt;Part 1: the bug&lt;/h2&gt;
&lt;p&gt;nginx evaluates variable-bearing strings, including the &lt;code&gt;access_log&lt;/code&gt; file
path, with a two-pass script engine. Pass one runs &lt;em&gt;length codes&lt;/em&gt; and adds up
how many bytes the result needs. Pass two runs &lt;em&gt;copy codes&lt;/em&gt; and writes the
bytes into a buffer sized exactly by pass one. The caller asks for one extra
byte on top, the &lt;code&gt;len&lt;/code&gt; argument, so it can append a NUL terminator.&lt;/p&gt;</description></item></channel></rss>