2026-09-27 1:28CVE-2026-100724VulnCheck
PUBLISHED5.2CWE-444

http4k before 6.49.0.0 Host Header Routing Bypass via reverseProxy

http4k (Maven package org.http4k:http4k-core) before 6.49.0.0, 5.42.0.0 and 4.51.0.0 uses substring (Contains) matching on the Host header by default in reverseProxy() and reverseProxyRouting() when dispatching to configured virtual hosts. If these functions are deployed as a public-facing inbound HTTP handler with two or more configured virtual hosts, a remote attacker can supply a Host header that merely contains a configured vhost name (for example Host: admin.evil.com for a vhost configured as "admin") and be routed to that vhost, bypassing routing-based authorization. The intended outbound-dispatch and test-time uses, where the Host value is set by the calling application, are not affected.

Problem type

Affected products

http4k

http4k

< 6.49.0.0 - AFFECTED

6.49.0.0 - UNAFFECTED

http4k

< 5.42.0.0 - AFFECTED

5.42.0.0 - UNAFFECTED

http4k

< 4.51.0.0 - AFFECTED

4.51.0.0 - UNAFFECTED

References

GitHub Security Advisories

GHSA-9hc9-gcfq-xg98

http4k (Maven package org.http4k:http4k-core) before 6.49.0.0, 5.42.0.0 and 4.51.0.0 uses...

https://github.com/advisories/GHSA-9hc9-gcfq-xg98

http4k (Maven package org.http4k:http4k-core) before 6.49.0.0, 5.42.0.0 and 4.51.0.0 uses substring (Contains) matching on the Host header by default in reverseProxy() and reverseProxyRouting() when dispatching to configured virtual hosts. If these functions are deployed as a public-facing inbound HTTP handler with two or more configured virtual hosts, a remote attacker can supply a Host header that merely contains a configured vhost name (for example Host: admin.evil.com for a vhost configured as "admin") and be routed to that vhost, bypassing routing-based authorization. The intended outbound-dispatch and test-time uses, where the Host value is set by the calling application, are not affected.

JSON source

https://cveawg.mitre.org/api/cve/CVE-2026-100724
Click to expand
{
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "cveMetadata": {
    "cveId": "CVE-2026-100724",
    "assignerOrgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10",
    "assignerShortName": "VulnCheck",
    "dateUpdated": "2026-09-27T01:28:30.710Z",
    "dateReserved": "2026-09-26T02:40:56.226Z",
    "datePublished": "2026-09-27T01:28:30.710Z",
    "state": "PUBLISHED"
  },
  "containers": {
    "cna": {
      "providerMetadata": {
        "orgId": "83251b91-4cc7-4094-a5c7-464a1b83ea10",
        "shortName": "VulnCheck",
        "dateUpdated": "2026-09-27T01:28:30.710Z"
      },
      "datePublic": "2026-06-16T00:00:00.000Z",
      "title": "http4k before 6.49.0.0 Host Header Routing Bypass via reverseProxy",
      "descriptions": [
        {
          "lang": "en",
          "value": "http4k (Maven package org.http4k:http4k-core) before 6.49.0.0, 5.42.0.0 and 4.51.0.0 uses substring (Contains) matching on the Host header by default in reverseProxy() and reverseProxyRouting() when dispatching to configured virtual hosts. If these functions are deployed as a public-facing inbound HTTP handler with two or more configured virtual hosts, a remote attacker can supply a Host header that merely contains a configured vhost name (for example Host: admin.evil.com for a vhost configured as \"admin\") and be routed to that vhost, bypassing routing-based authorization. The intended outbound-dispatch and test-time uses, where the Host value is set by the calling application, are not affected."
        }
      ],
      "affected": [
        {
          "vendor": "http4k",
          "product": "http4k",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "0",
              "status": "affected",
              "versionType": "custom",
              "lessThan": "6.49.0.0"
            },
            {
              "version": "6.49.0.0",
              "status": "unaffected",
              "versionType": "custom"
            }
          ]
        },
        {
          "vendor": "http4k",
          "product": "http4k",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "0",
              "status": "affected",
              "versionType": "custom",
              "lessThan": "5.42.0.0"
            },
            {
              "version": "5.42.0.0",
              "status": "unaffected",
              "versionType": "custom"
            }
          ]
        },
        {
          "vendor": "http4k",
          "product": "http4k",
          "defaultStatus": "unaffected",
          "versions": [
            {
              "version": "0",
              "status": "affected",
              "versionType": "custom",
              "lessThan": "4.51.0.0"
            },
            {
              "version": "4.51.0.0",
              "status": "unaffected",
              "versionType": "custom"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "lang": "en",
              "description": "Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response Smuggling')",
              "cweId": "CWE-444",
              "type": "CWE"
            }
          ]
        }
      ],
      "references": [
        {
          "url": "https://github.com/http4k/http4k/security/advisories/GHSA-jrpc-7vxp-69p6",
          "name": "GitHub Security Advisory (GHSA-jrpc-7vxp-69p6)",
          "tags": [
            "vendor-advisory"
          ]
        },
        {
          "url": "https://github.com/http4k/http4k/commit/0121b05537",
          "name": "Patch Commit",
          "tags": [
            "patch"
          ]
        },
        {
          "url": "https://github.com/http4k/http4k/commit/54c6385615",
          "name": "Patch Commit",
          "tags": [
            "patch"
          ]
        },
        {
          "url": "https://www.vulncheck.com/advisories/http4k-before-6.49.0.0-host-header-routing-bypass-via-reverseproxy",
          "name": "VulnCheck Advisory: http4k before 6.49.0.0 Host Header Routing Bypass via reverseProxy",
          "tags": [
            "third-party-advisory"
          ]
        }
      ],
      "metrics": [
        {
          "format": "CVSS"
        },
        {
          "format": "CVSS",
          "cvssV3_1": {
            "version": "3.1",
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N",
            "attackVector": "NETWORK",
            "attackComplexity": "HIGH",
            "privilegesRequired": "NONE",
            "userInteraction": "NONE",
            "scope": "CHANGED",
            "confidentialityImpact": "LOW",
            "integrityImpact": "LOW",
            "availabilityImpact": "NONE",
            "baseScore": 5.4,
            "baseSeverity": "MEDIUM"
          }
        }
      ]
    }
  }
}