DavidCarliez/CVE-2026-58635-PoC
GitHub: DavidCarliez/CVE-2026-58635-PoC
CVE-2026-58635 的概念验证工具,演示如何利用 Windows 讲述人盲文组件中的命令注入漏洞实现本地权限提升至 SYSTEM。
Stars: 22 | Forks: 6
# CVE-2026-58635:Windows 讲述人盲文本地权限提升
这是针对 **CVE-2026-58635** 的概念验证,它是
Windows 讲述人盲文中的一个命令注入漏洞。经过身份验证的本地用户可以
滥用可写的 BrlAPI 参数,使特权的 BRLTTY 服务执行
任意程序。
微软将该问题评为 **重要** 级别,其 CVSS 3.1 评分为 **7.8**
(`CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H`),并将其映射到 **CWE-77**。
## 概念验证演示内容
此 PoC 演练了以下路径:
```
standard user
-> starts the locally accessible BrlAPI service
-> connects to localhost:0 with auth=none
-> writes global BrlAPI parameter 29 (literary braille table)
-> BRLTTY interprets an executable path as an external contraction table
-> BRLTTY launches the supplied program as LocalService
-> optional SeImpersonate token stage
-> interactive SYSTEM command prompt
```
针对此 CVE 的特定原语最终实现了以 **LocalService** 身份的任意执行。
在受测的 Windows 配置中,该 token 拥有
`SeImpersonatePrivilege` 权限,因此所包含的演示可选择性地使用
[SigmaPotato](https://github.com/tylerdotrar/SigmaPotato) 来获取 SYSTEM
token,并在当前活动的控制台会话中启动一个可见的 shell。
## 为什么参数 29 很重要
BRLTTY 6.4.1 将 `BRLAPI_PARAM_LITERARY_BRAILLE_TABLE` 暴露为全局且
可写的参数。服务端会将提供的字符串传递给其缩写表
加载器。在 Windows 上,扩展名存在于 `PATHEXT` 中的路径会被
视为外部缩写程序,并通过 BRLTTY 的宿主命令
启动器启动。
触发机制会将普通的 Windows 路径(例如
`C:\lab\bin\localservice_stage.exe`)标准化为此
BRLTTY/MinGW 路径处理分支所预期的正斜杠形式。PoC 中并没有硬编码任何
用户配置文件、驱动器号、Windows 目录或账户名。
## 受影响的系统
必须安装可选的 **Accessibility.Braille** 功能,才能存在
受测的攻击面。微软 CNA 记录列出了多个受影响的 Windows 客户端和服务器
分支,这些分支受影响的版本均低于其 2026 年 7 月的修复
修订版。常见示例包括:
| 产品分支 | 潜在受影响版本低于 | 已知修复版本级别 |
| --- | ---: | ---: |
| Windows 10 1809 / Server 2019 | `17763.9020` | `17763.9020` 或更高 |
| Windows 10 21H2 | `19044.7548` | `19044.7548` 或更高 |
| Windows 10 22H2 | `19045.7548` | `19045.7548` 或更高 |
| Windows Server 2022 | `20348.5386` | `20348.5386` 或更高 |
| Windows 11 24H2 | `26100.8875` | `26100.8875` 或更高 |
| Windows 11 25H2 | `26200.8875` | `26200.8875` 或更高 |
| Windows 11 26H1 | `28000.2525` | `28000.2525` 或更高 |
仅凭内部版本号只是筛查信号,不能替代厂商
安全公告和已安装组件清单。请使用包含的只读检查器:
```
powershell -ExecutionPolicy Bypass -File .\scripts\Check-Vulnerability.ps1
```
它将报告:
- OS 内部版本和更新修订版;
- Accessibility.Braille 功能状态;
- 是否存在 `brlapi.dll` 和 `brltty.exe`;
- BrlAPI 服务注册和身份;
- 与支持分支的已知修复版本进行比对;以及
- 已安装的盲文组件的 SHA-256 哈希值。
该检查器**不会**启动 BrlAPI、写入参数 29 或执行 payload。
## 仓库结构
```
.
├── bin/ Compiled PoC binaries and SigmaPotato
├── scripts/
│ ├── Check-Vulnerability.ps1 Read-only exposure/build check
│ ├── Clear-Results.cmd Remove generated result files
│ ├── Get-SigmaPotato.ps1 Fetch and hash-check the upstream helper
│ ├── Prepare-Lab.ps1 Install the optional feature and set lab ACLs
│ └── Run-PoC.cmd Standard-user end-to-end demonstration
├── src/
│ ├── brlapi_trigger.cpp BrlAPI client and parameter-29 write
│ ├── localservice_stage.cpp LocalService identity proof and optional chain
│ ├── path_util.h Runtime path helpers
│ └── system_shell_launcher.cpp
├── third_party/SigmaPotato/ Version, hash, license, and attribution
├── Makefile
├── LICENSE
├── SHA256SUMS
└── NOTICE
```
## 构建
原始 PoC 采用 C++17 编写,并使用 MinGW-w64 x86-64 工具链进行构建。
在 Debian 或 Ubuntu 上:
```
sudo apt install make g++-mingw-w64-x86-64
make
```
构建过程会生成:
```
bin/brlapi_trigger.exe
bin/localservice_stage.exe
bin/system_shell_launcher.exe
```
要获取端到端演示中使用的确切 SigmaPotato 版本,
请在 Windows 上运行以下命令:
```
powershell -ExecutionPolicy Bypass -File .\scripts\Get-SigmaPotato.ps1
```
下载脚本会锁定版本 `v1.2.6` 并验证 SHA-256:
```
EC68A6BF7F104A815BD21E27E73A8DFB8AFCB282D4997BEBE9ECCD6C89259506
```
## 实验环境配置
### 1. 准备可选的 Windows 组件
在仓库根目录下,通过提升权限的 PowerShell 提示符运行:
```
powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-Lab.ps1
```
此脚本将执行以下操作:
1. 缺失时安装 `Accessibility.Braille~~~~0.0.1.0`;
2. 授予内置 Users 对该仓库的读取/执行权限;以及
3. 授予 LocalService 修改权限,以便服务能够执行 stage 并
在 `bin\results` 下创建证据。
如果功能已暂存但服务尚未注册,请重启并
再次运行准备脚本。
### 2. 使用现有的标准用户账户
使用任何**不属于**本地
Administrators 组成员的本地或域账户登录。此仓库不会创建用户或设置密码。
安全产品通常会检测到 token 模拟概念验证工具。
在放置或运行二进制文件之前,请根据您组织的测试策略配置隔离的实验环境。请勿在正常的工作站上削弱端点保护。
### 3. 运行 PoC
在非提升权限的命令提示符下:
```
scripts\Run-PoC.cmd
```
预期输出包括:
```
Connection: descriptor= host=localhost:0 auth=none
Parameter 29 global write: 0
USER=LOCAL SERVICE
SID=S-1-5-19
```
可选的第二个阶段将其输出记录在 `bin\results\escalation.log` 中。
成功后,`bin\results\system_shell_status.txt` 将包含 `CREATED=1`,并且一个
标题为 `CVE-2026-58635 SYSTEM SHELL` 的新窗口将会打开。在该窗口中:
```
whoami
```
应该返回:
```
nt authority\system
```
## 结果文件
所有生成的证据都放置在 `bin\results` 中:
| 文件 | 用途 |
| --- | --- |
| `localservice_identity.txt` | CVE 启动阶段的用户名、SID 和 PID |
| `localservice_whoami.txt` | 完整的 token 组和权限 |
| `escalation.log` | 可选的 token 模拟助手的输出 |
| `escalation_status.txt` | 助手进程的创建/错误/退出状态 |
| `system_shell_status.txt` | 活动会话 shell 创建结果 |
使用以下命令删除生成的结果:
```
scripts\Clear-Results.cmd
```
## 补救与验证
安装适用的 2026 年 7 月安全更新或更高版本的累积更新。
对于 Windows 11 24H2 和 25H2,微软在
**KB5101650**(`26100.8875` 和 `26200.8875`)中提供了修复后的修订版。如果不需要盲文支持,
移除该可选功能也会同时移除此攻击面:
```
Remove-WindowsCapability -Online -Name Accessibility.Braille~~~~0.0.1.0
```
补救后,重新运行 `Check-Vulnerability.ps1` 并确认系统
已达到修复修订版本,或者该组件已不存在。
## 参考
- [微软安全更新指南:CVE-2026-58635](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-58635)
- [NVD:CVE-2026-58635](https://nvd.nist.gov/vuln/detail/CVE-2026-58635)
- [微软 KB5101650](https://support.microsoft.com/help/5101650)
- [BRLTTY](https://brltty.app/)
- [SigmaPotato](https://github.com/tylerdotrar/SigmaPotato)
标签:AI合规, Web报告查看器, 本地提权, 概念验证, 端点可见性