Was macht substrate-vulnerability-scanner?
Scannt Substrate/Polkadot-Pallets auf 7 kritische Schwachstellen, darunter arithmetische Überläufe, Panic-DoS, falsche Gewichtungen und fehlerhafte Origin-Prüfungen. Verwenden Sie es beim Auditieren von Substrate-Runtimes oder FRAME-Pallets.
Unterstützte Schwachstellen
- Arithmetischer Überlauf/Unterlauf – Fehlende oder unzureichende Prüfungen bei arithmetischen Operationen.
- Panic-DoS – Aufrufe von
panic!()oderunreachable!(), die zu einem Dienstausfall führen können. - Falsche Weight-Berechnungen – Zu niedrig angesetzte Weight-Werte, die eine Block-Überlastung ermöglichen.
- Fehlerhafte Origin-Prüfungen – Unsichere Annahmen über
Originoderensure_signed/ensure_root. - Unsichere Storage-Operationen – Unzureichend validierte Speicherzugriffe.
- Ungeprüfte Extern-Inputs – Fehlende Validierung von Benutzereingaben aus extrinsischen Aufrufen.
- Unsichere Dispatch-Implementierungen – Fehlerhafte
dispatch-Logik, die zu unerwarteten Zuständen führt.
Verwendung
Voraussetzungen
- Rust-Compiler (
rustc) undcargo. - Substrate-Entwicklungsumgebung (
substrate-node-templateoder ein eigenes Runtime-Projekt). - Python 3.8+ (nur für die Skript-basierte Ausführung).
Installation
Klone das Repository:
git clone https://github.com/trailofbits/substrate-vulnerability-scanner
cd substrate-vulnerability-scanner
Ausführung
Führe den Scanner auf einem kompilierten Wasm-Blob oder einem Quellcode-Pfad aus:
python3 scanner.py --target /pfad/zu/runtime.wasm
Oder für Quellcode-Repository:
python3 scanner.py --source /pfad/zu/substrate-pallet
Integration in CI/CD
Füge folgenden Job in Ihre .github/workflows-Datei ein:
- name: Substrate Vulnerability Scan
run: |
git clone https://github.com/trailofbits/substrate-vulnerability-scanner
cd substrate-vulnerability-scanner
python3 scanner.py --source ${{ github.workspace }}
Ausgabe
Der Scanner gibt einen Bericht im JSON-Format aus, der alle gefundenen Schwachstellen mit Dateiname, Zeilennummer und Schweregrad (Niedrig, Mittel, Hoch, Kritisch) enthält. Beispiel:
[
{
"type": "arithmetic_overflow",
"severity": "high",
"file": "pallets/my_pallet/src/lib.rs",
"line": 42,
"description": "Möglicher arithmetischer Überlauf bei Addition ohne checked_add"
}
]