Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify published writable WFS3 layer
-
DeliverySubmit feature with script in property value
-
ExploitPayload stored unescaped in layer
-
ExecutionVictim opens items.html page
-
PersistScript executes in QGIS Server origin
-
ImpactSteal session / issue authenticated requests
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires (1) QGIS Server with the WFS3 / OGC API Features interface enabled and serving HTML responses, and (2) a published vector layer that is WRITABLE so the attacker can inject arbitrary values into feature.properties (e.g. via WFS-T transactions) - a flaw against the getFeatures.html/getFeature.html templates reached through QgsServerOgcApiHandler::htmlDump and the if_nullptr_null_str callback. Exploitation is further gated by required user interaction (UI:R): a victim must open the affected items or feature HTML page in a browser for the stored payload to execute. These limiting factors - the non-default writable-layer configuration and the need for a human to view the page - meaningfully constrain real-world risk below what the network attack vector alone implies; versions 3.44.12 and later (and 4.x once patched) are not affected. |
| Impact | This is a stored (persistent) cross-site scripting flaw (CWE-79) in QGIS Server's WFS3 / OGC API Features HTML renderer, rated CVSS 6.1 (Medium) by the vendor with vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N. The network vector and low complexity are real, but two signals temper the raw score: UI:R means a victim must actually open the items/getFeature HTML page, and the attacker must first get malicious markup into feature.properties of a PUBLISHED, WRITABLE vector layer - a non-default, deployment-specific precondition that the PR:N metric does not capture well. No EPSS score, no CISA KEV listing, and no public exploit were provided in the input, so there is no public exploit identified at time of analysis; exploitation is therefore theoretical rather than observed. The scope change (S:C) is justified because the injected script executes in the QGIS Server origin against the viewer rather than the attacker's own context, enabling session-data theft or authenticated requests as the viewer (C:L/I:L). Net assessment: a legitimate medium-severity web vulnerability worth patching on exposed QGIS Server instances, but not an urgent mass-exploitation priority - the writable-layer and user-interaction requirements make it better suited to targeted attacks against multi-user QGIS Server deployments than to opportunistic internet-wide exploitation. |
| Exploit ScenarioDerived | In a QGIS Server deployment that publishes a vector layer writable via WFS-T, an attacker submits a feature whose text property contains markup such as <script>...</script> or an event-handler payload. When a legitimate analyst later browses that layer's items HTML page (e.g. /wfs3/collections/<layer>/items.html), the unescaped value executes in the QGIS Server origin, letting the attacker read the viewer's session data or issue requests with the viewer's privileges. No public exploit was provided, though the vendor's regression test demonstrates the unescaped-to-escaped behavior change. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Stored cross-site scripting in QGIS Server's WFS3 (OGC API Features) HTML renderer allows an attacker who can write feature attributes into a published writable vector layer to inject markup or script that executes in the QGIS Server origin when a victim opens an items or feature HTML page. Affected releases are QGIS Server versions prior to 3.44.12 and the 4.x line from 4.0.0 through 4.2.3; exploitation requires the WFS3/OGC API Features interface to be enabled and serving HTML, a writable published layer the attacker can populate (for example through WFS-T transactions), and a user who actually views the crafted page. The vendor rates this CVSS 6.1 (Medium) with vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N, while our independent assessment applies the same score but a PR:L vector because the attacker must hold write access to a published layer; no public exploit code and no confirmed active exploitation (CISA KEV) were identified at time of analysis.
RemediationAI
Vendor-released patch: 3.44.12 (release tag final-3_44_12, QGIS security advisory GHSA-cr49-pm9v-m788) - upgrade QGIS Server to 3.44.12 or later, and move 4.x deployments off the affected 4.0.0-4.2.3 range as soon as a patched 4.x build containing the pull requests https://github.com/qgis/QGIS/pull/66616 and https://github.com/qgis/QGIS/pull/67044 is available. If immediate upgrade is not possible, apply compensating controls in order of effectiveness and accept their trade-offs: make exposed WFS layers read-only and disable WFS-T transactions, which removes the injection primitive but breaks legitimate editing workflows; disable the WFS3 / OGC API Features interface or restrict its HTML representation (prefer JSON/GeoJSON media types) via server configuration and reverse-proxy content negotiation, which limits functionality for GIS clients that rely on the HTML browsing view while preserving the API; and restrict network access to the OGC API endpoints to trusted clients. Because exploitation also requires a victim to open the items or feature HTML page, warning operators not to browse untrusted layers' .html endpoints, and adding a Content-Security-Policy with script-src 'self' or stricter at the reverse proxy, will reduce but not eliminate execution of stored markup (inline handler and markup injection via other vectors may still render). Audit existing writable layers for stored payloads in feature attributes before re-enabling HTML output, since patching stops future injection but does not sanitize data already persisted in the database.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is a classic CWE-79 improper neutralization of input during web page generation, manifesting as a stored/persistent XSS rather than a reflected one. QGIS Server's OGC API Features implementation renders feature data through the inja/HTML template layer; resources/server/api/ogc/templates/wfs3/getFeatures.html and getFeature.html emitted attribute values directly, and QgsServerOgcApiHandler::htmlDump had explicitly disabled automatic escaping (env.set_html_autoescape(true) removed) so that generated hyperlinks would not be mangled. The if_nullptr_null_str template callback passed attacker-controlled feature.properties values through unchanged, and the resulting HTML was returned to the client in the QGIS Server origin. The upstream fix keeps autoescape off for link correctness but introduces an explicit escape() template callback that converts &, <, >, ", and ' to their HTML entities, and applies it around if_nullptr_null_str(value) in both the collection list and single-feature templates; regression tests confirm that a field containing <b>test</b> is rendered as <b>test</b>. The impact is amplified by the scoped-change (S:C) metric: script executing in the server origin can read viewer session data or perform authenticated actions with the victim's privileges.
Know when Qgis gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
Stored payload needs write access to a published writable layer (PR:L); victim must open the HTML page (UI:R); script runs in the server origin against the viewer (S:C, C:L/I:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
QGIS is a free, open source, cross-platform geographic information system. Prior to 3.44.12 and 4.0.0 through 4.2.3, QGIS Server renders feature data in WFS3 (OGC API Features) HTML responses without HTML escaping. Attacker-controlled feature.properties values from a published writable vector layer reach resources/server/api/ogc/templates/wfs3/getFeatures.html through QgsServerOgcApiHandler::htmlDump and the if_nullptr_null_str callback. A user who opens an items HTML page can execute stored markup or script in the QGIS Server origin, which can expose the viewer's session data or issue authenticated requests with the viewer's privileges. This issue is fixed in version 3.44.12.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-97977
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB