Watari Labs / Security

Security research.
A public record of the work.

Findings, CVEs, and the evidence behind our fixes. We explain the cause, check how our software uses the affected code, and show what changed.

Prepared by Watari-Dev. Reviewed 9 October 2026. This page is a dated snapshot; each GitHub report shows its live status.

Public reports
35
Closed fix records
35
Fixes in review
0
Awaiting upstream
0

Evidence before claims

These reports cover LabTether Hub source findings, console dependencies, and website build tools. Published dependency CVEs keep their original identifiers and researcher credit. GHSA-only and LabTether source findings do not claim an unassigned CVE. A dependency match, source review, and reproduced exploit are different forms of evidence; each report says which we have.

Report a new issue privately

Use LabTether’s private reporting channel for an undisclosed LabTether issue. For another Watari Labs product, contact support@watari.dev without sending secrets or exploit details in the first message.

Verified source fixes

Closed public records backed by verified source changes and passing checks. Each record states its fix date and release limits.

LT-SEC-2026-04

Restricted PBS datastore details can include sibling task metadata

LabTether Hub PBS API · Main, 8 Oct 2026 → Main, 8 Oct 2026 · Fixed in source · see record

Finding and root cause

Datastore details fetched node-wide tasks and matched a datastore name anywhere in each worker ID. A task for backup-prod could therefore appear in details for allowed datastore backup. The merged fix omits node-wide tasks for asset-restricted requests.

Impact and LabTether scope

An authenticated connectors:read key restricted to one datastore asset may see a similarly named sibling store task's metadata. No backup content, credentials, task control, or live exploitation was shown. This is an internal research ID, not an assigned CVE.

The path was verified in public Hub tags v1.2.0, v1.2.1, v1.2.2, v1.3.0, and v1.4.0. v1.2.0 is the earliest tag checked; the first affected release and deployment exposure remain unknown.

Fix and validation

PR #206 merged as 1150f311c881 on 8 October 2026. Required PR CI, the focused PBS regression on merged main, and the 500-line check passed. A local mock supplied own and sibling tasks; no live PBS server or production Hub was tested.

Fixed in Hub source on main, 8 October 2026. No fixed tagged release, container image, or installed Hub is certified.

LT-SEC-2026-01

Public agent binary Range requests repeat full-file hashes

LabTether Hub binary download · Main, 7 Oct 2026 → Main, 8 Oct 2026 · Fixed in source · see record

Finding and root cause

The public download handler verifies the full binary hash before processing a Range request. Repeated one-byte requests repeat whole-file reads and SHA-256 work. The digest check is needed for integrity; the merged fix retains verified bytes for later requests.

Impact and LabTether scope

A caller who can reach a Hub with a loaded manifest and matching binary can impose disproportionate work with small requests. Source review proves the repeated hash, but no live slowdown or outage was measured. This is an internal research ID, not an assigned CVE.

The affected source revision is untagged main on 7 October 2026. Available release tags did not contain this exact per-request hash path. Deployment exposure and proxy limits were not measured.

Fix and validation

PR #201 passed focused binary and Range tests, agent-package tests, Go vet, race tests, and required CI. The tests check the merged fix; no production target or live exploit was used. PR #201 merged as db95f0200ce3; current main CI and the 500-line check pass.

Fixed in Hub source on main, 8 October 2026. No tagged release, container image, or installed Hub fix is certified.

LT-SEC-2026-02

Force-update installer uses a predictable root log path

LabTether Linux installer · v1.2.0–v1.4.0 → Main, 8 Oct 2026 · Fixed in source · see record

Finding and root cause

The optional --force-update path writes root updater output to a fixed filename in shared /tmp. On hosts that permit following a local user's prepared symlink, shell redirection can truncate a root-writable target. The merged fix creates a private temporary log under the root-owned configuration directory.

Impact and LabTether scope

This needs local access, a root operator choosing --force-update, and permissive symlink handling. Linux protected-symlink policy can block it. No privileged overwrite, code execution, or remote attack was demonstrated. This internal research ID is not an assigned CVE.

