Monitor vulnerabilities like this one. Sign up free to get alerted when software you use is affected.
7.8

Mako: Untrusted File Access via Malformed URI in Template Files

GHSA-v92g-xgxw-vvmm
Summary

A security issue in the Mako templating library can allow access to sensitive files on your system if you pass untrusted input to it. This could let an attacker read any file that your system's user has permission to access. To protect your system, update Mako to the latest version, which fixes this issue.

What to do
  • Update mike bayer mako to version 1.3.11.
Affected software
Ecosystem VendorProductAffected versions
PyPI mike bayer mako < 1.3.11
Fix: upgrade to 1.3.11
Original title
Mako: Path traversal via double-slash URI prefix in TemplateLookup
Original description
### Summary

`TemplateLookup.get_template()` is vulnerable to path traversal when a URI starts with `//` (e.g., `//../../../secret.txt`). The root cause is an inconsistency between two slash-stripping implementations:

- `Template.__init__` strips **one** leading `/` using `if`/slice
- `TemplateLookup.get_template()` strips **all** leading `/` using `re.sub(r"^\/+", "")`

When a URI like `//../../../../etc/passwd` is passed:
1. `get_template()` strips all `/` → `../../../../etc/passwd` → file found via `posixpath.join(dir_, u)`
2. `Template.__init__` strips one `/` → `/../../../../etc/passwd` → `normpath` → `/etc/passwd`
3. `/etc/passwd`.startswith(`..`) → `False` → **check bypassed**

### Impact

Arbitrary file read: any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to `TemplateLookup.get_template()`.

Note: this is exploitable at the library API level. HTTP-based exploitation is mitigated by Python's `BaseHTTPRequestHandler` which normalizes double-slash prefixes since CPython gh-87389. Applications using other HTTP servers that do not normalize paths may be affected.

### Fix

Changed `Template.__init__` to use `lstrip("/")` instead of stripping only a single leading slash, so both code paths handle leading slashes consistently.
osv CVSS4.0 7.8
Vulnerability type
CWE-22 Path Traversal
Published: 16 Apr 2026 · Updated: 16 Apr 2026 · First seen: 16 Apr 2026