<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Sat, 03 Oct 2026 23:03:02 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-71498</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-71498</link>
      <description>&lt;p&gt;node-re2 provides RE2 regular expression bindings for Node.js. Prior to version 1.26.1, passing a Buffer whose final bytes form a truncated (incomplete) multi-byte UTF-8 sequence could cause the native binding to read past the end of the allocated buffer while attempting to decode the final, incomplete code point. This could result in an out-of-bounds read and potential disclosure of adjacent memory contents. This issue is fixed in version 1.26.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;node-re2 provides RE2 regular expression bindings for Node.js. Prior to version 1.26.1, passing a Buffer whose final bytes form a truncated (incomplete) multi-byte UTF-8 sequence could cause the native binding to read past the end of the allocated buffer while attempting to decode the final, incomplete code point. This could result in an out-of-bounds read and potential disclosure of adjacent memory contents. This issue is fixed in version 1.26.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-71498</guid>
    </item>
    <item>
      <title>GHSA-j4r3-hg7j-8chg — node-re2: Out-of-bounds heap read in `replace`/`split` via a `Buffer` ending in a truncated multi-byte UTF-8 character…</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-j4r3-hg7j-8chg</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: re2&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`re2` infers a character&amp;#39;s byte length from its UTF-8 lead byte alone, with no bound on the
bytes actually remaining in the input. `Buffer` arguments reach the native layer verbatim —
only strings are re-encoded into well-formed UTF-8 — so a `Buffer` whose last byte is a
multi-byte lead promises continuation bytes that are not there, and the result builders read
up to 3 bytes past the end of the buffer. In `replace()` and `split()` those bytes are copied
into the returned `Buffer`, disclosing adjacent heap memory to JavaScript. The trigger is
deterministic and requires no special heap grooming.&lt;/p&gt;
&lt;p&gt;Only `Buffer` input is affected. String input was never at risk: re-encoding guarantees every
multi-byte sequence is complete.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;`getUtf8CharSize` maps a lead byte to a length of 1–4 and never sees the input size:&lt;/p&gt;
&lt;p&gt;```cpp
// lib/wrapped_re2.h
inline size_t getUtf8CharSize(char ch)
{
      return ((0xE5000000 &amp;gt;&amp;gt; ((ch &amp;gt;&amp;gt; 3) &amp;amp; 0x1E)) &amp;amp; 3) + 1;
}
```&lt;/p&gt;
&lt;p&gt;Callers then read that many bytes. In the zero-width branch of `replace()`, the guard proves
only that at least *one* byte remains:&lt;/p&gt;
&lt;p&gt;```cpp
// lib/replace.cc
else if ((size_t)offset &amp;lt; size)
{
      auto sym_size = getUtf8CharSize(data[offset]);   // may claim up to 4 bytes
      result.append(data + offset, sym_size);          // reads data[offset .. offset + 3]
      byteIndex = offset + sym_size;
}
```&lt;/p&gt;
&lt;p&gt;`offset &amp;lt; size` permits `offset == size - 1`, so a lead byte of `0xF0` makes `append` read
`data[size]`, `data[…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: re2&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`re2` infers a character&amp;#39;s byte length from its UTF-8 lead byte alone, with no bound on the
bytes actually remaining in the input. `Buffer` arguments reach the native layer verbatim —
only strings are re-encoded into well-formed UTF-8 — so a `Buffer` whose last byte is a
multi-byte lead promises continuation bytes that are not there, and the result builders read
up to 3 bytes past the end of the buffer. In `replace()` and `split()` those bytes are copied
into the returned `Buffer`, disclosing adjacent heap memory to JavaScript. The trigger is
deterministic and requires no special heap grooming.&lt;/p&gt;
&lt;p&gt;Only `Buffer` input is affected. String input was never at risk: re-encoding guarantees every
multi-byte sequence is complete.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;`getUtf8CharSize` maps a lead byte to a length of 1–4 and never sees the input size:&lt;/p&gt;
&lt;p&gt;```cpp
// lib/wrapped_re2.h
inline size_t getUtf8CharSize(char ch)
{
      return ((0xE5000000 &amp;gt;&amp;gt; ((ch &amp;gt;&amp;gt; 3) &amp;amp; 0x1E)) &amp;amp; 3) + 1;
}
```&lt;/p&gt;
&lt;p&gt;Callers then read that many bytes. In the zero-width branch of `replace()`, the guard proves
only that at least *one* byte remains:&lt;/p&gt;
&lt;p&gt;```cpp
// lib/replace.cc
else if ((size_t)offset &amp;lt; size)
{
      auto sym_size = getUtf8CharSize(data[offset]);   // may claim up to 4 bytes
      result.append(data + offset, sym_size);          // reads data[offset .. offset + 3]
      byteIndex = offset + sym_size;
}
```&lt;/p&gt;
&lt;p&gt;`offset &amp;lt; size` permits `offset == size - 1`, so a lead byte of `0xF0` makes `append` read
`data[size]`, `data[…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-j4r3-hg7j-8chg</guid>
    </item>
    <item>
      <title>UBUNTU-CVE-2026-71498</title>
      <link>https://vulnerability.circl.lu/vuln/ubuntu-cve-2026-71498</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:20.04:LTS: node-re2, Ubuntu:22.04:LTS: node-re2, Ubuntu:24.04:LTS: node-re2, Ubuntu:26.04:LTS: node-re2&lt;/p&gt;
&lt;p&gt;node-re2 provides RE2 regular expression bindings for Node.js. Prior to version 1.26.1, passing a Buffer whose final bytes form a truncated (incomplete) multi-byte UTF-8 sequence could cause the native binding to read past the end of the allocated buffer while attempting to decode the final, incomplete code point. This could result in an out-of-bounds read and potential disclosure of adjacent memory contents. This issue is fixed in version 1.26.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:20.04:LTS: node-re2, Ubuntu:22.04:LTS: node-re2, Ubuntu:24.04:LTS: node-re2, Ubuntu:26.04:LTS: node-re2&lt;/p&gt;
&lt;p&gt;node-re2 provides RE2 regular expression bindings for Node.js. Prior to version 1.26.1, passing a Buffer whose final bytes form a truncated (incomplete) multi-byte UTF-8 sequence could cause the native binding to read past the end of the allocated buffer while attempting to decode the final, incomplete code point. This could result in an out-of-bounds read and potential disclosure of adjacent memory contents. This issue is fixed in version 1.26.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ubuntu-cve-2026-71498</guid>
    </item>
  </channel>
</rss>