The path was verified in the public Hub release tags v1.2.0, v1.2.1, v1.2.2, v1.3.0, and v1.4.0. The first affected release remains unknown.

Fix and validation

PR #201 passed generated-installer success and failure tests, agent-package tests, Go vet, race tests, and required CI. No real host exploit was run. PR #201 merged as db95f0200ce3; current main CI and the 500-line check pass.

Fixed in Hub source on main, 8 October 2026. No fixed tagged release, agent package, or installed system is certified.

LT-SEC-2026-03

Agent update progress can forge Hub log lines

LabTether Hub agent messages · v1.2.0–v1.4.0 → Main, 8 Oct 2026 · Fixed in source · see record

Finding and root cause

The Hub logged agent-supplied update progress with raw line breaks and did not check that it requested the named update from that agent. The merged fix binds progress to a live asset-specific update and escapes logged control characters.

Impact and LabTether scope

An enrolled agent or holder of its asset-bound bearer could make misleading Hub process-log lines. This does not run an update, give admin access, or write another asset. No downstream alert effect or live exploit was tested. This internal research ID is not an assigned CVE.

The route and raw log sink were verified in public Hub release tags v1.2.0, v1.2.1, v1.2.2, v1.3.0, and v1.4.0. The first affected release remains unknown.

Fix and validation

PR #201 passed focused log escaping and update-correlation tests, agent-package tests, Go vet, race tests, and required CI. No production agent or Hub was tested. PR #201 merged as db95f0200ce3; current main CI and the 500-line check pass.

Fixed in Hub source on main, 8 October 2026. No fixed tagged release, container image, or installed Hub is certified.

CVE-2026-102277

brace-expansion: Quadratic-time expansion of the `{a},b}` rewrite causes CPU denial of service

brace-expansion · 5.0.9 → 5.0.12 · Fixed in source · see record

Finding and root cause

Repeated brace rewrites restart scans without a rewrite counter. Existing result and length limits do not bound this branch; hostile patterns can consume excessive CPU. The inspected patch adds a rewrite budget.

Impact and LabTether scope

An attacker who controls brace patterns passed to brace-expansion 5.0.9 can make a Node.js process repeat expensive parsing. LabTether's assessed copy belongs to console development tooling; no remote request-to-pattern route was found. This report covers remediation of GHSA-q2hr-2g5m-vwhr / CVE-2026-102277, with no confirmed LabTether exploitation.

Development tooling through minimatch and ESLint. No product path accepting hostile expansion patterns was found.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-102278

brace-expansion: DoS via uncontrolled recursion on nested brace groups causing stack exhaustion

brace-expansion · 5.0.9 → 5.0.12 · Fixed in source · see record

Finding and root cause

Nested brace groups recurse without a depth check in the affected release. Output limits are reached too late to prevent stack exhaustion. The selected upstream release adds bounded parsing.

Impact and LabTether scope

An attacker who can feed deeply nested patterns into brace-expansion 5.0.9 could exhaust the process stack. LabTether’s assessed console lockfile contains that version in development tooling. No product import or remote attacker-to-pattern route was found, so this is a dependency remediation report, not confirmed LabTether exploitation. The underlying issue is GHSA-qhr7-859c-m2p7 / CVE-2026-102278.

Development tooling through minimatch and ESLint. No product path accepting hostile expansion patterns was found.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-102276

brace-expansion: DoS via uncontrolled recursion in parseCommaParts causing stack exhaustion

brace-expansion · 5.0.9 → 5.0.12 · Fixed in source · see record

Finding and root cause

The comma parser recursively processes the remaining suffix of a brace pattern. Long comma structures can exhaust the stack. The selected upstream release removes this unbounded recursion.

Impact and LabTether scope

An attacker who can supply a pattern to an application using brace-expansion 5.0.9 can reach unbounded parser recursion and oversized function argument lists. Upstream reports stack exhaustion; an uncaught exception can terminate the consuming process. No remote attacker-to-pattern path was established in LabTether. Upstream lists >=4.0.0, <5.0.10 as affected and 5.0.10 as first patched.

Development tooling through minimatch and ESLint. No product path accepting hostile expansion patterns was found.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

