{"id":"CVE-2026-41205","aliases":["AZL-83606","CLSA-2026-1791547905","DEBIAN-CVE-2026-41205","EUVD-2026-25279","GHSA-v92g-xgxw-vvmm","PYSEC-2026-88","ROOT-APP-PYPI-CVE-2026-41205","SUSE-SU-2026:1819-1","SUSE-SU-2026:1820-1","SUSE-SU-2026:21426-1","UBUNTU-CVE-2026-41205","USN-8234-1","openSUSE-SU-2026:10616-1","openSUSE-SU-2026:20645-1"],"status":"published","title":"Mako: Path traversal via double-slash URI prefix in TemplateLookup","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","severity":{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00361,"percentile":0.3012,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-22"],"published":"2026-04-16T21:16:40Z","modified":"2026-11-05T05:40:51Z","fixes":[{"ecosystem":"PyPI","package":"mako","fixed_in":["1.3.11"],"sources":["ghsa","osv"]},{"ecosystem":"Azure Linux:3","package":"python-mako","fixed_in":["1.2.4-3"],"sources":["osv"]},{"ecosystem":"TuxCare:Ubuntu:18.04","package":"python-mako","fixed_in":["1.0.7+ds1-1ubuntu0.2+tuxcare.els1"],"sources":["osv"]},{"ecosystem":"TuxCare:Ubuntu:18.04","package":"python-mako-doc","fixed_in":["1.0.7+ds1-1ubuntu0.2+tuxcare.els1"],"sources":["osv"]},{"ecosystem":"TuxCare:Ubuntu:18.04","package":"python3-mako","fixed_in":["1.0.7+ds1-1ubuntu0.2+tuxcare.els1"],"sources":["osv"]},{"ecosystem":"Root:PyPI","package":"mako","fixed_in":["1.2.4+aikido.1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:16.04:LTS","package":"mako","fixed_in":["1.0.3+ds1-1ubuntu1+esm2"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:18.04:LTS","package":"mako","fixed_in":["1.0.7+ds1-1ubuntu0.2+esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:Pro:20.04:LTS","package":"mako","fixed_in":["1.1.0+ds1-1ubuntu2.1+esm1"],"sources":["osv"]},{"ecosystem":"Ubuntu:22.04:LTS","package":"mako","fixed_in":["1.1.3+ds1-2ubuntu0.2"],"sources":["osv"]},{"ecosystem":"Ubuntu:24.04:LTS","package":"mako","fixed_in":["1.3.2-1ubuntu0.1"],"sources":["osv"]},{"ecosystem":"Ubuntu:25.10","package":"mako","fixed_in":["1.3.9-1ubuntu0.1"],"sources":["osv"]},{"ecosystem":"Ubuntu:26.04:LTS","package":"mako","fixed_in":["1.3.10-3ubuntu0.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"python-Mako","fixed_in":["1.3.11-1.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"1.3.10"},{"fixed":"1.3.11"}]}]},{"source":"osv","ecosystem":"Azure Linux:3","package":"python-mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.4-3"}]}]},{"source":"osv","ecosystem":"TuxCare:Ubuntu:18.04","package":"python-mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.7+ds1-1ubuntu0.2+tuxcare.els1"}]}]},{"source":"osv","ecosystem":"TuxCare:Ubuntu:18.04","package":"python-mako-doc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.7+ds1-1ubuntu0.2+tuxcare.els1"}]}]},{"source":"osv","ecosystem":"TuxCare:Ubuntu:18.04","package":"python3-mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.7+ds1-1ubuntu0.2+tuxcare.els1"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.2.4+ds-1","1.2.4+ds-2","1.3.1-1","1.3.10-1","1.3.10-2","1.3.10-3","1.3.2-1","1.3.5-1","1.3.5-1.1","1.3.6-1","1.3.8-1","1.3.8-2","1.3.9-1"]},{"source":"osv","ecosystem":"Debian:13","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.3.10-1","1.3.10-2","1.3.10-3","1.3.9-1"]},{"source":"osv","ecosystem":"Debian:14","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.3.10-1","1.3.10-2","1.3.10-3","1.3.9-1"]},{"source":"osv","ecosystem":"PyPI","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.11"}]}],"versions":["0.1.0","0.1.1","0.1.10","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.1.7","0.1.8","0.1.9","0.2.0","0.2.1","0.2.2","0.2.3","0.2.4","0.2.5","0.3.0","0.3.1","0.3.2","0.3.3","0.3.4","0.3.5","0.3.6","0.4.0","0.4.1","0.4.2","0.5.0","0.6.0","0.6.1","0.6.2","0.7.0","0.7.1","0.7.2","0.7.3","0.8.0","0.8.1","0.9.0","0.9.1","1.0.0","1.0.1","1.0.10","1.0.11","1.0.12","1.0.13","1.0.14","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.3.0","1.3.1","1.3.10","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.8","1.3.9"]},{"source":"osv","ecosystem":"PyPI","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.11"}]}],"versions":["0.1.0","0.1.1","0.1.10","0.1.2","0.1.3","0.1.4","0.1.5","0.1.6","0.1.7","0.1.8","0.1.9","0.2.0","0.2.1","0.2.2","0.2.3","0.2.4","0.2.5","0.3.0","0.3.1","0.3.2","0.3.3","0.3.4","0.3.5","0.3.6","0.4.0","0.4.1","0.4.2","0.5.0","0.6.0","0.6.1","0.6.2","0.7.0","0.7.1","0.7.2","0.7.3","0.8.0","0.8.1","0.9.0","0.9.1","1.0.0","1.0.1","1.0.10","1.0.11","1.0.12","1.0.13","1.0.14","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.2.0","1.2.1","1.2.2","1.2.3","1.2.4","1.3.0","1.3.1","1.3.10","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.8","1.3.9"]},{"source":"osv","ecosystem":"Root:PyPI","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.4+aikido.1"}]}]},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.3+ds1-1ubuntu1+esm2"}]}],"versions":["1.0.2+ds1-1","1.0.3+ds1-1","1.0.3+ds1-1ubuntu1","1.0.3+ds1-1ubuntu1+esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.7+ds1-1ubuntu0.2+esm1"}]}],"versions":["1.0.7+ds1-1","1.0.7+ds1-1ubuntu0.2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.1.0+ds1-1ubuntu2.1+esm1"}]}],"versions":["1.0.7+ds1-1","1.1.0+ds1-1","1.1.0+ds1-1ubuntu1","1.1.0+ds1-1ubuntu2","1.1.0+ds1-1ubuntu2.1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.1.3+ds1-2ubuntu0.2"}]}],"versions":["1.1.3+ds1-2","1.1.3+ds1-2ubuntu0.1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.2-1ubuntu0.1"}]}],"versions":["1.2.4+ds-2","1.3.1-1","1.3.2-1"]},{"source":"osv","ecosystem":"Ubuntu:25.10","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.9-1ubuntu0.1"}]}],"versions":["1.3.8-2","1.3.9-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.10-3ubuntu0.1"}]}],"versions":["1.3.9-1","1.3.10-3","1.3.10-3build1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.3+ds1-1ubuntu1+esm2"}]}],"versions":["1.0.2+ds1-1","1.0.3+ds1-1","1.0.3+ds1-1ubuntu1","1.0.3+ds1-1ubuntu1+esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.7+ds1-1ubuntu0.2+esm1"}]}],"versions":["1.0.7+ds1-1","1.0.7+ds1-1ubuntu0.2"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.1.0+ds1-1ubuntu2.1+esm1"}]}],"versions":["1.0.7+ds1-1","1.1.0+ds1-1","1.1.0+ds1-1ubuntu1","1.1.0+ds1-1ubuntu2","1.1.0+ds1-1ubuntu2.1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.1.3+ds1-2ubuntu0.2"}]}],"versions":["1.1.3+ds1-2","1.1.3+ds1-2ubuntu0.1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.2-1ubuntu0.1"}]}],"versions":["1.2.4+ds-2","1.3.1-1","1.3.2-1"]},{"source":"osv","ecosystem":"Ubuntu:25.10","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.9-1ubuntu0.1"}]}],"versions":["1.3.8-2","1.3.9-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.10-3ubuntu0.1"}]}],"versions":["1.3.9-1","1.3.10-3","1.3.10-3build1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"python-Mako","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.11-1.1"}]}]}],"products":[{"vendor":"sqlalchemy","product":"mako"}],"references":[{"url":"https://github.com/sqlalchemy/mako/security/advisories/GHSA-v92g-xgxw-vvmm","tags":["x_refsource_CONFIRM","Mitigation","Vendor Advisory","advisory","web","report"]},{"url":"https://github.com/sqlalchemy/mako/commit/e05ac61989a7fb9dd7dcde6cfd72dc48328719a3","tags":["x_refsource_MISC","fix","web"]},{"url":"https://github.com/sqlalchemy/mako/releases/tag/rel_1_3_11","tags":["x_refsource_MISC","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-41205","tags":["web","advisory"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/mako/PYSEC-2026-88.yaml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-v92g-xgxw-vvmm"},{"url":"https://errata.tuxcare.com/els_os/ubuntu18.04els/CLSA-2026-1791547905.html","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/41xxx/CVE-2026-41205.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-41205","tags":["advisory"]},{"url":"https://github.com/sqlalchemy/mako","tags":["package"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-20261819-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1262716","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2026-41205","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-20261820-1/","tags":["advisory"]},{"url":"https://www.suse.com/support/update/announcement/2026/suse-su-202621426-1/","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-41205","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-41205","tags":["report"]},{"url":"https://ubuntu.com/security/notices/USN-8234-1","tags":["advisory"]},{"url":"","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2026-41205","title":"Mako: Path traversal via double-slash URI prefix in TemplateLookup","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T18:52:24.194Z","modified":"2026-05-20T01:32:18.382Z","cvss":[{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high","assessor":"cna"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T13:41:19.694734Z"}],"euvd":[{"id":"EUVD-2026-25279","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T18:52:24Z","modified":"2026-05-20T01:32:18Z","cvss":[{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"updated_at":"2026-11-02T18:21:15.217097Z"}],"ghsa":[{"id":"GHSA-v92g-xgxw-vvmm","title":"Mako: Path traversal via double-slash URI prefix in TemplateLookup","description":"### Summary\n\n`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:\n\n- `Template.__init__` strips **one** leading `/` using `if`/slice\n- `TemplateLookup.get_template()` strips **all** leading `/` using `re.sub(r\"^\\/+\", \"\")`\n\nWhen a URI like `//../../../../etc/passwd` is passed:\n1. `get_template()` strips all `/` → `../../../../etc/passwd` → file found via `posixpath.join(dir_, u)`\n2. `Template.__init__` strips one `/` → `/../../../../etc/passwd` → `normpath` → `/etc/passwd`\n3. `/etc/passwd`.startswith(`..`) → `False` → **check bypassed**\n\n### Impact\n\nArbitrary 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()`.\n\nNote: 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.\n\n### Fix\n\nChanged `Template.__init__` to use `lstrip(\"/\")` instead of stripping only a single leading slash, so both code paths handle leading slashes consistently.","status":"published","published":"2026-04-16T21:16:40Z","modified":"2026-06-05T14:13:06Z","cvss":[{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:40:16.698699Z"}],"nvd":[{"id":"CVE-2026-41205","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T19:17:29.27Z","modified":"2026-10-26T21:10:00.17Z","cvss":[{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P/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","level":"high","assessor":"secondary"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high","assessor":"primary"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T14:12:15.867234Z"}],"osv":[{"id":"CVE-2026-41205","title":"Mako: Path traversal via double-slash URI prefix in TemplateLookup","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T18:52:24.194Z","modified":"2026-10-28T02:30:35.822899313Z","cvss":[{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:45:03.764807Z"},{"id":"DEBIAN-CVE-2026-41205","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T19:17:29.27Z","modified":"2026-10-27T09:47:31.374720944Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high"}],"updated_at":"2026-11-02T15:45:54.892385Z"},{"id":"GHSA-v92g-xgxw-vvmm","title":"Mako: Path traversal via double-slash URI prefix in TemplateLookup","description":"### Summary\n\n`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:\n\n- `Template.__init__` strips **one** leading `/` using `if`/slice\n- `TemplateLookup.get_template()` strips **all** leading `/` using `re.sub(r\"^\\/+\", \"\")`\n\nWhen a URI like `//../../../../etc/passwd` is passed:\n1. `get_template()` strips all `/` → `../../../../etc/passwd` → file found via `posixpath.join(dir_, u)`\n2. `Template.__init__` strips one `/` → `/../../../../etc/passwd` → `normpath` → `/etc/passwd`\n3. `/etc/passwd`.startswith(`..`) → `False` → **check bypassed**\n\n### Impact\n\nArbitrary 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()`.\n\nNote: 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.\n\n### Fix\n\nChanged `Template.__init__` to use `lstrip(\"/\")` instead of stripping only a single leading slash, so both code paths handle leading slashes consistently.","status":"published","published":"2026-04-16T21:16:40Z","modified":"2026-09-10T03:51:03.377000392Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high"},{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"}],"cwes":["CWE-22"],"updated_at":"2026-11-02T15:46:56.981655Z"},{"id":"PYSEC-2026-88","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T19:17:29.27Z","modified":"2026-05-20T09:19:06.23296Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high"}],"updated_at":"2026-11-02T15:52:58.117212Z"},{"id":"ROOT-APP-PYPI-CVE-2026-41205","title":"CVE-2026-41205 in mako - Patched by Root","description":"Root has patched CVE-2026-41205 in the mako package for Root:PyPI. Multiple fixed versions available.","status":"published","published":"2026-09-10T13:06:20Z","modified":"2026-09-10T14:15:03.08650365Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high"}],"updated_at":"2026-11-02T15:53:28.259095Z"},{"id":"UBUNTU-CVE-2026-41205","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-24T00:00:00Z","modified":"2026-05-20T16:25:40.989592822Z","cvss":[{"version":"4.0","score":7.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P","level":"high"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N","level":"high"}],"updated_at":"2026-11-02T16:56:16.686388Z"},{"id":"AZL-83606","title":"CVE-2026-41205 affecting package python-mako for versions less than 1.2.4-3","description":"Mako is a template library written in Python. Prior to 1.3.11, 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. Any file readable by the process can be returned as rendered template content when an application passes untrusted input directly to TemplateLookup.get_template(). This vulnerability is fixed in 1.3.11.","status":"published","published":"2026-04-23T19:17:29Z","modified":"2026-11-05T05:40:51Z","updated_at":"2026-11-05T16:41:24.988217Z"},{"id":"CLSA-2026-1791547905","title":"Fix CVE(s): CVE-2026-41205","description":"   * SECURITY UPDATE: path traversal via //-prefixed URI in TemplateLookup\n     - debian/patches/CVE-2026-41205.patch: strip every leading / in Template()\n     - CVE-2026-41205\n   * debian/python-mako-doc.links: fix the dangling changelog symlinks","status":"published","published":"2026-10-09T12:11:58Z","modified":"2026-10-26T09:32:04.524658007Z","updated_at":"2026-11-02T15:43:50.599064Z"},{"id":"openSUSE-SU-2026:10616-1","title":"python311-Mako-1.3.11-1.1 on GA media","description":"These are all security issues fixed in the python311-Mako-1.3.11-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-04-25T00:00:00Z","modified":"2026-04-26T09:45:07.583964Z","updated_at":"2026-11-02T16:58:38.415593Z"},{"id":"openSUSE-SU-2026:20645-1","title":"Security update for python-Mako","description":"This update for python-Mako fixes the following issue:\n\n- CVE-2026-41205: Prior to 1.3.11, TemplateLookup.get_template() is vulnerable to path traversal (bsc#1262716).\n","status":"published","published":"2026-04-29T08:17:18Z","modified":"2026-05-01T18:27:09.58438Z","updated_at":"2026-11-02T16:58:41.463445Z"},{"id":"SUSE-SU-2026:1819-1","title":"Security update for python-Mako","description":"This update for python-Mako fixes the following issue:\n\n- CVE-2026-41205: Prior to 1.3.11, TemplateLookup.get_template() is vulnerable to path traversal (bsc#1262716).\n","status":"published","published":"2026-05-12T07:59:09Z","modified":"2026-05-14T08:15:21.412156Z","updated_at":"2026-11-02T15:54:01.610851Z"},{"id":"SUSE-SU-2026:1820-1","title":"Security update for python-Mako","description":"This update for python-Mako fixes the following issue:\n\n- CVE-2026-41205: Prior to 1.3.11, TemplateLookup.get_template() is vulnerable to path traversal (bsc#1262716).\n","status":"published","published":"2026-05-12T07:59:56Z","modified":"2026-05-14T08:15:46.168856Z","updated_at":"2026-11-02T15:54:01.610851Z"},{"id":"SUSE-SU-2026:21426-1","title":"Security update for python-Mako","description":"This update for python-Mako fixes the following issue:\n\n- CVE-2026-41205: Prior to 1.3.11, TemplateLookup.get_template() is vulnerable to path traversal (bsc#1262716).\n","status":"published","published":"2026-04-29T08:17:04Z","modified":"2026-05-05T18:23:49.802432Z","updated_at":"2026-11-02T15:54:02.312556Z"},{"id":"USN-8234-1","title":"python-mako vulnerability","description":"It was discovered that Mako incorrectly handled URIs with double-slash\nprefixes in TemplateLookup. A remote attacker could possibly use this issue\nto obtain sensitive information.","status":"published","published":"2026-05-05T18:27:40Z","modified":"2026-06-25T13:32:32.004699765Z","updated_at":"2026-11-02T16:58:22.951676Z"}]}}
