github.com / storytold
storytold/ artcraft
Rust·5824 files·commit 1f969a9·scanned 4d ago·cached ✓
15/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 15 — 36,323+ stars — findings likely false positives
verdict accurate?
36,323 stars
Partial architecture graph
Desktop app detected
threat-state: lowlive
FINDINGS ░▒▓
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.artcraft-native/src/backend/video.rs
#[allow(unused_mut)]
let mut cmd = Command::new(program);
#[cfg(windows)]
{+8warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.crates/api_clients/grok_consumer_client/src/test_utils/setup_test_logging.rs
println!("Unsafely setting Rust Log Level...");
unsafe { std::env::set_var(RUST_LOG, level_str) }
}
+3warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.crates/api_clients/kinovi_web_client/src/test_utils/setup_test_logging.rs
println!("Unsafely setting Rust Log Level...");
unsafe { std::env::set_var(RUST_LOG, level_str) }
}
+3warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.crates/api_clients/worldlabs_api_client/src/test_utils/setup_test_logging.rs
println!("Unsafely setting Rust Log Level...");
unsafe { std::env::set_var(RUST_LOG, level_str) }
}
+3warningRust 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.artcraft-native/src/backend/audio.rs
for sample in decoder {
loudest = loudest.max(sample.unsigned_abs());
count += 1;
if count % window == 0 {+5warningRust 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.artcraft-native/src/backend/mod.rs
pub enum Event {
/// The session check finished: `Some` when signed in.
Session(Option<SessionUser>),
LoginFailed(String),+5warningRust 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.artcraft-native/src/backend/providers/worker.rs
}
// Results go into the library: nothing can finish until someone's signed in.
let Some(creds) = self.creds.read().ok().and_then(|c| c.as_ref().map(Credentials::to_set)) else {
retu...+5warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code.crates/api_clients/grok_consumer_client/src/requests/video_chat/parse_video_id.rs+4
infoSuspicious file in repoVery large source file (898KB) — could contain obfuscated payloadfrontend/package-lock.json+2
infoSuspicious file in repoExecutable file (windows_build.ps1) in repositoryscript/artcraft/windows_build.ps1+2
infoSuspicious file in repoExecutable file (windows_frontend_dev.ps1) in repositoryscript/artcraft/windows_frontend_dev.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.
2999 files scanned @ 1f969a9 | 10/25/2026 | heuristic scan — always review manually
risk by category
code execution22
network & exfiltration25
file system access0
obfuscation4
supply chain10
owasp / injection0
telemetry
files 2999/5824rules hit 12engine v7commit 1f969a9
github
storytold/artcraft
ArtCraft is an intentional crafting engine for artists, designers, and filmmakers
36323
5744
1673d
5824 files
2999 scanned(51%)
1f969a9
architecture░▒▓
entry (61) flagged (13) pkg (145)
545 nodes · 796 edgesscroll to zoom · click node to jump to finding