GHSA-vcvr-r3jv-pc5j

Next.js: Remote Code Execution in next/og ImageResponse

next · 16.3.3 → 16.3.7 · Fixed in source · see record

Finding and root cause

The inspected Node ImageResponse bundle inserts text, attribute and style values into SVG without the required escaping. Encoding the finished SVG does not repair this. The updated bundle escapes those values; the upstream advisory reports possible code execution under its stated conditions.

Impact and LabTether scope

An attacker who can supply SVG text, attributes, or styles to a Node.js next/og image route may make data become SVG markup. Upstream reports possible remote code execution for that configuration. LabTether's assessed development tree locks Next.js 16.3.3, but we found no next/og, ImageResponse, or generated social-image consumer. Hub exploitation is unconfirmed. I reviewed the affected and replacement package source; I did not execute an exploit.

Runtime dependency. No next/og ImageResponse consumer or matching attacker input path was found in the reviewed Hub console.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

GHSA-rgj7-g3m4-5g8c

sharp: Vulnerabilities in libheif: GHSA-g89c-p67h-r497 and GHSA-2jg2-4ch7-h545

sharp · 0.35.3 → 0.35.5 · Fixed in source · see record

Finding and root cause

Sharp can pass HEIF input through libvips to libheif. Upstream reports memory-safety defects in the native decoder delivered with affected packages. The wrapper path and replacement package delivery were reviewed; the native failure was not independently reproduced.

Impact and LabTether scope

An attacker who can make a service decode crafted HEIF/AVIF input through affected sharp can reach upstream libheif memory faults. LabTether's assessed development tree locks sharp 0.35.3, but no attacker-fed Hub decoder path was demonstrated. This is a dependency remediation report, not evidence of Hub remote code execution.

Optional Next.js image dependency. No attacker-fed image decoding path was demonstrated; the observed icon picker uses bundled, unoptimized SVG assets.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

GHSA-wq5f-xc86-pv6w

sharp : Vulnerability in librsvg dependency CVE-2026-96889

sharp · 0.35.3 → 0.35.5 · Fixed in source · see record

Finding and root cause

Affected Sharp distributions include a vulnerable librsvg decoder. Upstream reports a memory defect with possible code execution under specific glibc Linux conditions. The native memory failure and those conditions were not independently reproduced in LabTether.

Impact and LabTether scope

An attacker who supplies SVG data to an application decoding it with affected sharp native libraries may reach the upstream-reported librsvg memory flaw. That entry point has not been demonstrated in LabTether Hub; this is a dependency remediation report, not confirmed Hub remote code execution.

Optional Next.js image dependency. No attacker-fed image decoding path was demonstrated; the observed icon picker uses bundled, unoptimized SVG assets.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-93749

source-map-js allows event-loop denial of service through indexed source-map section offsets

source-map-js · 1.2.1 → 1.2.2 · Fixed in source · see record

Finding and root cause

Indexed source-map section offsets lack sufficient numeric and size checks. Large offsets can expand later mapping work and stall the event loop. The inspected update validates and bounds the offsets.

Impact and LabTether scope

If Mallory can supply an indexed source map to an application that converts it with source-map-js 1.2.1, a huge section line offset can force excessive synchronous work during serialisation. This supports an availability risk, not a demonstrated LabTether attack. I compared the publisher-integrity-verified npm sources for 1.2.1 and 1.2.2; I did not execute hostile input.

Present through CSS tooling and jsdom. No attacker-supplied indexed source-map route or direct application consumer was found.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-85024

undici vulnerable to Denial of Service via unhandled error in WebSocket permessage-deflate decompression

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

An oversized WebSocket inflate result removes error listeners while the zlib stream remains active. A later stream error can go unhandled. The inspected patch destroys the stream and keeps cleanup safe.

Impact and LabTether scope

Mallory controls a WebSocket server that an Undici 7.29.0 client connects to. After negotiating compression, she sends data that exceeds the decompressed-message limit and then fails decompression. Upstream reports that the resulting unhandled error can terminate the client process. This is an availability issue, not demonstrated code execution or a confirmed Hub attack.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-18149

