Skip to main content

QGIS Server CVE-2026-104140

| EUVDEUVD-2026-97977 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-12 GitHub_M
6.1
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify published writable WFS3 layer
  2. Delivery
    Submit feature with script in property value
  3. Exploit
    Payload stored unescaped in layer
  4. Execution
    Victim opens items.html page
  5. Persist
    Script executes in QGIS Server origin
  6. Impact
    Steal 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

QGIS < 3.44.12
QGIS 4.0.0, ≤ 4.2.3

Affected Packages

euvd qgis fix: 3.44.12

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 &lt;b&gt;test&lt;/b&gt;. 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

Vendor (GitHub_M) PRIMARY 6.1 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

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).

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

1
Patch available
Oct 12, 2026 - 23:04 EUVD

DescriptionCVE.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

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Low
QGIS Server web component is niche GIS infrastructure, limited production footprint
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy