SEC: MultiMC patch +jvmArgs 未过滤进入启动 JVM 参数 #9

Open
opened 2026-11-09 14:23:55 +00:00 by layue13 · 0 comments
Owner

调研编号:扫描 2026-11-09 / G4

现象

组装 MultiMC 实例 artifact 时,对每个 patch 的 getJvmArgs() 不做过滤,直接 jvmArguments.add(new StringArgument(jvmArg)),随后进入启动命令行的 JVM 参数列表。恶意 patch 可注入任意 -javaagent: / -D… 等参数。

危害类与优先级

  • 危害类:SEC
  • 优先级:p0

证据(生效源码)

  • 载体:TDLM/HMCL + 分支 origin/main + pin/commit bdacd654734c3665995a8c779da34139b9bdf373
  • 位置:HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/multimc/MultiMCInstancePatch.java:285-287;消费侧 DefaultLauncher.java:300-334(manifest JVM arguments 进入命令行)
  • 关键原文:
// MultiMCInstancePatch.java:285-287
for (String jvmArg : patch.getJvmArgs()) {
    jvmArguments.add(new StringArgument(jvmArg));
}
// DefaultLauncher.java:305-336(节选:manifest JVM 参数进入 res)
@Nullable List<Argument> jvmArguments = Optional.ofNullable(manifest.arguments()).map(Arguments::jvm).orElse(null);
// ...
res.addAll(Arguments.parseArguments(Objects.requireNonNullElseGet(jvmArguments, this::getDefaultJVMArguments), configuration));
// ...
for (String javaAgent : options.getJavaAgents()) {
    res.add("-javaagent:" + javaAgent);
}
  • 上游状态:未修

触发与复现

  • 触发条件:安装含任意 +jvmArgs 的 MultiMC patch 的整合包并启动;默认流程可达。
  • 复现程度:静态推演(patch JSON → jvmArguments → 启动命令行)
  • 包内相关性:模块 n/a/sides client/默认配置可达 是

落点

  • 主仓:TDLM/HMCL → HMCLCore/.../MultiMCInstancePatch.java:285
  • 协同:DefaultLauncher.java 消费侧

范式

引证

  1. 生效源码 permalink — https://git.potatolab.uk/TDLM/HMCL/src/commit/bdacd654734c3665995a8c779da34139b9bdf373/HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/multimc/MultiMCInstancePatch.java#L285-L287
  2. 生效源码 permalink(消费)— https://git.potatolab.uk/TDLM/HMCL/src/commit/bdacd654734c3665995a8c779da34139b9bdf373/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java#L300-L334
  3. 范式 G4 — https://git.potatolab.uk/TDLM/mc-defect-patterns/raw/commit/12d2ebdc7a87175f936c2a67083be567e0e94301/sec/G4-信任边界.md

来源

  • 线索类型:内部代码审查(无外部报障)
  • 可解析指针:MultiMCInstancePatch.java:285-287;commit bdacd654734c3665995a8c779da34139b9bdf373
  • 来源标签:origin/scan
**调研编号**:扫描 2026-11-09 / G4 ## 现象 组装 MultiMC 实例 artifact 时,对每个 patch 的 `getJvmArgs()` 不做过滤,直接 `jvmArguments.add(new StringArgument(jvmArg))`,随后进入启动命令行的 JVM 参数列表。恶意 patch 可注入任意 `-javaagent:` / `-D…` 等参数。 ## 危害类与优先级 - 危害类:`SEC` - 优先级:`p0` ## 证据(生效源码) - 载体:`TDLM/HMCL` + 分支 `origin/main` + pin/commit `bdacd654734c3665995a8c779da34139b9bdf373` - 位置:`HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/multimc/MultiMCInstancePatch.java:285-287`;消费侧 `DefaultLauncher.java:300-334`(manifest JVM arguments 进入命令行) - 关键原文: ```java // MultiMCInstancePatch.java:285-287 for (String jvmArg : patch.getJvmArgs()) { jvmArguments.add(new StringArgument(jvmArg)); } ``` ```java // DefaultLauncher.java:305-336(节选:manifest JVM 参数进入 res) @Nullable List<Argument> jvmArguments = Optional.ofNullable(manifest.arguments()).map(Arguments::jvm).orElse(null); // ... res.addAll(Arguments.parseArguments(Objects.requireNonNullElseGet(jvmArguments, this::getDefaultJVMArguments), configuration)); // ... for (String javaAgent : options.getJavaAgents()) { res.add("-javaagent:" + javaAgent); } ``` - 上游状态:未修 ## 触发与复现 - 触发条件:安装含任意 `+jvmArgs` 的 MultiMC patch 的整合包并启动;默认流程可达。 - 复现程度:静态推演(patch JSON → jvmArguments → 启动命令行) - 包内相关性:模块 n/a/sides `client`/默认配置可达 是 ## 落点 - 主仓:`TDLM/HMCL` → `HMCLCore/.../MultiMCInstancePatch.java:285` - 协同:`DefaultLauncher.java` 消费侧 ## 范式 - 命中范式:G4 信任边界(https://git.potatolab.uk/TDLM/mc-defect-patterns/raw/commit/12d2ebdc7a87175f936c2a67083be567e0e94301/sec/G4-信任边界.md) ## 引证 1. 生效源码 permalink — https://git.potatolab.uk/TDLM/HMCL/src/commit/bdacd654734c3665995a8c779da34139b9bdf373/HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/multimc/MultiMCInstancePatch.java#L285-L287 2. 生效源码 permalink(消费)— https://git.potatolab.uk/TDLM/HMCL/src/commit/bdacd654734c3665995a8c779da34139b9bdf373/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/DefaultLauncher.java#L300-L334 3. 范式 G4 — https://git.potatolab.uk/TDLM/mc-defect-patterns/raw/commit/12d2ebdc7a87175f936c2a67083be567e0e94301/sec/G4-信任边界.md ## 来源 - 线索类型:内部代码审查(无外部报障) - 可解析指针:`MultiMCInstancePatch.java:285-287`;commit `bdacd654734c3665995a8c779da34139b9bdf373` - 来源标签:`origin/scan`
layue13 added the
priority
p0
area/security
type
security
origin/scan
labels 2026-11-09 14:23:56 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: TDLM/HMCL#9