abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · stirling-h2-import-leftover
Stirling-PDF 3.2.0 - Stirling Tools
类别: GHSA-mrr8 的 H2 RUNSCRIPT 遗留问题。可达性: 远程 ROLE_ADMIN。
POST /api/v1/database/import-database 标注为 @PreAuthorize("hasRole('ADMIN')")。validateSqlContent 本应阻止 CREATE ALIAS。其拒绝列表为 CREATE\s+(FORCE\s+)?ALIAS。H2 的 parseCreate 允许在 ALIAS 之前出现 OR REPLACE,因此 CREATE OR REPLACE ALIAS … FOR "java.lang.…" 会匹配允许列表 \bCREATE\b,却无法命中拒绝列表。校验器只对副本进行净化。verifyBackup 和生产环境的 RUNSCRIPT FROM ? 处理的却是原始文件。
GHSA-mrr8-934j-4g8m / CVE-2026-85714 封堵了原始的 FILE_READ / CREATE ALIAS / CSVWRITE 字符串。本遗留问题正是同一校验器上的 OR REPLACE 缺口。
一次 ROLE_ADMIN 导入会创建一个 Java 别名,而拒绝列表本应阻止它。随后下载的备份中会包含攻击者的 SQL。 原始公告中的宿主机 FILE_READ / FileUtils RCE 属于推断,本包未在实验环境中证实。
| ID | 暂无 CVE |
| CWE | CWE-94 / CWE-184 |
| CVSS | 9.1 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H |
| 产品 | Stirling-PDF |
| 受影响版本 | v3.2.0 (a7e593728dd9aa81e75318a949789d3c2e9ee754),镜像 stirlingtools/stirling-pdf:3.2.0-fat |
| 认证 | ROLE_ADMIN,默认内嵌 H2。默认首个管理员为 admin / stirling,直至被更改 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:18152 |
属于 Stirling-PDF v3.2.0 遗留问题 系列。姊妹项目:stirling-storage-folder-idor(处理文件夹隐含存储根目录)。本包是 H2 导入遗留问题。
在启用登录的 proprietary/fat 版本上,配合默认内嵌 H2,攻击者需具备 ROLE_ADMIN。当 initialLogin 为空时,默认首个管理员为 admin / stirling。他们无需未认证访问。Lite 镜像和 PostgreSQL 数据源不包含此控制器。
权限表(详尽)。标准与 Signal-Server Dropwizard 管理员 相同:方法 + 路径、该调用授予的权限、侦察 vs 完整性 vs 可用性、实验证实 vs 推断、保持关闭的相邻攻击面。
| 轴 | 方法 + 路径 | 授予 | 来源 |
|---|---|---|---|
| 完整性 | ROLE_ADMIN POST /api/v1/database/import-database,携带 CREATE OR REPLACE ALIAS lab_nano FOR "java.lang.System.nanoTime" 以及 INSERT INTO lab_w VALUES('STIRLING-H2-IMPORT-WITNESS') | 200 importIntoDatabaseSuccessed。Java 别名已创建。攻击者 SQL 在 RUNSCRIPT 下提交 | 实验室验证 |
| 侦察 | ROLE_ADMIN GET /api/v1/database/createDatabaseBackup,然后 GET /api/v1/database/download/backup_202610172328.sql | 50432 字节的备份包含 STIRLING-H2-IMPORT-WITNESS | 实验室验证 |
| 侦察 / 主机文件 | 同样的导入,将 FILE_READ('/etc/os-release') 包裹在 EXECUTE IMMEDIATE 中 | 500 Backup verification failed。主机字节不在备份中 | 实验室额外失败 |
| 完整性 / RCE | 别名 org.h2.store.fs.FileUtils 加上对 Python 用户站点 .pth 的 CSVWRITE,然后进行 office 转换 | 以服务账户身份执行命令 | 从 GHSA-mrr8 推断。此处未在实验室验证 |
| 可用性 | 未声称 | 导入可以替换应用程序表 | 推断。不是实验室判定依据 |
在此版本上保持关闭
| 轴 | 方法 + 路径 | 为何关闭 |
|---|---|---|
| 完整性 | 未认证 POST /api/v1/database/import-database | 401 Authentication required。当 HTTP 为 permitAll 时,方法安全 ADMIN 仍然开启 |
| 完整性 | ROLE_ADMIN 导入裸 CREATE ALIAS | 500 SQL script contains disallowed operations and was rejected |
| 完整性 | lite / DISABLE_ADDITIONAL_FEATURES 镜像 | DatabaseController 不存在 |
| 完整性 | 自定义 PostgreSQL 数据源 | @Conditional(H2SQLCondition.class) |
我不声称反向 shell,也不声称主机 FILE_READ 已通过实验室验证。遗留问题是拒绝列表的遗漏,它让 CREATE OR REPLACE ALIAS … FOR "java.lang.…" 通过 RUNSCRIPT。
v3.2.0 仍然附带 GHSA-mrr8 验证器。我停留在该标签上并阅读了 DENIED_PATTERNS。别名行是 CREATE\s+(FORCE\s+)?ALIAS。H2 的解析器接受 CREATE OR REPLACE ALIAS。测试覆盖了明显的 CREATE ALIAS / FILE_READ( 字符串。它们没有覆盖 OR REPLACE。
实验室以默认管理员登录,完成 change-password-on-login,导入被拒绝的 CREATE ALIAS(500),然后导入 CREATE OR REPLACE ALIAS 加上一个 INSERT 见证(200)。备份下载包含该见证。
错误方向:将未认证导入视为在范围内(401);将 EXECUTE IMMEDIATE + FILE_READ 视为遗留问题(verifyBackup 500);将原始未混淆的 CREATE ALIAS 视为仍然有效(它被拒绝)。
python3 stirling-h2-import-leftover-Abraxas-Labs.py
或
cd lab
./run.sh
仅针对 http://127.0.0.1:18152。镜像 stirlingtools/stirling-pdf:3.2.0-fat。需要 Docker。启用登录。启动器会 chdir 进入 lab/ 并执行 run.sh。
IOC unauth-import http=401
IOC negative-import http=500 ... disallowed operations ...
IOC leftover-import bypass=create-or-replace-alias http=200 ... importIntoDatabaseSuccessed
IOC download file=backup_202610172328.sql http=200 bytes=50432 witness=1
SUCCESS stirling-h2-import-leftover negative-denied=yes bypass=create-or-replace-alias backup-has-witness=yes file=backup_202610172328.sql unauth-import=401 STIRLING-H2-IMPORT-WITNESS
扩展拒绝列表,使 OR REPLACE 无法位于 CREATE 和 ALIAS 之间。对 RUNSCRIPT 将要执行的同一份字节内容运行 validateSqlContent。除非内部 SQL 也被扫描,否则拒绝 EXECUTE IMMEDIATE。
Pattern.compile("(?i)\\bCREATE\\s+(OR\\s+REPLACE\\s+)?(FORCE\\s+)?ALIAS\\b")
针对已修补的构建重新运行回环客户端:遗留导入必须像裸 CREATE ALIAS 已经做到的那样返回 400/500。
在此之前,不要把“我禁用了 CREATE ALIAS”当作“我禁用了 H2 Java 别名”。
a7e593728dd9aa81e75318a949789d3c2e9ee754)供应商接收渠道:GitHub Security Advisory 标签页或 [email protected]。我不会在 Stirling-Tools/Stirling-PDF 上公开提交 issue。
Abraxas Labs https://abraxaslabs.tech https://github.com/abraxas [email protected]