undici vulnerable to Denial of Service via orphaned RetryHandler response body

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

A retry can replace the response object after headers were already delivered. The caller retains the earlier body while completion follows another body, leaving the first unresolved. The inspected patch guards response handling across retries.

Impact and LabTether scope

A server controlled by Mallory can strand a response body when an application retries a truncated response and receives a non-retryable reply. Upstream identifies denial of service; we did not reproduce it.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-18540

undici vulnerable to downstream response splitting via retry interceptor

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

A retry of a partially received error response can use an open-ended range while retaining framing from the earlier response. A downstream proxy can then forward inconsistent response boundaries. The inspected patch bounds retry handling and framing.

Impact and LabTether scope

Mallory controls an upstream server contacted through Undici 7.29.0 with the opt-in interceptors.retry() enabled. She interrupts a length-delimited response, then supplies a longer resumed body. If a forwarder retains the first response's length, trailing bytes may become another downstream HTTP response. This forwarding impact remains conditional; no LabTether API exploit was demonstrated.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-19534

undici vulnerable to Denial of Service via unrequested WebSocket subprotocol

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

The WebSocket handshake accepts earlier upgrade checks before processing an unrequested peer subprotocol. The affected teardown can produce an unhandled error. The selected upstream release repairs that error path.

Impact and LabTether scope

Mallory controls a WebSocket server contacted by a Node.js client using Undici 7.29.0 without requested subprotocols. An otherwise valid upgrade response containing Sec-WebSocket-Protocol reaches a null dereference instead of rejecting the connection. GHSA-rfgv-xxqx-mfg5 / CVE-2026-19534 reports process termination from the uncaught exception. No LabTether crash, data access or code execution was demonstrated.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-84890

undici vulnerable to Denial of Service via unbounded decompression of compressed responses

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

The optional decompression interceptor limits decoder layers but does not count total decoded output. Compressed input can therefore exhaust resources. The inspected 7.29.1 patch adds byte limits with a 64 MiB default; that is why this temporary exact pin was selected.

Impact and LabTether scope

Mallory controls an upstream HTTP server and sends a compressed response to a client using Undici's optional interceptors.decompress() interceptor. Undici 7.29.0 does not bound decoded bytes, allowing resource exhaustion according to GHSA-3xpg-4rpp-hhhm / CVE-2026-84890. No affected Hub API route or process crash was demonstrated.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-84933

undici vulnerable to cross-user cookie disclosure via Set-Cookie caching in shared caches

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

The shared-cache interceptor can store and replay Set-Cookie headers across callers with matching entries. The inspected patch rejects cookie-bearing shared entries during storage, reuse and revalidation.

Impact and LabTether scope

When an application enables Undici’s shared cache, Mallory, a later caller, can receive Alice’s cookie header by requesting the same cached response. An upstream Mallory controls can also plant cookies for later callers. This crosses caller isolation; session takeover and a vulnerable Hub endpoint are not established.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-84947

undici vulnerable to response truncation via oversized chunked responses in the dump interceptor

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

The dump interceptor announces success when a chunked body reaches its size limit, before the response really ends. Later errors can be suppressed. The inspected patch waits for completion and explicitly rejects oversized input.

Impact and LabTether scope

Mallory controls an HTTP upstream that a client contacts through Undici’s optional dump interceptor. With Undici 7.29.0, she can send an oversized chunked body and cause premature successful completion instead of a size-limit error. No affected LabTether application route has been demonstrated.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-84961

undici vulnerable to TLS certificate validation bypass via dropped connect options in BalancedPool

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

BalancedPool clones options through JSON, dropping function-valued TLS callbacks. A peer can evade that extra custom policy while normal chain and hostname checks still apply. The inspected update preserves the callbacks.

Impact and LabTether scope

Mallory, controlling a TLS peer contacted by an application, can evade an extra certificate policy when Undici 7.29.0 BalancedPool drops its callback. Her certificate must still pass Node's normal chain and hostname checks; this is not general acceptance of invalid certificates. I compared the 7.29.0 and 7.29.1 package sources; no exploit was executed. This dependency review credits upstream GHSA-w293-vg96-wgc3, CVE-2026-84961, reported by MegaManSec.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-85008

