Repository navigation
fix(sec-auto): aikido Fix security issue in undici via minor version upgrade from 7.29.0 to 7.30.1 - #165
Open
aikido-autofix[bot] wants to merge 1 commit into
Open
fix(sec-auto): aikido Fix security issue in undici via minor version upgrade from 7.29.0 to 7.30.1#165aikido-autofix[bot] wants to merge 1 commit into
aikido-autofix[bot] wants to merge 1 commit into
Conversation
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.
AI AutoFix
These PRs will require human vetting and potentially some fixes to fully integrate with the codebase.
Upgrade undici to fix critical vulnerabilities: TLS callback stripping in BalancedPool and Agent (CVE-2026-84961, CVE-2026-109383) enabling certificate bypass, and cache poisoning via cross-origin redirects (CVE-2026-109829).
✅ There are no breaking changes
✅ 37 CVEs resolved by this upgrade, including 3 critical 🚨 CVEs
This PR will resolve the following CVEs:
TypeErrorduring the opening handshake when a101response includes aSec-WebSocket-Protocolheader that the client never requested. The throw runs inside aqueueMicrotaskwith no surrounding error handling, so it terminates the Node.js pro...BalancedPooldeep-clones constructor options with JSON, which silently drops function-valuedconnectandtlsoptions such as a caller-suppliedcheckServerIdentity. A certificate the application was written to reject is then accepted if it still passes Node's default hostname and ...Agentdeep-clones its constructor options with JSON before forwarding them to each per-originPool, which silently drops function-valuedtlsoptions such as a caller-suppliedcheckServerIdentity. A certificate the application was written to reject (e.g. for certificate or public-...fetch()rejects such responses, but the internal response stream is created before the content-encoding limit check and ...Agentcomposes the interceptors ascompose(redirect(), cache())with a shared cache, the cache key is built from the original request URL before the redirect handler changes the origin. The response produced after a cross-origin redirect is then stored under the or...cacheinterceptor in shared mode, the default, stores and replays responses that carrySet-Cookie. A later caller that hits the same cache key receives another caller's cookie, and an untrusted upstream can inject cookies into cached responses served to every subsequent caller. P...bodyTimeoutdoes not fire. A remo...WebSocketStreamaborts its locked writable on an unclean TCP close and discards the rejection. Aborting a locked writable rejects with aTypeError, and the unobserved rejection terminates the process under Node.js's defaultunhandledRejectionbehavior. A remote peer can trigger thi...decompressinterceptor decompresses response bodies according to the untrustedContent-Encodingheader and caps the number of layers but not the total decompressed output size. A small compressed payload can expand without bound in client memory and stall or crash the process. Th...decompressinterceptor forwards decompressed data to the downstream handler from asynchronous zlib stream callbacks without catching exceptions. If the downstream handler throws, for example thedumpinterceptor when a response exceeds itsmaxSize, the exception escapes as an u...undiciEventSourceclient retains unbounded parser state when receiving data from a Server-Sent Events peer. A malicious or compromised server can send millions of tiny completeddata:fields without a blank event separator, or a single unfinished line split across many chunks,...fetch()verifies Subresource Integrity (SRI) metadata by looking up the algorithm token in a lowercase-only set, while the SRI specification treats tokens case-insensitively. A valid uppercase or mixed-case token such asSHA256-...is treated as unknown and skipped, so the integrity ...parseUnparsedAttributesinlib/web/cookies/parse.jsrecursed once perSet-Cookieattribute with no depth bound. A single response header of the forma=b;;;;...overflowed the JavaScript call stack and threw an uncaughtRangeError: Maximum call stack size exceededout of `getSet...undici, including Node.js's bundledglobalThis.WebSocket, automatically writes a PONG response for every PING frame it receives and ignores thefalsereturn value ofsocket.write(), which signals backpressure. A malicious or compromised WebSocket server ca...cacheinterceptor is documented to cache only safe HTTP methods, but its skip list is built by subtracting configured methods from the safe-method set, soPOST,PUT,PATCH, andDELETEstill hit the cache. Combined with a storage gate that does not check the method, a cachea...dumpinterceptor discards a response body up tomaxSize. For a chunked response with noContent-Length, it signals completion once that size is reached instead of aborting, then a second completion from the parser tears down the connection. The application observes a successful...🤖 Remediation details
Update
undicioverride floor to 7.30.1 to remediate multiple security advisoriesShort summary
This PR remediates a large set of security vulnerabilities in the transitive dependency
undici. The fix is applied in the rootpackage.json(override selector update) and reflected inpackage-lock.json. No workspace member manifests were changed.undici
undiciis pulled in transitively by@actions/github(v9.1.1) and both copies of@actions/http-client(v3.0.2 and v4.0.1), all of which declareundiciat^6.23.0— a range that can never resolve to the required7.xfix line. Because no published version of any parent bumps itsundicirange into7.x, a parent bump cannot reach the patched version, making an override the only viable mechanism. The rootpackage.jsonalready contained an override"undici@<7.29.0": "7.29.0"from a prior fix; this PR advances that selector and target to"undici@<7.30.1": "7.30.1", which is the minimum version that satisfies every advisory in this batch. Runningnpm install --package-lock-onlyresolved the single hoistedundiciinstance from7.29.0to7.30.1.Version changes
undici7.29.07.30.1