CVE-2023-40017

7.5 HIGH

📋 TL;DR

This CVE describes a Server-Side Request Forgery (SSRF) vulnerability in GeoNode's proxy endpoint. Attackers can exploit the `/proxy/?url=` endpoint to make unauthorized requests to internal network resources, potentially scanning ports and accessing sensitive internal systems. All GeoNode deployments running versions 3.2.0 through 4.1.2 are affected.

💻 Affected Systems

Products:
  • GeoNode
Versions: 3.2.0 through 4.1.2
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: All default installations within the affected version range are vulnerable. The proxy endpoint is typically enabled by default.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Complete internal network compromise through chained attacks, data exfiltration from internal services, or lateral movement to critical infrastructure.

🟠

Likely Case

Internal network reconnaissance, port scanning of internal hosts, and unauthorized access to internal web services or APIs.

🟢

If Mitigated

Limited to scanning accessible internal services without authentication, potentially revealing network topology.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

SSRF vulnerabilities are commonly exploited with simple HTTP requests. No authentication is required to access the vulnerable endpoint.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 4.1.3 or apply commit a9eebae80cb362009660a1fd49e105e7cdb499b9

Vendor Advisory: https://github.com/GeoNode/geonode/security/advisories/GHSA-rmxg-6qqf-x8mr

Restart Required: Yes

Instructions:

1. Update GeoNode to version 4.1.3 or later. 2. Alternatively, apply the patch from commit a9eebae80cb362009660a1fd49e105e7cdb499b9. 3. Restart the GeoNode service after patching.

🔧 Temporary Workarounds

Disable Proxy Endpoint

all

Temporarily disable the vulnerable /proxy/ endpoint if immediate patching isn't possible.

# Modify GeoNode configuration to remove or disable proxy endpoint
# Exact commands depend on deployment method (Docker, manual, etc.)

Network Access Control

linux

Implement network-level restrictions to limit outbound connections from GeoNode server.

# Configure firewall rules to restrict outbound connections
# Example: iptables -A OUTPUT -p tcp --dport 80 -j DROP
# Adjust based on required external services

🧯 If You Can't Patch

  • Implement strict network segmentation to isolate GeoNode from internal networks.
  • Deploy a Web Application Firewall (WAF) with SSRF protection rules.

🔍 How to Verify

Check if Vulnerable:

Test if the /proxy/?url= endpoint accepts internal IP addresses or localhost URLs. Example: curl 'http://geonode-server/proxy/?url=http://127.0.0.1:22'

Check Version:

Check GeoNode version via admin interface or run: python -c "import geonode; print(geonode.__version__)"

Verify Fix Applied:

After patching, test that internal URL requests are blocked. Example: curl 'http://geonode-server/proxy/?url=http://127.0.0.1' should return an error.

📡 Detection & Monitoring

Log Indicators:

  • Unusual requests to /proxy/ endpoint with internal IPs
  • Multiple failed proxy requests to different ports
  • Requests to known internal services from GeoNode server

Network Indicators:

  • Outbound connections from GeoNode server to internal network ranges
  • Port scanning patterns originating from GeoNode server

SIEM Query:

source="geonode-access.log" AND uri_path="/proxy/" AND (dst_ip=10.0.0.0/8 OR dst_ip=172.16.0.0/12 OR dst_ip=192.168.0.0/16 OR dst_ip=127.0.0.0/8)

🔗 References

📤 Share & Export