Fallen-Breath/litematica-rce-scanner

GitHub: Fallen-Breath/litematica-rce-scanner

轻量级命令行工具,用于检测 Minecraft 模组 Litematica 和 Servux 中存在 RCE 漏洞的 jar 文件。

Stars: 4 | Forks: 0

# litematica-rce-scanner [![License](https://img.shields.io/github/license/Fallen-Breath/litematica-rce-scanner.svg)](http://www.gnu.org/licenses/gpl-3.0.html) [![Issues](https://img.shields.io/github/issues/Fallen-Breath/litematica-rce-scanner.svg)](https://github.com/Fallen-Breath/litematica-rce-scanner/issues) [![Docker](https://img.shields.io/docker/v/fallenbreath/litematica-rce-scanner/latest?label=DockerHub)](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 文件,并标记出存在漏洞的版本,以便你及时删除或升级它们。 ![快照](https://static.pigsec.cn/wp-content/uploads/repos/cas/61/61455d89137938f57916add973d3f3eac2e2810a03bd595e2204015b41e1ad34.png) ## 用法 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攻击, 加密, 日志审计, 漏洞扫描器, 请求拦截