CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-39922

CVE-2026-39922: Server-Side Request Forgery in GeoNode Service Registration Endpoint

Alon Barad
Alon Barad
Software Engineer

Jun 8, 2026·7 min read·4 visits

Executive Summary (TL;DR)

Authenticated attackers can exploit a Server-Side Request Forgery (SSRF) flaw in GeoNode's service registration workflow to probe internal networks, port scan local services, and query cloud metadata endpoints by supplying crafted service URLs.

GeoNode versions prior to 4.4.5 and 5.0.2 are vulnerable to Server-Side Request Forgery (SSRF) in the service registration endpoint. Authenticated attackers with low privileges can exploit insufficient input validation in the Web Map Service (WMS) registration module to force the application server to make outbound network queries to loopback addresses, private RFC1918 subnets, link-local scopes, and cloud metadata endpoints. This technical report details the mechanics of the vulnerability, the underlying architectural flaw, and how to effectively remediate and mitigate the associated security risks.

Vulnerability Overview

GeoNode is an open-source web-based geographic information system (GIS) platform that enables administrative and low-privilege users to share, manage, and edit geospatial datasets. The application utilizes the Django framework and integrates with backend geospatial servers such as GeoServer to render maps and manage spatial layers. To expand its repository, GeoNode permits users to link external Open Geospatial Consortium (OGC) web services, such as Web Map Services (WMS), to pull remote spatial data directly into the local workspace.

This integration capability introduces a requirement to programmatically verify remote services prior to persistent registration. During registration, the GeoNode backend initiates an HTTP connection to the remote server to fetch capabilities metadata and confirm the remote service is active. This process runs within the application security context, inheriting the network capabilities and access privileges of the hosting server environment.

The service registration form validation routine exposes an attack surface that allows input URLs to be processed without validation of the destination host. Because low-privileged users are authorized to register services, an authenticated attacker can access the registration form to input arbitrary URLs. The application fails to restrict target hosts, allowing attackers to route arbitrary HTTP queries to internal networks and local server resources.

Root Cause Analysis

The vulnerability belongs to the Server-Side Request Forgery (SSRF) class, cataloged as CWE-918. The underlying security defect lies within the service handler responsible for validating WMS URLs during form submission. When a user submits a WMS registration request, the backend initiates a validation loop to verify the URL's schema and retrieve the remote capabilities document.

To perform this verification, the backend parses the user-provided string and initializes an HTTP request without resolving the target domain beforehand to inspect the destination IP address. Because there is no check to ensure the resolved IP address is a public, routable destination, the server attempts to establish TCP socket connections to loopback networks, local private subnets, and link-local ranges.

Furthermore, the application does not implement a domain allowlist or IP blocklist. This oversight allows attackers to specify local endpoints, private RFC1918 addresses, and sensitive cloud API endpoints such as the standard cloud metadata server at 169.254.169.254. Since the backend processes these requests under the server process context, any firewall boundaries protecting the internal network from external access are bypassed.

Code Analysis

In vulnerable versions of GeoNode, the service validation logic evaluates whether the target URL belongs to a valid Web Map Service. The logic accepts the base URL directly from the user form data and initiates an outbound network connection using internal libraries. The code snippet below demonstrates how the insecure implementation processes user-supplied URLs without restricting the destination host.

# Insecure WMS registration validation
import requests
from django.core.exceptions import ValidationError
from owslib.wms import WebMapService
 
def validate_remote_wms(base_url):
    # INSECURE: No resolution checks are performed on the host.
    # Any loopback, private RFC1918, or metadata IP will be requested.
    try:
        wms = WebMapService(base_url, timeout=5)
        return True
    except Exception as e:
        raise ValidationError(f"Could not connect to service: {e}")

The remediation strategy introduces a dedicated validation layer that intercepts the input URL before any network socket is opened. It resolves the hostname and evaluates all returned IP addresses against a designated blocklist of private, local, and reserved network ranges. The following block demonstrates the secure validation structure implemented in the updated versions.

# Patched and secure service validation implementation
import socket
import ipaddress
from urllib.parse import urlparse
from django.core.exceptions import ValidationError
 
def is_safe_destination(url):
    try:
        parsed_url = urlparse(url)
        hostname = parsed_url.hostname
        if not hostname:
            return False
        
        # Resolve hostname to all associated IP addresses to prevent DNS pinning bypasses
        addr_info = socket.getaddrinfo(hostname, None)
        for family, _, _, _, sockaddr in addr_info:
            ip_str = sockaddr[0]
            ip = ipaddress.ip_address(ip_str)
            
            # Block private, loopback, link-local, and multicast addresses
            if ip.is_private or ip.is_loopback or ip.is_link_local or ip.is_multicast:
                return False
        return True
    except Exception:
        return False
 
