{"id":"CVE-2026-54354","aliases":["DEBIAN-CVE-2026-54354","EUVD-2026-82431","GHSA-xp29-8wp5-wc3p","UBUNTU-CVE-2026-54354"],"status":"published","title":"MapServer: PostGIS Numeric Filter Value SQL Injection in MapServer Runtime Query Translation","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","severity":{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-12","score":0.00684,"percentile":0.53064,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-89"],"published":"2026-09-17T20:22:57Z","modified":"2026-10-28T11:14:35Z","fixes":[{"ecosystem":"Debian:14","package":"mapserver","fixed_in":["8.6.4-1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["8.0.0-3","8.0.0-3+deb12u1","8.0.1-1","8.0.1-1~exp1","8.0.1-2","8.0.1-2.1~exp1","8.0.1-2~bpo12+1","8.0.1-3","8.0.1-3~exp1","8.0.1-4","8.0.1-5","8.0.2-1","8.0.2-1~bpo12+1","8.2.0-1","8.2.0-1~bpo12+1","8.2.0~beta1-1~exp1","8.2.0~beta2-1~exp1","8.2.0~beta3-1~exp1","8.2.0~rc1-1~exp1","8.2.0~rc2-1~exp1","8.2.0~rc3-1~exp1","8.2.1-1","8.2.1-1~bpo12+1","8.2.2-1","8.2.2-1~bpo12+1","8.4.0-1","8.4.0-1~bpo12+1","8.4.0-2","8.4.0-3","8.4.0-4","8.4.0~beta1-1~exp1","8.4.0~beta2-1~exp1","8.4.0~rc1-1~exp1","8.4.1-1","8.4.1-1~bpo13+1","8.4.1-2","8.6.0-1","8.6.0-1~bpo13+1","8.6.0~beta1-1~exp1","8.6.0~beta2-1~exp1","8.6.0~rc1-1~exp1","8.6.1-1","8.6.1-1~bpo13+1","8.6.2-1","8.6.2-1~bpo13+1","8.6.3-1","8.6.3-1~bpo13+1","8.6.4-1","8.6.4-1~bpo13+1","8.6.5-1","8.6.5-1~bpo13+1","8.6.6-1","8.6.6-1~bpo13+1"]},{"source":"osv","ecosystem":"Debian:13","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["8.4.0-4","8.4.0-4+deb13u1","8.4.0-4+deb13u2","8.4.1-1","8.4.1-1~bpo13+1","8.4.1-2","8.6.0-1","8.6.0-1~bpo13+1","8.6.0~beta1-1~exp1","8.6.0~beta2-1~exp1","8.6.0~rc1-1~exp1","8.6.1-1","8.6.1-1~bpo13+1","8.6.2-1","8.6.2-1~bpo13+1","8.6.3-1","8.6.3-1~bpo13+1","8.6.4-1","8.6.4-1~bpo13+1","8.6.5-1","8.6.5-1~bpo13+1","8.6.6-1","8.6.6-1~bpo13+1"]},{"source":"osv","ecosystem":"Debian:14","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"8.6.4-1"}]}],"versions":["8.4.0-4","8.4.1-1","8.4.1-1~bpo13+1","8.4.1-2","8.6.0-1","8.6.0-1~bpo13+1","8.6.0~beta1-1~exp1","8.6.0~beta2-1~exp1","8.6.0~rc1-1~exp1","8.6.1-1","8.6.1-1~bpo13+1","8.6.2-1","8.6.2-1~bpo13+1","8.6.3-1","8.6.3-1~bpo13+1","8.6.4-1~bpo13+1"]},{"source":"osv","ecosystem":"Ubuntu:16.04:LTS","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.0.0-4build1","7.0.0-5ubuntu1","7.0.0-7","7.0.0-8","7.0.0-8build1","7.0.0-9","7.0.0-9ubuntu1","7.0.0-9ubuntu2","7.0.0-9ubuntu3","7.0.0-9ubuntu3.1"]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.0.6-2build1","7.0.7-1","7.0.7-1build1","7.0.7-1build2"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.4.1-1build1","7.4.1-1build3","7.4.2-1","7.4.2-1build1","7.4.3-1","7.4.3-1build2","7.4.3-2","7.4.3-2build1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["7.6.3-1~exp1ubuntu1","7.6.4-2","7.6.4-2build2"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["8.0.1-2build1","8.0.1-2build2","8.0.1-2build3","8.0.1-2build5","8.0.1-4ubuntu1","8.0.1-4ubuntu2"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"mapserver","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["8.4.0-4build1","8.4.1-1","8.4.1-1build1","8.4.1-2","8.4.1-2build1","8.6.0-1","8.6.0-1build1"]}],"products":[{"vendor":"mapserver","product":"mapserver"}],"references":[{"url":"https://github.com/MapServer/MapServer/security/advisories/GHSA-xp29-8wp5-wc3p","tags":["x_refsource_CONFIRM","advisory","report"]},{"url":"https://github.com/MapServer/MapServer/pull/7516","tags":["x_refsource_MISC","fix","report"]},{"url":"https://github.com/MapServer/MapServer/commit/65f1b53c258df2abdf6ce1f437c29e75e9976247","tags":["x_refsource_MISC","fix","report"]},{"url":"https://github.com/MapServer/MapServer/commit/bd59d49779d2ecc64ca8dc1281c53231a50b698e","tags":["x_refsource_MISC","fix","report"]},{"url":"https://github.com/MapServer/MapServer/releases/tag/rel-8-6-4","tags":["x_refsource_MISC","web","report"]},{"url":"https://mapserver.org/development/changelog/changelog-8-6.html#changelog-8-6","tags":["x_refsource_MISC","web","report"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/54xxx/CVE-2026-54354.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54354","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-54354","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-54354","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-54354","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-54354","title":"MapServer: PostGIS Numeric Filter Value SQL Injection in MapServer Runtime Query Translation","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","status":"published","published":"2026-09-17T20:22:57.842Z","modified":"2026-09-18T14:43:41.551Z","cvss":[{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high","assessor":"cna"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T13:38:09.774038Z"}],"euvd":[{"id":"EUVD-2026-82431","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","status":"published","published":"2026-09-17T20:22:57Z","modified":"2026-09-18T14:43:41Z","cvss":[{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high"}],"updated_at":"2026-11-02T17:28:08.412343Z"}],"nvd":[{"id":"CVE-2026-54354","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","status":"published","published":"2026-09-17T21:17:15.26Z","modified":"2026-09-24T21:19:05.34Z","cvss":[{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high","assessor":"secondary"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T14:12:49.70655Z"}],"osv":[{"id":"CVE-2026-54354","title":"MapServer: PostGIS Numeric Filter Value SQL Injection in MapServer Runtime Query Translation","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","status":"published","published":"2026-09-17T20:22:57.842Z","modified":"2026-10-28T11:14:35.206143024Z","cvss":[{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high"}],"cwes":["CWE-89"],"updated_at":"2026-11-02T15:45:10.818486Z"},{"id":"DEBIAN-CVE-2026-54354","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","status":"published","published":"2026-09-17T21:17:15.26Z","modified":"2026-09-25T08:47:32.823609016Z","cvss":[{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high"}],"updated_at":"2026-11-02T15:45:57.236551Z"},{"id":"UBUNTU-CVE-2026-54354","description":"MapServer is a system for developing web-based GIS applications. Prior to 8.6.4, MapServer's PostGIS runtime filter translation in src/mappostgis.cpp and msPostGISLayerTranslateFilter() treats a filteritem as numeric when CONNECTIONTYPE POSTGIS and metadata such as gml_\u003citem\u003e_type=Integer are configured, but it does not verify that attacker-controlled CGI qstring or OGC API Features featureId input is a numeric literal. The unquoted input is concatenated into the generated PostgreSQL/PostGIS predicate, allowing an unauthenticated remote attacker with access to an affected query endpoint to bypass predicates, enumerate unintended records, perform boolean-based or time-based SQL injection, and increase database load. The issue does not by itself establish database modification capabilities. This issue is fixed in version 8.6.4.","status":"published","published":"2026-09-17T21:17:00Z","modified":"2026-09-23T23:31:21Z","cvss":[{"version":"3.1","score":8.2,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L","level":"high"}],"updated_at":"2026-11-02T16:56:41.382716Z"}]}}
