Skip to content
Heist/ feed
Back to feed
Medium

Hono: `serveStatic` decodes the request path a second time, leading to bypass of middleware on static paths

Type: advisorySources: OSV

Hono is a Web application framework that provides support for any JavaScript runtime. From 4.12.4 until 4.13.11, serveStatic can interpret a malformed percent-encoded path differently from upstream routing middleware and bypass protection for a static prefix. The root cause is serveStatic decodes a routed request path a second time before filesystem lookup. The attack mechanism is malformed percent encoding survives the first routing interpretation and becomes a protected path only during the later static-file decode. The affected component is serveStatic. The trigger conditions are an application protects a static prefix with upstream middleware and serveStatic receives an attacker-controlled malformed percent-encoded path. The impact is unauthorized disclosure of a static file that upstream middleware was intended to protect. The issue does not permit traversal outside the configured static root. This issue is fixed in version 4.13.11.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-109955, CVE-2026-111757
Confirmed fixed CVEs
Not specified
Updated in this feed
3 Nov 2026, 04:55 UTC · Revision 1

Source evidence

Hono: `serveStatic` decodes the request path a second time, leading to bypass of middleware on static paths

core-osv · Original source

Published 19 Oct 2026, 17:31 UTC

Hono is a Web application framework that provides support for any JavaScript runtime. From 4.12.4 until 4.13.11, serveStatic can interpret a malformed percent-encoded path differently from upstream routing middleware and bypass protection for a static prefix. The root cause is serveStatic decodes a routed request path a second time before filesystem lookup. The attack mechanism is malformed percent encoding survives the first routing interpretation and becomes a protected path only during the later static-file decode. The affected component is serveStatic. The trigger conditions are an application protects a static prefix with upstream middleware and serveStatic receives an attacker-controlled malformed percent-encoded path. The impact is unauthorized disclosure of a static file that upstream middleware was intended to protect. The issue does not permit traversal outside the configured static root. This issue is fixed in version 4.13.11.

osv:CVE-2026-111757
Complete source record
{
  "id": "84ac8f10b051e85cc6665bb84dbf5af8fef2bb0a55bc81c38ae1b0b079bffdd1",
  "url": "https://osv.dev/vulnerability/CVE-2026-111757",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Hono: `serveStatic` decodes the request path a second time, leading to bypass of middleware on static paths",
    "summary": "Hono is a Web application framework that provides support for any JavaScript runtime. From 4.12.4 until 4.13.11, serveStatic can interpret a malformed percent-encoded path differently from upstream routing middleware and bypass protection for a static prefix. The root cause is serveStatic decodes a routed request path a second time before filesystem lookup. The attack mechanism is malformed percent encoding survives the first routing interpretation and becomes a protected path only during the later static-file decode. The affected component is serveStatic. The trigger conditions are an application protects a static prefix with upstream middleware and serveStatic receives an attacker-controlled malformed percent-encoded path. The impact is unauthorized disclosure of a static file that upstream middleware was intended to protect. The issue does not permit traversal outside the configured static root. This issue is fixed in version 4.13.11.",
    "evidence": "osv:CVE-2026-111757",
    "products": [],
    "severity": "medium",
    "structured": {
      "id": "CVE-2026-111757",
      "aliases": [
        "CVE-2026-109955",
        "CVE-2026-111757",
        "GHSA-5r4p-p66f-jhc7"
      ],
      "metrics": [
        {
          "type": "CVSS_V3",
          "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/honojs/hono",
              "type": "GIT",
              "events": [
                {
                  "introduced": "19d20d23a2921e26c3bbfdb5549fce98b4a39b28"
                },
                {
                  "fixed": "37ce06904e732d4bc11c9075adf362c76049a594"
                },
                {
                  "fixed": "8b05c774ef1555c70f5ba5e2991b7e77cc3635cc"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "4.12.4"
                      },
                      {
                        "fixed": "4.13.11"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StringRangeExpression"
                  },
                  {
                    "range": [
                      {
                        "fixed": "8b05c774ef1555c70f5ba5e2991b7e77cc3635cc"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "@hono/netlify@1.0.1",
            "@hono/deno@1.0.2",
            "@hono/deno@1.0.1",
            "v4.13.10",
            "v4.13.9",
            "v4.13.8",
            "v4.13.7",
            "v4.13.6",
            "v4.13.5",
            "v4.13.4",
            "v4.13.1",
            "v4.13.3",
            "v4.13.2",
            "v4.13.0",
            "v4.12.34",
            "v4.12.33",
            "v4.12.32",
            "v4.12.31",
            "v4.12.30",
            "v4.12.29",
            "v4.12.28",
            "v4.12.27",
            "v4.12.26",
            "v4.12.25",
            "v4.12.24",
            "v4.12.23",
            "v4.12.22",
            "v4.12.21",
            "v4.12.20",
            "v4.12.19",
            "v4.12.18",
            "v4.12.17",
            "v4.12.16",
            "v4.12.15",
            "v4.12.14",
            "v4.12.13",
            "v4.12.12",
            "v4.12.11",
            "v4.12.10",
            "v4.12.9",
            "v4.12.8",
            "v4.12.7",
            "v4.12.6",
            "v4.12.5",
            "v4.12.4"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-111757.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:25.902456003Z",
      "provider": "osv",
      "references": [
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/111xxx/CVE-2026-111757.json",
        "https://github.com/honojs/hono/security/advisories/GHSA-5r4p-p66f-jhc7",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-111757",
        "https://github.com/honojs/hono/commit/8b05c774ef1555c70f5ba5e2991b7e77cc3635cc"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-174"
        ],
        "cna_assigner": "GitHub_M",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/111xxx/CVE-2026-111757.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-109955",
        "evidence": "/aliases"
      },
      {
        "value": "CVE-2026-111757",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 492602,
  "published_at": "2026-10-19T17:31:20.341+00:00"
}