{"items":[{"id":"NVI-00009011","kind":"vulnerability","title":"undici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects","revision":5,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected.","NVD lastModified does not establish freshness of every associated CPE record."],"lifecycle":"active","identifiers":["GHSA-4w7w-5xrc-9h26","CVE-2026-109829"],"plain_summary":"GitHub lists this reviewed advisory for undici, undici. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-07d50af572f3e00d149011ba6c6b8182"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 7.30.1 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 8.12.2 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-27T19:02:32.000Z","value":"7.4 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-72f2539fab34be1e0b9472ab99bbf453"},{"kind":"CVSS","as_of":"2026-10-19T20:45:43.390Z","value":"7.4 HIGH (3.1)","meaning":"ce714d77-add3-4f53-aff5-83d477b104bb severity; no combined Null risk score.","source_id":"sr-75187277a5cc2abf21ddda48964de649"},{"kind":"CVSS","as_of":"2026-10-19T20:45:43.390Z","value":"9.1 CRITICAL (3.1)","meaning":"nvd@nist.gov severity; no combined Null risk score.","source_id":"sr-75187277a5cc2abf21ddda48964de649"},{"kind":"EPSS","as_of":"2026-11-04T12:03:12.000Z","value":"0.149%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.04114. Missing scores are unknown.","source_id":"sr-07d50af572f3e00d149011ba6c6b8182"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-72f2539fab34be1e0b9472ab99bbf453","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T21:56:36.327Z"},{"id":"sr-4f43911103589cb272a2447bb50c5c3e","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-11-02T02:21:35.121Z"},{"id":"sr-75187277a5cc2abf21ddda48964de649","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109829","basis":"official_catalog","notes":"This product uses data from the NVD API but is not endorsed or certified by the NVD.","title":"CVE-2026-109829","publisher":"NIST National Vulnerability Database","observed_at":"2026-11-03T09:58:37.778Z"},{"id":"sr-07d50af572f3e00d149011ba6c6b8182","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-109829","publisher":"FIRST EPSS","observed_at":"2026-11-04T17:58:50.311Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 7.0.0, < 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 8.0.0, < 8.12.2"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 7.0.0; fixed 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 8.0.0; fixed 8.12.2"]}],"null_published_at":"2026-11-08T15:11:49.354Z","source_updated_at":"2026-10-27T19:02:32.000Z","source_disclosed_at":"2026-10-27T19:02:31.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Source facts changed; compare the preserved prior revision.","null_first_observed_at":"2026-10-31T21:56:36.327Z"},{"id":"NVI-00009011","kind":"vulnerability","title":"undici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects","revision":4,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-4w7w-5xrc-9h26","CVE-2026-109829"],"plain_summary":"GitHub lists this reviewed advisory for undici, undici. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-07d50af572f3e00d149011ba6c6b8182"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 7.30.1 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 8.12.2 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-27T19:02:32.000Z","value":"7.4 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-72f2539fab34be1e0b9472ab99bbf453"},{"kind":"EPSS","as_of":"2026-11-04T12:03:12.000Z","value":"0.149%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.04114. Missing scores are unknown.","source_id":"sr-07d50af572f3e00d149011ba6c6b8182"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-72f2539fab34be1e0b9472ab99bbf453","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T21:56:36.327Z"},{"id":"sr-4f43911103589cb272a2447bb50c5c3e","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-11-02T02:21:35.121Z"},{"id":"sr-07d50af572f3e00d149011ba6c6b8182","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-109829","publisher":"FIRST EPSS","observed_at":"2026-11-04T17:58:50.311Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 7.0.0, < 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 8.0.0, < 8.12.2"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 7.0.0; fixed 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 8.0.0; fixed 8.12.2"]}],"null_published_at":"2026-11-06T07:24:11.281Z","source_updated_at":"2026-10-27T19:02:32.000Z","source_disclosed_at":"2026-10-27T19:02:31.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-10-31T21:56:36.327Z"},{"id":"NVI-00009011","kind":"vulnerability","title":"undici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects","revision":3,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-4w7w-5xrc-9h26","CVE-2026-109829"],"plain_summary":"GitHub lists this reviewed advisory for undici, undici. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-ab990234e388923ba7686d558faf7ac9"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 7.30.1 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 8.12.2 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-27T19:02:32.000Z","value":"7.4 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-72f2539fab34be1e0b9472ab99bbf453"},{"kind":"EPSS","as_of":"2026-10-31T12:00:27.000Z","value":"0.149%","meaning":"FIRST EPSS model v2026.06.15; exploitation probability over 30 days, percentile 0.0406. Missing scores are unknown.","source_id":"sr-ab990234e388923ba7686d558faf7ac9"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-72f2539fab34be1e0b9472ab99bbf453","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T21:56:36.327Z"},{"id":"sr-4f43911103589cb272a2447bb50c5c3e","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-11-02T02:21:35.121Z"},{"id":"sr-ab990234e388923ba7686d558faf7ac9","url":"https://www.first.org/epss/data.html","basis":"official_catalog","notes":"FIRST EPSS; probability of exploitation in the next 30 days, not local compromise. Dataset date/model retained; FIRST services terms apply.","title":"CVE-2026-109829","publisher":"FIRST EPSS","observed_at":"2026-10-31T22:06:15.374Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 7.0.0, < 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 8.0.0, < 8.12.2"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 7.0.0; fixed 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 8.0.0; fixed 8.12.2"]}],"null_published_at":"2026-11-05T03:52:54.763Z","source_updated_at":"2026-10-27T19:02:32.000Z","source_disclosed_at":"2026-10-27T19:02:31.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Dated EPSS estimate updated; this is not a new disclosure or proof of exploitation.","null_first_observed_at":"2026-10-31T21:56:36.327Z"},{"id":"NVI-00009011","kind":"vulnerability","title":"undici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects","revision":2,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-4w7w-5xrc-9h26","CVE-2026-109829"],"plain_summary":"GitHub lists this reviewed advisory for undici, undici. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 7.30.1 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null},{"summary":"The original advisory lists fixed boundaries 8.12.2 for undici. Confirm the publisher’s latest guidance.","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"action_type":"vendor_patch","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-27T19:02:32.000Z","value":"7.4 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-72f2539fab34be1e0b9472ab99bbf453"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-72f2539fab34be1e0b9472ab99bbf453","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T21:56:36.327Z"},{"id":"sr-4f43911103589cb272a2447bb50c5c3e","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub-origin advisory, CC-BY-4.0; OSV is an aggregate copy, not independent corroboration.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database via OSV","observed_at":"2026-11-02T02:21:35.121Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 7.0.0, < 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 8.0.0, < 8.12.2"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 7.0.0; fixed 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-4f43911103589cb272a2447bb50c5c3e"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":["SEMVER: introduced 8.0.0; fixed 8.12.2"]}],"null_published_at":"2026-11-02T20:21:10.345Z","source_updated_at":"2026-10-27T19:02:32.000Z","source_disclosed_at":"2026-10-27T19:02:31.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"Source facts changed; compare the preserved prior revision.","null_first_observed_at":"2026-10-31T21:56:36.327Z"},{"id":"NVI-00009011","kind":"vulnerability","title":"undici vulnerable to cache poisoning and cross-user disclosure via cross-origin redirects","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-4w7w-5xrc-9h26","CVE-2026-109829"],"plain_summary":"GitHub lists this reviewed advisory for undici, undici. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[{"kind":"CVSS","as_of":"2026-10-27T19:02:32.000Z","value":"7.4 high","meaning":"GitHub source severity; exploitability and local consequence require separate evidence.","source_id":"sr-72f2539fab34be1e0b9472ab99bbf453"}],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-72f2539fab34be1e0b9472ab99bbf453","url":"https://github.com/advisories/GHSA-4w7w-5xrc-9h26","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-4w7w-5xrc-9h26","publisher":"GitHub Advisory Database","observed_at":"2026-10-31T21:56:36.327Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 7.0.0, < 7.30.1"]},{"certainty":"source_listed","source_ids":["sr-72f2539fab34be1e0b9472ab99bbf453"],"technology":"undici","known_exclusions":[],"conditions_summary":"### Impact\n\nWhen an originless `Agent` composes the redirect and cache interceptors as `compose(redirect(), cache())` with a shared cache (`type: 'shared'`), the cache builds its key from the original request URL before the redirect handler changes the origin. The response produced after a redirect is then stored under the original key, even when the redirect crossed to a different origin.\n\nAn attacker who controls the target of a redirect from a trusted URL can have their response cached under that trusted URL. A later caller requesting the trusted URL receives the attacker's body from the shared cache without either origin being contacted, allowing persistent cache poisoning. The same key confusion also discloses private data: when an authenticated request returns a `private, no-store` redirect to a user-specific resource, the final response is stored under the original URL and can be served to a later unauthenticated caller.\n\nThe cache interceptor was introduced in undici 7.0.0, and all 7.x and 8.x releases before the patched versions are affected. Applications are affected only when an originless `Agent`, a shared `MemoryCacheStore` or `SqliteCacheStore`, and the composition `c","public_affected_ranges":[">= 8.0.0, < 8.12.2"]}],"null_published_at":"2026-10-31T22:13:27.127Z","source_updated_at":"2026-10-27T19:02:32.000Z","source_disclosed_at":"2026-10-27T19:02:31.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-10-31T21:56:36.327Z"}],"next_cursor":null,"snapshot_revision":"42594"}