def validate_remote_wms_secure(base_url):
    # SECURE: Validate destination before initiating any external connection
    if not is_safe_destination(base_url):
        raise ValidationError("Insecure URL destination: Access to internal IP ranges is prohibited.")
    
    # Safe to perform outbound verification
    from owslib.wms import WebMapService
    wms = WebMapService(base_url, timeout=5)
    return True

This implementation mitigates DNS rebinding bypass attempts by validating every IP address resolved during DNS queries. Even if an attacker uses a domain that dynamically alternates between public and private IP addresses, the custom validation layer blocks the execution because all resolved IP addresses must pass the safety checks.

Exploitation Methodology

To exploit this vulnerability, an attacker must first obtain standard authenticated credentials on the target GeoNode instance. Once authenticated, the attacker accesses the service registration module via the user interface or by sending a direct POST request to the services API endpoint. The attacker submits a registration payload with the base URL configured to target internal systems instead of a legitimate public WMS endpoint.

An attacker can perform internal port scanning by submitting URLs targeting specific ports on loopback or private hosts. For example, submitting http://127.0.0.1:5432 targets an internal PostgreSQL database, while http://127.0.0.1:6379 targets a Redis instance. By monitoring the response times and error messages returned by the GeoNode backend, the attacker can infer the operational status of internal ports.

POST /api/v2/services/ HTTP/1.1
Host: geonode.example.com
Authorization: Bearer <valid_user_token>
Content-Type: application/json
 
{
  "base_url": "http://169.254.169.254/latest/meta-data/",
  "service_type": "WMS",
  "name": "metadata_probe_service"
}

In cloud environments, this methodology is utilized to query the instance metadata service to extract administrative credentials. For instance, querying the AWS link-local IP retrieves the IAM role security credentials associated with the host server. The returned response or error trace can leak these secrets back to the attacker, leading to broader compromise of the cloud infrastructure.

Impact Assessment

The CVSS v3.1 base score is assessed at 6.3, reflecting a Medium severity profile. The score is constrained because exploiting the flaw requires authenticating with at least low-privileged credentials, and the impact does not directly grant arbitrary code execution. However, the vector string CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L highlights partial compromises in confidentiality, integrity, and availability.

The primary risk associated with this SSRF vulnerability is the exposure of internal-only infrastructure components. Many internal services, such as databases, microservices, and monitoring systems, operate with reduced authentication checks under the assumption that they are isolated from public ingress. Using GeoNode as an exploitation proxy allows attackers to bypass boundary network controls to execute arbitrary commands or modify data configurations on these unprotected internal servers.

The vulnerability also presents a risk of cloud infrastructure exposure through the leakage of instance metadata. Extracting temporary security tokens from the metadata endpoint enables lateral movement inside the associated cloud environment. While the current EPSS score is 0.00044, indicating low active exploitation probability, the potential impact warrants immediate patching to secure deployment boundaries.

Remediation and Defenses

Remediation of CVE-2026-39922 requires updating the GeoNode installation to a non-vulnerable release. For deployments operating on the 4.x release line, administrators must upgrade to version 4.4.5 or higher. For deployments running on the 5.x release line, upgrading to version 5.0.2 or higher is necessary to secure the service registration endpoints.

If an immediate upgrade is not feasible, network-level egress filtering must be configured on the host or container runtime. Egress security rules should be configured to prevent the GeoNode application server from sending packets to private subnets or localhost interfaces. In containerized environments, this can be enforced using network policies or iptables configurations that drop outbound traffic directed to the 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, and 169.254.169.254 scopes.

For cloud deployments, IMDSv2 must be mandated with a hop limit set to 1. This prevents the containerized GeoNode application from receiving responses from the metadata endpoint because the IP packet TTL is decremented below the threshold required to return to the container namespace. Additionally, administrators should review Django authentication configurations to limit the permission to register remote services to highly trusted users.

Official Patches

GeoNodeGeoNode 4.4.5 Release Tag
GeoNodeGeoNode 5.0.2 Release Tag

Technical Appendix

CVSS Score
6.3/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
EPSS Probability
0.04%
Top 86% most exploited

Affected Systems

GeoNode 4.0.0 through 4.4.4GeoNode 5.0.0 through 5.0.1

Affected Versions Detail

