针对 CVE-2026-61500 的 Python PoC 与 Docker 实验环境:恢复 Rejetto HFS V8 PRNG 状态以伪造管理员会话 cookie,并通过 server_code 实现 RCE。
CVE-2026-61500 是 Rejetto HFS 3.0.0 至 3.2.0 中的一个未认证会话伪造漏洞。HFS 使用 JavaScript Math.random() 生成其 Koa 会话 cookie 签名密钥,并在未认证的 SRP 登录握手中暴露了来自同一 V8 PRNG 的输出。攻击者可以重建 PRNG 状态、恢复签名密钥、伪造管理员会话,并利用文档中记载的 server_code 配置功能执行服务端 JavaScript。
本仓库包含一个 Python 概念验证,以及使用官方 HFS 3.2.0 和 3.2.1 镜像的一次性 Docker 对比环境。发布构建被有意限制为仅针对本地回环接口上的 HTTP 目标。
| 声明 | 状态 |
|---|---|
| 从未认证登录响应中恢复 V8 xorshift128+ 状态 | 已确认 |
| 恢复当前有效的 HFS cookie 签名密钥 | 已确认 |
| 伪造被接受为 HFS 管理员的会话 | 已确认 |
在官方 HFS 3.2.0 中执行无害的 server_code 标记 | 已确认 |
| 在隔离的 Compose 网络内获得 root 反向 shell | 已确认 |
| 在官方 HFS 3.2.1 上于会话伪造之前停止 | 已确认 |
| 面向互联网的定向攻击或持久化 | 未提供或声称 |
admin 账户发送六个未认证的 loginSrp1 API 请求。每个存在漏洞的响应都会在 Set-Cookie 头中放置一个数字型 loggingIn.sid 及其已签名的会话 cookie。randomId(30) 所使用的三个 base-36 分块。PoC 考虑了 V8 最短字符串舍入,并将候选值与观测到的 hfs_http.sig HMAC 进行校验,该校验同时可识别启动偏移量。username: admin 的合成会话进行签名,然后调用 get_config 以证明伪造的 cookie 具有管理员访问权限。server_code 模块调用 set_config。默认载荷会在 /data 中写入一个无害标记;--command 仅可用于回环 Docker 实验环境。这是一个黑盒 HTTP 利用链:PoC 不会从目标读取文件、内存、环境变量或进程状态。源码知识仅用于对存在漏洞的算法进行建模。
59472e534bf7e056d708382d02935c2eaf956927。该修复将签名密钥替换为来自 Node.js randomBytes() 的 32 字节,并将暴露的数字型登录标识符替换为 randomUUID()。提供显式的强 COOKIE_SIGN_KEYS 值可缓解签名密钥预测问题,但升级仍是推荐的修复措施。
rejetto/hfs:v3.2.0,摘要
sha256:d6765e93b68de222583be7788afad699695fd08aa2f56377337f5139779e0746。rejetto/hfs:v3.2.1,摘要
sha256:61db4da1f494df254aa7f48889c676b424b413e45b7b92cf4276f4b8e632aaec。python:3.13-alpine,摘要
sha256:1a63a53928ce53d2b0baf08092a703f4840ac5dfbd61fd48802dbf48e08c801e。两个 HFS 服务均仅绑定到主机回环;回调不发布任何端口。实验环境会创建一个合成的管理员账户,因为必须针对已存在的用户名调用 loginSrp1;该密码既未知也未被漏洞利用使用。
要求为带 Compose 的 Docker、Python 3.10 或更高版本,以及 curl。
./verify.sh
验证器仅删除 lab/runtime/vulnerable 和 lab/runtime/fixed,启动两个固定摘要的镜像,运行正向和负向对照,并默认停止容器。使用 KEEP_LAB=1 ./verify.sh 可保留实验环境以供检查。
在保留实验环境的情况下,直接调用无害标记的方式为:
python3 cve-2026-61500-poc.py \
--target http://127.0.0.1:28182 \
--marker cve-2026-61500-rce-marker.txt
要在已攻陷的实验容器内演示命令执行:
python3 cve-2026-61500-poc.py \
--target http://127.0.0.1:28182 \
--command 'id > /data/cve-command-output.txt'
任何非回环主机名、HTTPS 目标或远程 IP 都会被参数校验拒绝。该漏洞利用会修改 HFS server_code;请仅使用一次性实验环境或你拥有明确授权的系统。
录制的演示更进一步:demo.sh 在 Compose 网络上启动未暴露的 callback 服务,并使用 --command 将 Bash 反向 shell 连接到该服务。回调仅发送 id、uname -a、pwd 和 exit,将记录保存在被忽略的 lab/runtime/ 下,然后关闭。没有任何回调端口绑定到主机。
2026-09-26 的真实运行恢复了一个 PRNG 状态及其签名密钥,针对伪造的管理员 get_config 收到 HTTP 200,安装了标记载荷,并在存在漏洞的容器中观察到 CVE_2026_61500_RCE_CONFIRMED。另一次 --command 'id > /data/cve-command-output.txt' 对照在该官方容器内产生了 uid=0(root) gid=0(root) groups=0(root)。仅使用 Docker 录制的反向 shell 独立返回了相同的 root 身份和 /data 工作目录。针对 3.2.1,第一个登录响应包含不透明 UUID,PoC 在尝试会话伪造之前以状态码 3 退出。参见
docs/example-output.txt 和
docs/e2e-results.json。
2026-09-26,针对 SearchSploit(本地 Exploit-DB 索引)、GitHub 索引的网页结果、Packet Storm、Exploit-DB 以及通用网络进行了精确的 CVE 和 exploit/PoC 搜索。当时未发现可用的公开漏洞利用;结果仅找到 CVE/公告元数据和漏洞跟踪页面。这是一个有日期、尽力而为的结果,并不声称其他地方不存在或日后不会出现漏洞利用。
<[email protected]>
(Twitter: @aramosf )。仅供授权安全研究、防御性验证和教育用途。 你有责任获取许可并遵守适用法律。