<?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>Fri, 09 Oct 2026 16:19:55 +0000</lastBuildDate>
    <item>
      <title>GHSA-w8wr-v893-vjvp — node-tar: Process crash via PAX numeric path type confusion</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-w8wr-v893-vjvp</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: tar&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A crafted 2.5KB tar archive crashes any Node.js process that extracts it. The PAX header parser coerces all-digit path values to JavaScript numbers, which causes an uncaught TypeError when downstream code calls `.split(&amp;#39;/&amp;#39;)` on the numeric value. Error handlers and `strict: false` cannot intercept the crash.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;In `pax.ts` line 180, `parseKV` converts PAX values matching `/^[0-9]+$/` to numbers via `+v`. This applies to all fields including `path` and `linkpath`. When a PAX header sets `path` to an all-digit string like `&amp;#34;12345&amp;#34;`, the value becomes the number `12345`.&lt;/p&gt;
&lt;p&gt;This number flows through Header -&amp;gt; ReadEntry -&amp;gt; Unpack.CHECKPATH, where `normalizeWindowsPath(entry.path).split(&amp;#39;/&amp;#39;)` throws a TypeError because numbers don&amp;#39;t have `.split()`.&lt;/p&gt;
&lt;p&gt;The throw is synchronous during event emission and bypasses all error handling:
- `strict: false` does not help
- `&amp;#39;error&amp;#39;` event handlers do not catch it
- `&amp;#39;warn&amp;#39;` handlers do not catch it
- The TypeError propagates through the event emitter stack as an uncaughtException&lt;/p&gt;
&lt;p&gt;Directory, SymbolicLink, and Link type entries reach CHECKPATH and crash. File type entries crash earlier in Header constructor at `this.path.slice(-1)`, but that throw is caught and emitted as a warning only.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;Create a tar archive with a PAX extended header containing an all-digit path:&lt;/p&gt;
&lt;p&gt;```
PAX header body: &amp;#34;18 path=12345\n&amp;#34;
Entry type: Directory (type &amp;#39;5&amp;#39;)
```&lt;/p&gt;
&lt;p&gt;Extract it:
```js
const tar = require(&amp;#39;tar&amp;#39;);&lt;/p&gt;
&lt;p&gt;// All of these crash w…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: tar&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A crafted 2.5KB tar archive crashes any Node.js process that extracts it. The PAX header parser coerces all-digit path values to JavaScript numbers, which causes an uncaught TypeError when downstream code calls `.split(&amp;#39;/&amp;#39;)` on the numeric value. Error handlers and `strict: false` cannot intercept the crash.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;In `pax.ts` line 180, `parseKV` converts PAX values matching `/^[0-9]+$/` to numbers via `+v`. This applies to all fields including `path` and `linkpath`. When a PAX header sets `path` to an all-digit string like `&amp;#34;12345&amp;#34;`, the value becomes the number `12345`.&lt;/p&gt;
&lt;p&gt;This number flows through Header -&amp;gt; ReadEntry -&amp;gt; Unpack.CHECKPATH, where `normalizeWindowsPath(entry.path).split(&amp;#39;/&amp;#39;)` throws a TypeError because numbers don&amp;#39;t have `.split()`.&lt;/p&gt;
&lt;p&gt;The throw is synchronous during event emission and bypasses all error handling:
- `strict: false` does not help
- `&amp;#39;error&amp;#39;` event handlers do not catch it
- `&amp;#39;warn&amp;#39;` handlers do not catch it
- The TypeError propagates through the event emitter stack as an uncaughtException&lt;/p&gt;
&lt;p&gt;Directory, SymbolicLink, and Link type entries reach CHECKPATH and crash. File type entries crash earlier in Header constructor at `this.path.slice(-1)`, but that throw is caught and emitted as a warning only.&lt;/p&gt;
&lt;p&gt;### PoC&lt;/p&gt;
&lt;p&gt;Create a tar archive with a PAX extended header containing an all-digit path:&lt;/p&gt;
&lt;p&gt;```
PAX header body: &amp;#34;18 path=12345\n&amp;#34;
Entry type: Directory (type &amp;#39;5&amp;#39;)
```&lt;/p&gt;
&lt;p&gt;Extract it:
```js
const tar = require(&amp;#39;tar&amp;#39;);&lt;/p&gt;
&lt;p&gt;// All of these crash w…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-w8wr-v893-vjvp</guid>
    </item>
  </channel>
</rss>
