{"id":"CVE-2026-48049","aliases":["GHSA-rcvq-m9j9-6f4g"],"title":"@hapi/inert has a static-file confinement bypass via sibling-prefix path","summary":"@hapi/inert has a static-file confinement bypass via sibling-prefix path","severity":"medium","cvss":5.3,"cwe":["CWE-22"],"vendor":"hapi","product":"@hapi/inert","ecosystem":"npm","affected":["@hapi/inert >= 4.0.0, <= 7.1.0"],"patched":["@hapi/inert 7.1.1"],"published":"2026-06-11","updated":"2026-06-11","source":"GHSA","sourceUrl":"https://github.com/advisories/GHSA-rcvq-m9j9-6f4g","references":[{"url":"https://github.com/hapijs/inert/security/advisories/GHSA-rcvq-m9j9-6f4g"},{"url":"https://github.com/hapijs/inert/pull/176"},{"url":"https://github.com/hapijs/inert/commit/a65e5b271b5c3405af463469959c5e052eb23a62"},{"url":"https://github.com/advisories/GHSA-rcvq-m9j9-6f4g"}],"tags":["ghsa","npm"],"ingestedAt":"2026-07-07T15:41:59.303Z","epss":0.0059,"epssPercentile":0.46964,"slug":"CVE-2026-48049","body":"## Overview\n\n### Impact\n`@hapi/inert` serves static files from a directory configured with `path` (in the `directory` / `file` handlers) or `relativeTo` (for `h.file()`), with confinement enforced by the `confine` option (default `true`). Before the patch, the confinement check compared the resolved absolute path against the confine directory using a raw string-prefix test, so a sibling directory whose absolute path begins with the same characters as the confine directory (eg. `/app/static-secret` next to a served `/app/static`) was incorrectly accepted as confined. An unauthenticated remote attacker who knows or guesses such a sibling name can read any file inside it via a request like `/..%2fstatic-secret/secret.txt`, provided the file is readable by the server process. Only applications that happen to have a sibling directory sharing a string prefix with the served directory are exploitable; applications with no such sibling are unaffected.\n\n### Patches\nUpgrade to 7.1.1.\n\n### Workarounds\nFor users who cannot upgrade immediately: ensure the directory served via inert has no sibling whose name starts with the same characters (for example, rename `static-secret/` to `secret/`, or move it to a different parent directory).\n\n### Resources\nPull Request: https://github.com/hapijs/inert/pull/176\n\n## Affected packages\n\n- `@hapi/inert >= 4.0.0, <= 7.1.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `@hapi/inert 7.1.1`","depth":"sunlit","depthScore":29,"depthScoreParts":{"impact":29.2,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}