undici vulnerable to caching and replay of unsafe HTTP method responses

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

The cache interceptor can store and replay some unsafe-method responses despite its configured safe-method list. A later POST or PUT can receive a cached response instead of reaching the origin. The inspected update checks the request method before storage and lookup.

Impact and LabTether scope

Mallory controls an origin contacted by an application using Undici 7.29.0 with its cache interceptor enabled. Her response can make a later identical POST or PUT receive a cached response instead of reaching the origin. This breaks the expected delivery of state-changing requests; no Hub exploit or account compromise was demonstrated.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-85014

undici vulnerable to Denial of Service via WebSocketStream unclean close

undici · 7.29.0 → 7.29.1 · Fixed in source · see record

Finding and root cause

An abrupt peer close calls abort on a locked WebSocketStream writer and discards the rejecting promise. Upstream reports process termination under default Node rejection handling. The inspected patch errors the stream through its controller.

Impact and LabTether scope

Mallory controls a WebSocket peer used by an Undici 7.29.0 client. After the client acquires a writer, she can terminate the connection without a close handshake. Upstream reports client process termination under Node.js's default unhandled-rejection behaviour. No LabTether Hub exploit was demonstrated.

Development dependency through jsdom and Vitest. No application use of the affected API was found. The npm update does not patch Node’s embedded fetch or global WebSocket.

Fix and validation

Merged to main on 7 October 2026 in PR #181, commit 48100fee6026. Normal install, npm audit with zero findings, 401 tests, lint, production build, standalone proxy checks, and required GitHub CI passed. These compatibility checks do not reproduce an exploit.

Fixed in source on main. No tagged release, container image, or installed Hub fix is certified by this report. Older builds need a version check.

CVE-2026-93687

Unbounded brace nesting in website lint tooling

braces · 3.0.3 → 3.0.3 + reviewed local backport · Fixed in source · see record

Finding and root cause

The parser records nesting without a depth bound, while compile, expand, and stringify traverse the resulting tree recursively. A bounded reproduction confirmed native stack exhaustion from deeply nested braces, parentheses, and direct AST input. The reviewed backport adds one structural-depth limit across those paths, parent chains, and nested expansion arrays.

Impact and LabTether scope

Upstream reports denial of service in tools accepting untrusted glob patterns. Original research: Wayde Shi, PayPal Cyber Security Team. No remotely reachable LabTether website exploit was demonstrated.

LabTether website development chain: eslint-config-next → @next/eslint-plugin-next → fast-glob → micromatch → braces. The observed Next lint path uses fast-glob for configured rootDir patterns; our configuration supplies no such setting. Watari.dev does not have this dependency chain.

Fix and validation

The original 3.0.3 package reproduced native stack exhaustion. The installed local backport rejects over-depth strings, direct ASTs, non-array child collections, parent cycles, and nested expansion arrays with controlled errors. Thirteen focused tests, 14 upstream-compatibility cases, the full website test suite, lint, build, Worker build, and npm audit passed.

Fixed in the LabTether website source and deployed on 7 October 2026. The public patch is linked here. It is a LabTether backport, not an upstream braces release; other consumers still need an upstream fix or their own reviewed remedy.

CVE-2026-73089

browserslist memory exhaustion

browserslist · 4.28.6 → 4.28.8 · Fixed in source · see record

Finding and root cause

Upstream reports unbounded growth in Browserslist result and query caches. Repeated distinct queries can retain enough data to exhaust memory. The linked record shows the affected version replaced by an upstream patched release.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-73088

browserslist custom stats crash and prototype write

browserslist · 4.28.6 → 4.28.8 · Fixed in source · see record

Finding and root cause

Upstream reports unsafe handling of custom Browserslist statistics, including prototype writes and crashes. The linked record shows an upstream patched version installed in the source lockfile.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-67213

nanoid zero-size generator loop

nanoid · 3.3.12 → 3.3.18 · Fixed in source · see record

