Fallen-Breath/litematica-rce-scanner
GitHub: Fallen-Breath/litematica-rce-scanner
轻量级命令行工具,用于检测 Minecraft 模组 Litematica 和 Servux 中存在 RCE 漏洞的 jar 文件。
Stars: 4 | Forks: 0
# litematica-rce-scanner
[](http://www.gnu.org/licenses/gpl-3.0.html)
[](https://github.com/Fallen-Breath/litematica-rce-scanner/issues)
[](https://hub.docker.com/r/fallenbreath/litematica-rce-scanner)
English | [中文](README_zh.md)
一个轻量级的命令行扫描器,用于检测存在漏洞的 [Litematica](https://github.com/sakura-ryoko/litematica) 和 [Servux](https://github.com/sakura-ryoko/servux) jar 文件。
它会扫描一个或多个指定的路径,识别 Litematica/Servux 的 jar 文件,并标记出存在漏洞的版本,以便你及时删除或升级它们。

## 用法
Windows 简单说明:将 `.exe` 文件放在你要扫描的目录中,然后双击它即可。
```
litematica-rce-scanner [options] [path ...]
```
如果未提供路径,扫描器将默认扫描当前目录。
常用选项:
```
-j, -concurrency int number of files to scan concurrently (default 1)
-csv path write detected Litematica/Servux jar results to a CSV file
-color value color output mode: auto, always, never (default auto)
-progress print periodic progress to stdout (default true)
-warnings print per-file warnings for scan failures (default false)
-non-recursive scan only immediate files under each directory, do not recurse into subdirectories
-jar-only scan only files whose name contains .jar
-fail-on-vulnerable exit with code 1 if any vulnerable jar is found
-version print version information and exit
```
设置 `-progress=false` 可禁止输出进度信息。
设置 `-non-recursive` 可将扫描限制在每个指定目录下的直接文件中。如果位置参数是一个文件路径,则将直接对其进行扫描。
设置 `-jar-only` 可跳过名称中不包含 `.jar` 的文件;但像 `mod.jar.disabled` 这样的名称仍会被扫描。
设置 `-warnings` 可启用针对单个文件的警告(如权限拒绝错误)。如果省略该标志,警告仍会汇总在最终摘要中,但不会单独打印。
示例:
```
./litematica-rce-scanner
./litematica-rce-scanner -j 8 /path/to/mods /another/path
./litematica-rce-scanner -non-recursive ./mods
./litematica-rce-scanner -jar-only ./mods
./litematica-rce-scanner ./mods/litematica.jar
./litematica-rce-scanner -warnings /
./litematica-rce-scanner -csv results.csv -fail-on-vulnerable ./mods
```
在 Windows 上,你可以将一个或多个文件夹拖放到 `.exe` 文件上来启动它。当在没有显式命令行标志的交互式 Windows 控制台中运行时,程序在退出前会暂停并等待按下回车键,以防止控制台窗口立即关闭。使用 `-no-pause` 可禁用此行为。
## 输出
终端输出为英文。在现代 Windows 终端等交互式终端中,默认启用 ANSI 颜色。
启动时,扫描器会打印扫描根路径的数量和配置的并发数。在遍历每个根路径之前,它还会打印正在扫描的根路径。
扫描期间,进度信息每 5 秒打印一次到 stdout,第一次更新大约在启动后 5 秒出现。扫描完成后会显示最终的进度行:
```
Progress: scanned 123 files, elapsed 12.3s, vulnerable 7
```
扫描器不会预先遍历整个目录树或将所有路径保留在内存中;相反,它使用一个有界的小型工作队列进行并发遍历和扫描,从而保持较低的资源占用。
检测到的 Litematica 和 Servux jar 文件会在扫描时实时报告。存在漏洞的 jar 会被标记为 `[VULNERABLE]`,而匹配目标类但不满足易受攻击构造函数规则的 jar 会被标记为 `[SAFE]`。
```
[VULNERABLE] path/to/file.jar litematica v1.2.3
[SAFE] path/to/file.jar servux
```
`version` 字段是在可用时从 `fabric.mod.json` 中提取的。如果无法读取清单或版本信息,则会省略该字段。
如果发现了存在漏洞的 jar,最终摘要会要求你尽快更新受影响的 mod,并打印 Litematica 和 Servux 的 Modrinth 版本页面。
启用 CSV 输出时,该文件包含以下列:
```
path,mod,status,version
```
只有检测到的 Litematica 或 Servux 的 jar 文件才会被写入 CSV。
## 检测详情
扫描器会遍历指定路径下的常规文件。目录扫描默认是递归的;使用 `-non-recursive` 会将其限制在每个目标目录下的直接文件中。扫描不依赖于文件扩展名。
只有当文件是有效的 ZIP/JAR 归档文件,并且其 ZIP central directory 中恰好包含以下其中一个类条目时,该文件才会被视为候选对象:
- `fi/dy/masa/litematica/schematic/transmit/SchematicBuffer.class`
- `fi/dy/masa/servux/schematic/transmit/SchematicBuffer.class`
扫描器首先会校验 ZIP 的最小大小和 local file header magic,然后使用 Go 的 `archive/zip` 包读取 ZIP end record 和 central directory。它不会解压整个归档文件。对于匹配的 jar,仅提取目标 `SchematicBuffer.class` 文件。
如果目标 `SchematicBuffer.class` 中的每个构造函数都将 `java.lang.String` 作为其第一个参数,则该 jar 将被报告为存在漏洞。类解析器直接使用以下规则检查方法表:
- 方法名必须为 ``
- 方法描述符必须包含第一个参数
- 该第一个参数必须为 `Ljava/lang/String;`
- 只有当所有构造函数都满足这些条件时,该 jar 才会被标记为存在漏洞
如果无法读取或解析目标类,则会将其计为错误,而不是报告为存在漏洞。使用 `-warnings` 可打印详细的单文件错误信息。
## Docker
扫描器也可以作为容器运行。镜像在 Docker Hub 和 GHCR 上均可用。
以下命令使用默认的单线程设置递归扫描当前目录下的所有文件:
```
docker run --rm -t -v "$PWD:/scan:ro" fallenbreath/litematica-rce-scanner:latest
docker run --rm -t -v "$PWD:/scan:ro" ghcr.io/fallen-breath/litematica-rce-scanner:latest
```
默认情况下,容器以 root 用户身份运行,这对于扫描具有限制性所有权或权限设置的挂载本地文件非常有用。
标签:EVTX分析, Minecraft, XXE攻击, 加密, 日志审计, 漏洞扫描器, 请求拦截