fix(security): block JVM, Python, and .NET env injection vectors in host exec sandbox (#49025)
Add JAVA_TOOL_OPTIONS, _JAVA_OPTIONS, JDK_JAVA_OPTIONS, PYTHONBREAKPOINT, and DOTNET_STARTUP_HOOKS to blockedKeys in the host exec security policy. Closes #22681
This commit is contained in:
parent
1399ca5fcb
commit
f84a41dcb8
@ -442,6 +442,7 @@ Docs: https://docs.openclaw.ai
|
||||
- Memory/QMD Windows: fail closed when `qmd.cmd` or `mcporter.cmd` wrappers cannot be resolved to a direct entrypoint, so memory search no longer falls back to shell execution on Windows.
|
||||
- macOS/remote gateway: stop PortGuardian from killing Docker Desktop and other external listeners on the gateway port in remote mode, so containerized and tunneled gateway setups no longer lose their port-forward owner on app startup. (#6755) Thanks @teslamint.
|
||||
- Feishu/streaming recovery: clear stale `streamingStartPromise` when card creation fails (HTTP 400) so subsequent messages can retry streaming instead of silently dropping all future replies. Fixes #43322.
|
||||
- Exec/env sandbox: block JVM agent injection (`JAVA_TOOL_OPTIONS`, `_JAVA_OPTIONS`, `JDK_JAVA_OPTIONS`), Python breakpoint hijack (`PYTHONBREAKPOINT`), and .NET startup hooks (`DOTNET_STARTUP_HOOKS`) from the host exec environment. (#49025)
|
||||
|
||||
## 2026.3.8
|
||||
|
||||
|
||||
@ -23,7 +23,12 @@ enum HostEnvSecurityPolicy {
|
||||
"PS4",
|
||||
"GCONV_PATH",
|
||||
"IFS",
|
||||
"SSLKEYLOGFILE"
|
||||
"SSLKEYLOGFILE",
|
||||
"JAVA_TOOL_OPTIONS",
|
||||
"_JAVA_OPTIONS",
|
||||
"JDK_JAVA_OPTIONS",
|
||||
"PYTHONBREAKPOINT",
|
||||
"DOTNET_STARTUP_HOOKS"
|
||||
]
|
||||
|
||||
static let blockedOverrideKeys: Set<String> = [
|
||||
|
||||
@ -17,7 +17,12 @@
|
||||
"PS4",
|
||||
"GCONV_PATH",
|
||||
"IFS",
|
||||
"SSLKEYLOGFILE"
|
||||
"SSLKEYLOGFILE",
|
||||
"JAVA_TOOL_OPTIONS",
|
||||
"_JAVA_OPTIONS",
|
||||
"JDK_JAVA_OPTIONS",
|
||||
"PYTHONBREAKPOINT",
|
||||
"DOTNET_STARTUP_HOOKS"
|
||||
],
|
||||
"blockedOverrideKeys": [
|
||||
"HOME",
|
||||
|
||||
@ -48,6 +48,16 @@ describe("isDangerousHostEnvVarName", () => {
|
||||
expect(isDangerousHostEnvVarName("DYLD_INSERT_LIBRARIES")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("ld_preload")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("BASH_FUNC_echo%%")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("JAVA_TOOL_OPTIONS")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("java_tool_options")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("_JAVA_OPTIONS")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("_java_options")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("JDK_JAVA_OPTIONS")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("jdk_java_options")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("PYTHONBREAKPOINT")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("pythonbreakpoint")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("DOTNET_STARTUP_HOOKS")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("dotnet_startup_hooks")).toBe(true);
|
||||
expect(isDangerousHostEnvVarName("PATH")).toBe(false);
|
||||
expect(isDangerousHostEnvVarName("FOO")).toBe(false);
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user