Product
Affected Versions
Fixed Version
GeoNode
GeoNode
>= 4.0.0, < 4.4.54.4.5
GeoNode
GeoNode
>= 5.0.0, < 5.0.25.0.2
AttributeDetail
CWE IDCWE-918 (Server-Side Request Forgery)
Attack VectorNetwork (AV:N)
CVSS v3.1 Base Score6.3 (Medium)
EPSS Score0.00044
ImpactInternal Port Scanning, Cloud Metadata Extraction, and Subnet Reconnaissance
Exploit StatusProof of Concept (PoC) documented
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web application receives a URL from an upstream component and executes an HTTP query without validating that the destination lies on a public, non-reserved IP subnet, allowing attackers to access internal network resources.

Vulnerability Timeline

Vulnerability officially published by VulnCheck and GitHub
2026-04-10
GeoNode 4.4.5 and 5.0.2 security patch updates released
2026-04-10
NVD analysis completed and published to CVE database
2026-04-16

References & Sources

  • [1]GeoNode Security Advisory GHSA-hw9r-6m78-w6h3
  • [2]VulnCheck Security Advisory
  • [3]PyPA Advisory Database Record
  • [4]NVD CVE-2026-39922 Detail
  • [5]CVE Org Database Entry

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 12 hours ago•CVE-2022-0492
7.8

CVE-2022-0492: Privilege Escalation and Container Escape via cgroups v1 release_agent

CVE-2022-0492 is a high-severity missing authorization vulnerability in the Linux kernel's Control Groups (cgroups) v1 implementation. The flaw resides within the cgroup_release_agent_write function in kernel/cgroup/cgroup-v1.c, where the kernel fails to validate if the process writing to the release_agent file possesses administrative capabilities in the initial user namespace. This allows a local attacker inside a container with root privileges (UID 0) to abuse user namespaces, mount a cgroups v1 directory, modify the release_agent parameter, and execute arbitrary commands on the host system as host root, effectively achieving a complete container escape.

Amit Schendel
Amit Schendel
8 views•7 min read
•2 days ago•GHSA-G72G-R7M4-9X4G
6.3

GHSA-G72G-R7M4-9X4G: Insufficient Session Expiration of OAuth Tokens in NocoDB

NocoDB is subject to an insufficient session expiration vulnerability where OAuth access and refresh tokens are not invalidated or revoked during security-sensitive actions such as password changes, forgot-password requests, or password resets. This allows an attacker possessing an active OAuth token to maintain unauthorized persistence.

Amit Schendel
Amit Schendel
9 views•6 min read
•2 days ago•GHSA-FGMC-2HQJ-86V4
6.9

GHSA-FGMC-2HQJ-86V4: Default Administrative Credentials in vantage6-server

A vulnerability in the vantage6 federated learning framework allows unauthenticated remote attackers to gain administrative control of the server via hardcoded default credentials (root/root) when deployed under default configurations in versions 4.2.3 and below.

Amit Schendel
Amit Schendel
8 views•5 min read
•2 days ago•GHSA-X9F6-9RVM-MMRG
6.9

GHSA-X9F6-9RVM-MMRG: Improper Access Control and Volume Mount Isolation Bypass in vantage6 Node

An improper access control vulnerability in the vantage6 node component allows concurrently running algorithm containers to read and modify sensitive input and output files of other tasks. The lack of strict workspace directory isolation exposes a significant attack surface in multi-tenant or federated environments where untrusted algorithms are executed.

Amit Schendel
Amit Schendel
3 views•4 min read
•3 days ago•CVE-2026-47760
8.7

CVE-2026-47760: Cross-Site Scripting (XSS) via SVG Namespace Sanitizer Bypass in TinyMCE

TinyMCE versions 6.8.0 through 7.0.1 contain a high-severity Cross-Site Scripting (XSS) vulnerability. The flaw exists in the custom HTML parser and sanitizer module, which incorrectly manages SVG namespace scopes when parsing nested elements. A low-privileged or unauthenticated attacker can submit a crafted HTML payload containing nested SVG structures to bypass sanitization filters, leading to arbitrary JavaScript execution in the context of the victim's browser session.

Alon Barad
Alon Barad
28 views•7 min read
•3 days ago•CVE-2026-47759
8.7

CVE-2026-47759: Stored Cross-Site Scripting (XSS) via Unsanitized data-mce-* Serialization Bypass in TinyMCE

CVE-2026-47759 is a critical stored Cross-Site Scripting (XSS) vulnerability affecting multiple active branches of the TinyMCE rich text editor. The flaw resides in the editor's handling of user-controlled, prefixed internal attributes, such as data-mce-href, data-mce-src, and data-mce-style. When processing raw HTML inputs, TinyMCE's internal validation schema neglects to inspect these custom prefixed attributes. During HTML serialization, the editor's engine extracts these unsanitized values and copies them back into standard executable attributes, overwriting any previously sanitized standard values and leading to execution of arbitrary code.

Amit Schendel
Amit Schendel
13 views•7 min read