{"id":"CVE-2026-108981","aliases":["DEBIAN-CVE-2026-108981","EUVD-2026-97159","GHSA-5fhq-3m7h-fqv8","UBUNTU-CVE-2026-108981"],"status":"published","title":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations...","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","severity":{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00164,"percentile":0.05689,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-61"],"published":"2026-10-12T02:27:15Z","modified":"2026-11-11T02:48:40Z","fixes":[{"ecosystem":"Debian:14","package":"libnginx-mod-http-cache-purge","fixed_in":["1:3.0.4-1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"libnginx-mod-http-cache-purge","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.3-4","1:2.3-5","1:2.3-5~exp1","1:2.3-6","1:2.5.3-1","1:2.5.3-2","1:2.5.3-3","1:2.5.3-4","1:2.5.4-1","1:2.5.5-1","1:2.5.6-1","1:3.0.2-1","1:3.0.3-1","1:3.0.4-1"]},{"source":"osv","ecosystem":"Debian:13","package":"libnginx-mod-http-cache-purge","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.5.3-3","1:2.5.3-4","1:2.5.4-1","1:2.5.5-1","1:2.5.6-1","1:3.0.2-1","1:3.0.3-1","1:3.0.4-1"]},{"source":"osv","ecosystem":"Debian:14","package":"libnginx-mod-http-cache-purge","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:3.0.4-1"}]}],"versions":["1:2.5.3-3","1:2.5.3-4","1:2.5.4-1","1:2.5.5-1","1:2.5.6-1","1:3.0.2-1","1:3.0.3-1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"libnginx-mod-http-cache-purge","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.3-5","1:2.3-6","1:2.3-6build2"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"libnginx-mod-http-cache-purge","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.5.5-1build2","1:2.5.6-1build1","1:3.0.2-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"libnginx-mod-http-cache-purge","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:2.5.3-3build1","1:2.5.4-1","1:2.5.4-1build1","1:2.5.5-1","1:2.5.5-1build1","1:2.5.5-1build2"]}],"products":[{"vendor":"denji","product":"ngx_cache_purge"}],"references":[{"url":"https://github.com/nginx-modules/ngx_cache_purge/pull/72","tags":["patch","fix","report"]},{"url":"https://github.com/nginx-modules/ngx_cache_purge/commit/a6da1352f52a8a02dd6828e88c39ed42fddcee96","tags":["patch","fix","report"]},{"url":"https://github.com/nginx-modules/ngx_cache_purge/releases/tag/3.0.4","tags":["web","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-108981","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-5fhq-3m7h-fqv8"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/108xxx/CVE-2026-108981.json","tags":["advisory"]},{"url":"https://github.com/nginx-modules/ngx_cache_purge","tags":["package"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-108981","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-108981","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-108981","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-108981","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T02:27:15.378Z","modified":"2026-10-14T17:18:00.208Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low","assessor":"cna"}],"cwes":["CWE-61"],"updated_at":"2026-11-02T14:20:10.510075Z"}],"euvd":[{"id":"EUVD-2026-97159","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T02:27:15Z","modified":"2026-10-14T17:18:00Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low"}],"updated_at":"2026-11-02T17:27:13.785562Z"}],"ghsa":[{"id":"GHSA-5fhq-3m7h-fqv8","title":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations...","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T03:32:56Z","modified":"2026-10-12T03:33:04Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low"}],"cwes":["CWE-61"],"updated_at":"2026-11-02T15:13:05.239643Z"}],"nvd":[{"id":"CVE-2026-108981","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T03:17:18.503Z","modified":"2026-10-16T19:56:15.773Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low","assessor":"secondary"}],"cwes":["CWE-61"],"updated_at":"2026-11-02T14:12:56.310333Z"}],"osv":[{"id":"CVE-2026-108981","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T02:27:15.378Z","modified":"2026-11-11T13:19:37.847527103Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low"}],"cwes":["CWE-61"],"updated_at":"2026-11-11T03:22:04.464623Z"},{"id":"DEBIAN-CVE-2026-108981","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T03:17:18.503Z","modified":"2026-10-24T05:00:38.325812686Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low"}],"updated_at":"2026-11-02T15:45:49.381767Z"},{"id":"UBUNTU-CVE-2026-108981","description":"ngx_cache_purge before 3.0.4 can allow file deletion via a symlink attack in certain situations where nginx and a served application (e.g., WordPress) run under the same user account. The attacker must be able to create a symlink inside the cache path. Version 3.0.4 fixes this for the case of a symlink created at an arbitrary earlier time, but does not resolve an applicable TOCTOU race condition. (The ngx_cache_purge module follows symlinks while walking the cache directory tree during purge operations. The module relies on nginx's ngx_walk_tree(), which relies on stat() and therefore follows symlinks.)","status":"published","published":"2026-10-12T03:17:00Z","modified":"2026-10-17T12:59:48.958212851Z","cvss":[{"version":"3.1","score":3.6,"vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:L","level":"low"}],"updated_at":"2026-11-02T16:55:59.130573Z"}]}}
