Die Speichersicherheit von Rust schützt kompilierte Anwendungen zuverlässig vor Pufferüberläufen und Datenrennen zur Laufzeit. Während des Kompiliervorgangs gewährt der Paketmanager Cargo jedoch jedem build.rs-Skript und jedem prozeduralen Makro (proc-macro) transitiver Abhängigkeiten uneingeschränkte Codeausführung auf dem Entwicklungssystem oder CI/CD-Build-Server.
Codeausführung zur Kompilierzeit durch Cargo und rust-analyzer
Sobald ein Entwickler cargo build oder cargo check ausführt — oder wenn die Sprachserver-Erweiterung rust-analyzer ein Arbeitsverzeichnis im Editor indiziert — kompiliert Cargo sämtliche build.rs-Dateien externer Crates in native Binärdateien und führt diese sofort mit den Berechtigungen des aktuellen Benutzers aus.
| Angriffsvektor im Cargo-Ökosystem | Auslösezeitpunkt | Erzeugtes Binärartefakt | Forensische Nachweismethode |
|---|---|---|---|
build.rs (Build-Skript) | cargo check, cargo build & IDE-Analyse | target/debug/build/<crate>-<hash>/build-script-build | ELF/PE-Importtabellenanalyse im Ghidra & strace-Syscall-Tracing |
proc-macro (Prozedurales Makro) | AST-Makroexpansion im rustc-Compilerprozess | Dynamische Bibliothek (.so / .dll) im Speicher des Compilers | Decompilierung exportierter Makro-Einstiegspunkte & Netzwerk-Socket-Prüfung |
| Typosquatting & Tarball-Abweichung | Abhängigkeitsauflösung aus crates.io | Verschleierte Byte-Arrays über include_bytes! | Diff-Analyse zwischen dem crates.io-Archiv und dem öffentlichen Git-Tag |
Reverse Engineering kompilierter build-script-build-Binärdateien
In forensischen Untersuchungen von DigitalSpying zeigt sich, dass Angreifer bösartige Nutzlasten häufig direkt in großen Byte-Konstanten oder vermeintlichen Test-Fixtures verstecken. Zur Kompilierzeit entschlüsselt das build-script-build-Programm diese Nutzlast im Arbeitsspeicher und exfiltriert Umgebungsvariablen wie AWS_SECRET_ACCESS_KEY, GITHUB_TOKEN sowie lokale SSH-Schlüssel.
Forensische Indikatoren in den Symboltabellen
Ein legitimes build.rs-Skript beschränkt seine Dateioperationen strikt auf das vom Compiler zugewiesene Ausgabeverzeichnis OUT_DIR. Tauchen in der Symboltabelle der erzeugten Binärdatei hingegen Netzwerkfunktionen (connect, getaddrinfo) oder Subprozess-Aufrufe (/bin/sh, cmd.exe) auf, liegt ein kritischer Lieferkettenangriff vor.
cargo vet auf Abweichungen zwischen Git-Repository und veröffentlichtem Crate-Archiv, und führen Sie Kompilierläufe in isolierten Linux-Netzwerk-Namespaces ohne Zugriff auf Produktionsgeheimnisse aus.