fix(security): bump scripts undici to 7.28.0 (GHSA-vmh5-mc38-953g)#4350
Merged
Conversation
The production dependency audit (audit-lockfile / security-audit) went red repo-wide when GHSA-vmh5-mc38-953g was published: undici < 7.28.0 is vulnerable to a TLS certificate validation bypass via a dropped requestTls in the SOCKS5 ProxyAgent (high). scripts/ pins undici ^7.0.0 and resolved to 7.24.5, which is in the vulnerable >=7.23.0 <7.28.0 range. Bump the direct dep to ^7.28.0 (first patched 7.x) and add the matching `"undici": "$undici"` override so any future transitive copy is forced to the direct, patched version — same pattern as the existing `"ws": "$ws"` pin. Lockfile regenerated with `npm install --package-lock-only`; only undici's version/integrity changed. Verified: `node .github/scripts/audit-production-dependencies.mjs --workspace scripts ...` now reports "0 high+ advisories". Unblocks the security-audit gate for every open PR.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
koala73
added a commit
that referenced
this pull request
Jun 22, 2026
PR #4350 bumped scripts undici to ^7.28.0 AND added an `overrides.undici: "$undici"` self-reference on main after this branch was cut. This branch had the version bump but not the override, leaving scripts/package.json diverged from main while the lockfile matched — which trips the pre-push lockfile-sync gate. Add the missing override so scripts/package.json matches main exactly; the lockfile is unchanged (already resolves undici 7.28.0). Claude-Session: https://claude.ai/code/session_01KfKU1FUhPKvLQhU8tiUSfy
koala73
added a commit
that referenced
this pull request
Jun 22, 2026
* fix(dashboard): gate live media on intent * fix(live-media): harden lifecycle/race edges from PR review Apply confirmed code-review findings on top of the intent-gating change: - enforceExclusiveLiveMediaPlayback now deterministic (prefer live-news from both panels) so the surviving stream on always-on-off is not insertion-order dependent; cancel pending lazy-init when leaving always-on - clear stuck .loading spinner on interrupted switchChannel early-returns - restore deferredInit=true in triggerInit (re-entry guard) - LiveWebcamsPanel.destroy() disconnects the IntersectionObserver first to avoid a teardown-time re-render/iframe leak - drop the double stopLiveMediaForClose() on panel close (applyPanelSettings already fires it for disabled panels) - guard stop callbacks: skip renderPlaceholder on a detached panel; skip webcam render() while document.hidden - pauseForIdle arms idle-resume deterministically from isPlaying - safe guards: clear eco idle timer in stopLiveMediaForClose; resumeFromIdle short-circuits when already owning media; isPanelVisible false on detached element; webcam settings-change won't start media while hidden - add unit tests for the deterministic exclusive-survivor (preferred + fallback) Claude-Session: https://claude.ai/code/session_01KfKU1FUhPKvLQhU8tiUSfy * chore(scripts): align undici override with main (#4350) PR #4350 bumped scripts undici to ^7.28.0 AND added an `overrides.undici: "$undici"` self-reference on main after this branch was cut. This branch had the version bump but not the override, leaving scripts/package.json diverged from main while the lockfile matched — which trips the pre-push lockfile-sync gate. Add the missing override so scripts/package.json matches main exactly; the lockfile is unchanged (already resolves undici 7.28.0). Claude-Session: https://claude.ai/code/session_01KfKU1FUhPKvLQhU8tiUSfy
koala73
added a commit
that referenced
this pull request
Jun 22, 2026
…up tests Code-review follow-ups for #4345: - scripts/package.json: re-add overrides.undici "$undici" to match main (post-#4350). scripts/ is now byte-identical to main, clearing the husky pre-push lockfile-sync gate and re-pinning transitive undici. Lockfile is unchanged (already dedupes to 7.28.0). - analytics.ts: fix the loadUmamiScript existing-script branch (flush only when window.umami is set, else attach the load listener; set umamiLoadStarted to close the re-entry gap); make initAnalytics synchronous (no await, sole caller voids it); add resetAnalyticsForTesting; move the #4183 data-domains note next to UMAMI_DOMAINS as the single source of truth. - index.html: trim the Umami comment to a pointer at the new source of truth. - tests: add coverage for scheduleAfterFirstPaint load-listener + rIC-absent fallback branches, Umami retry-exhaustion, 50-cap queue overflow, throw-then-queue-then-flush, and the existing-script branch. - e2e: replace the flaky 250ms wait with the deterministic wmEventHandlersReady readiness gate. Claude-Session: https://claude.ai/code/session_015dspobi7rUanvd9zSamz8a
koala73
added a commit
that referenced
this pull request
Jun 22, 2026
* perf(dashboard): defer secondary startup payloads * fix(security): bump scripts undici * test(dashboard): assert deferred analytics startup * fix(analytics): queue umami events on throw + restore happy Nunito italic - sendUmamiCall: return false in the catch so a throwing window.umami defers to the bounded queue/flush path instead of silently dropping the event (callers only queue when sendUmamiCall returns false). - buildDashboardFontStylesheetHref: restore the Nunito italic axis (ital,wght@0,400;0,600;0,700;1,400) the narrowed request dropped; happy-theme.css uses font-style:italic on Nunito-bodied elements, so the weight-only request regressed those to synthesized oblique. Weight narrowing (no 300) preserved. - Update the two font-href assertions that had locked in the regression. Addresses ce-code-review findings on PR #4345. Claude-Session: https://claude.ai/code/session_0187W7sB8cdp8sYK7J7qDNLn * fix(analytics): align scripts undici override + harden deferred-startup tests Code-review follow-ups for #4345: - scripts/package.json: re-add overrides.undici "$undici" to match main (post-#4350). scripts/ is now byte-identical to main, clearing the husky pre-push lockfile-sync gate and re-pinning transitive undici. Lockfile is unchanged (already dedupes to 7.28.0). - analytics.ts: fix the loadUmamiScript existing-script branch (flush only when window.umami is set, else attach the load listener; set umamiLoadStarted to close the re-entry gap); make initAnalytics synchronous (no await, sole caller voids it); add resetAnalyticsForTesting; move the #4183 data-domains note next to UMAMI_DOMAINS as the single source of truth. - index.html: trim the Umami comment to a pointer at the new source of truth. - tests: add coverage for scheduleAfterFirstPaint load-listener + rIC-absent fallback branches, Umami retry-exhaustion, 50-cap queue overflow, throw-then-queue-then-flush, and the existing-script branch. - e2e: replace the flaky 250ms wait with the deterministic wmEventHandlersReady readiness gate. Claude-Session: https://claude.ai/code/session_015dspobi7rUanvd9zSamz8a
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Clears the repo-wide
audit-lockfile (scripts)/security-auditfailure that started blocking every PR (andmain) when GHSA-vmh5-mc38-953g was published.undici < 7.28.0is vulnerable to a TLS certificate validation bypass via a droppedrequestTlsin the SOCKS5ProxyAgent(high severity). The advisory landed in the live npm advisory DB after main's last green audit, sonpm audit --omit=devnow flags it on any fresh run — the gate audits the lockfiles, not the diff, so it fails regardless of PR content.scripts/package.jsonpinsundici: "^7.0.0", which had resolved to 7.24.5 (inside the vulnerable>=7.23.0 <7.28.0range).Change
undici: "^7.28.0"(first patched 7.x)."undici": "$undici"toscriptsoverrides, forcing any future transitive copy to the direct, patched version — mirrors the existing"ws": "$ws"pin (fix(security): bump ws→8.21.0 and form-data→4.0.6 (unblock audit gate) #4322).npm install --package-lock-only; only undici'sversion/integritychanged (4 lines).Test plan
node .github/scripts/audit-production-dependencies.mjs --workspace scripts --package-json scripts/package.json --lockfile scripts/package-lock.json→ "0 high+ advisories", exit 0undici7.24.5 → 7.28.0); no other packages touched^7range — no API break for the relay scriptsUnblocks the
security-auditgate for the whole PR queue.