Finding and root cause

A zero size passed into affected Nano ID custom generators can leave their generation loop running forever. Exploitation requires an application to pass that value into the affected API. The linked fix updates the 3.x dependency line.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

This package is present without the lockfile development-only flag; that alone does not establish runtime exploitability.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-69153

PostCSS source map file access

postcss · 8.5.15 → 8.5.26 · Fixed in source · see record

Finding and root cause

PostCSS source-map checks can skip path restrictions when the CSS source filename is absent. Upstream reports unintended map-file access in that configuration. The linked record verifies a patched PostCSS version in source.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

This package is present without the lockfile development-only flag; that alone does not establish runtime exploitability.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-67214

nanoid negative-size generator loop

nanoid · 3.3.12 → 3.3.18 · Fixed in source · see record

Finding and root cause

A negative size passed into affected non-secure Nano ID generators can keep their loop from ending. Exploitation requires an application to pass that value into the affected API. The linked fix updates the 3.x dependency line.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

This package is present without the lockfile development-only flag; that alone does not establish runtime exploitability.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-69152

brace-expansion unbounded intermediate arrays

brace-expansion · 5.0.7 → 5.0.9 · Fixed in source · see record

Finding and root cause

A brace-expansion output limit does not bound every intermediate array. Hostile patterns can still exhaust memory before the final accumulator limit applies. The linked record verifies the upstream fix in the source lockfile.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-15157

undici request header injection

undici · 7.28.0 → 7.29.0 · Fixed in source · see record

Finding and root cause

A blob-like body can supply an untrusted type containing line breaks. In the affected HTTP dispatcher, this can insert extra headers or requests. The linked record verifies replacement of the affected Undici package.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-14643

undici cache directive information disclosure

undici · 7.28.0 → 7.29.0 · Fixed in source · see record

Finding and root cause

The cache parser mishandles whitespace around qualified no-cache or private directives. Fields meant to remain private can then be cached. The linked record verifies the upstream patched package.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-16729

undici cookie attribute injection

undici · 7.28.0 → 7.29.0 · Fixed in source · see record

Finding and root cause

Cookie domain and unparsed attribute values can include separators that introduce extra cookie attributes. Upstream reports attribute injection through those paths. The linked record verifies replacement of the affected package.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-13697

undici private cache disclosure and crash

undici · 7.28.0 → 7.29.0 · Fixed in source · see record

Finding and root cause

Upstream reports defects in private-cache directive handling that can disclose information or crash a caller. The linked record documents the affected dependency version and the merged upstream package fix.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-16728

undici retry response desynchronization

undici · 7.28.0 → 7.29.0 · Fixed in source · see record

Finding and root cause

After a partial-response retry, the exposed Content-Length can disagree with the delivered body. Forwarding both can corrupt response framing or stall downstream connections. The linked record verifies the patched package in source.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-73646

PostCSS source map path traversal

postcss · 8.5.15 → 8.5.26 · Fixed in source · see record

Finding and root cause

PostCSS can resolve an untrusted source-map reference outside the intended path. Upstream reports a traversal flaw in previous-map loading. The linked record verifies a patched dependency version.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

This package is present without the lockfile development-only flag; that alone does not establish runtime exploitability.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.

CVE-2026-14257

brace-expansion memory exhaustion

brace-expansion · 5.0.7 → 5.0.9 · Fixed in source · see record

Finding and root cause

A result-count limit alone does not bound the length of each expanded brace result. Large intermediate strings and arrays can exhaust process memory. The linked record verifies the upstream length-limit fix.

Impact and LabTether scope

Previously published upstream dependency vulnerability. This retrospective record proves removal of the affected version; exploitation or compromise of LabTether was not demonstrated.

The lockfile marks this package as a development dependency.

Fix and validation

Merged 3 September 2026 in PR #132, commit 491cfabc0c30. Exact before/after lockfiles, retained patched versions on main, fixed Dependabot status, web CI and JavaScript/TypeScript CodeQL were verified. Public record added 7 October 2026.

Fixed in source on main. This does not certify a tagged release, container image, or installed system. Older builds need a version check.