
Electronegativity ist ein Tool zur Identifizierung von Fehlkonfigurationen und Sicherheits-Anti-Patterns in Electron-Anwendungen.
⚠️ Wir pflegen dieses Projekt nicht mehr aktiv ⚠️
Electronegativity ist ein Werkzeug, um Fehlkonfigurationen und Sicherheits-Anti-Patterns in Electron-basierten Anwendungen zu identifizieren.
Es nutzt AST- und DOM-Parsing, um sicherheitsrelevante Konfigurationen zu finden, wie im Whitepaper "Electron Security Checklist - A Guide for Developers and Auditors" beschrieben.
Softwareentwickler und Sicherheitsauditoren können dieses Werkzeug nutzen, um potenzielle Schwachstellen und Implementierungsfehler bei der Entwicklung von Electron-Anwendungen zu erkennen und zu beheben. Ein gutes Verständnis von Electron-(Un-)Sicherheit ist dennoch erforderlich, da einige der vom Tool erkannten potenziellen Probleme manuell untersucht werden müssen.
Wenn Sie sich für Electron-Sicherheit interessieren, werfen Sie einen Blick auf unsere BlackHat 2017-Forschung Electronegativity - A Study of Electron Security und behalten Sie den Doyensec-Blog im Auge.

Wenn Sie etwas Leistungsfähigeres oder Aktuelleres benötigen, ist ein verbessertes SAST-Tool basierend auf Electronegativity als Ergebnis langjähriger angewandter Forschung und Entwicklung von Doyensec verfügbar. Ende 2020 setzten wir uns zusammen, um eine Projekt-Roadmap zu erstellen, und gründeten ein Entwicklungsteam, um an dem zu arbeiten, was heute ElectroNG ist. Sie können mehr über einige der wichtigsten Verbesserungen gegenüber der OSS-Version in einem aktuellen Blogbeitrag lesen.
Hauptversionen werden auf NPM veröffentlicht und können einfach mit folgendem Befehl installiert werden:
$ npm install @doyensec/electronegativity -g
$ electronegativity -h
| Option | Beschreibung |
|---|---|
| -V | gibt die Versionsnummer aus |
| -i, --input | Eingabe (Verzeichnis, .js, .html, .asar) |
| -l, --checks | führt nur die angegebenen Prüfungen aus, als CSV-Format übergeben |
| -x, --exclude-checks | überspringt die angegebene Liste von Prüfungen, als CSV-Format übergeben |
| -s, --severity | gibt nur Ergebnisse mit dem angegebenen Schweregrad oder höher zurück |
| -c, --confidence | gibt nur Ergebnisse mit dem angegebenen Konfidenzniveau oder höher zurück |
| -o, --output <filename[.csv or .sarif]> | speichert die Ergebnisse in einer Datei im CSV- oder SARIF-Format |
| -r, --relative | zeigt relativen Pfad für Dateien an |
| -v, --verbose | zeigt die Beschreibung der Ergebnisse an, standardmäßig true |
| -u, --upgrade | führt Upgrade-Prüfungen für Electron durch, z.B. -u 7..8 für Upgrade von Electron 7 auf 8 |
| -e, --electron-version | legt die Electron-Version fest und überschreibt die erkannte Version, z.B. -e 7.0.0 für Electron 7 |
| -p, --parser-plugins | gibt zusätzliche Parser-Plugins an, getrennt durch Kommas, z.B. -p optionalChaining |
| -h, --help | zeigt Nutzungsinformationen an |
Verwendung von electronegativity, um Probleme in einem Verzeichnis mit einer Electron-App zu suchen:
$ electronegativity -i /path/to/electron/app
Verwendung von electronegativity, um Probleme in einem asar-Archiv zu suchen und die Ergebnisse in einer CSV-Datei zu speichern:
$ electronegativity -i /path/to/asar/archive -o result.csv
Verwendung von electronegativity beim Upgrade von einer Electron-Version auf eine andere, um Breaking Changes zu finden:
$ electronegativity -i /path/to/electron/app -v -u 7..8
Hinweis: Wenn Sie auf den fatalen Fehler "JavaScript heap out of memory" stoßen, können Sie node mit node --max-old-space-size=4096 electronegativity -i /path/to/asar/archive -o result.csv ausführen.
Electronegativity ermöglicht es, einzelne Prüfungen mit eng-disable-Kommentaren zu deaktivieren. Wenn Sie beispielsweise möchten, dass eine bestimmte Prüfung eine Codezeile ignoriert, können Sie sie wie folgt deaktivieren:
const res = eval(safeVariable); /* eng-disable DANGEROUS_FUNCTIONS_JS_CHECK */
<webview src="https://doyensec.com/" enableblinkfeatures="DangerousFeature"></webview> <!-- eng-disable BLINK_FEATURES_HTML_CHECK -->
Jeder eng-disable-Inline-Kommentar (// eng-disable, /* eng-disable */, <!-- eng-disable -->) deaktiviert die angegebene Prüfung nur für diese Zeile. Es ist auch möglich, mehrere Prüfungsnamen sowohl mit ihren Snake-Case-IDs (DANGEROUS_FUNCTIONS_JS_CHECK) als auch mit ihren Konstruktnamen (dangerousFunctionsJSCheck) anzugeben:
shell.openExternal(eval(safeVar)); /* eng-disable OPEN_EXTERNAL_JS_CHECK DANGEROUS_FUNCTIONS_JS_CHECK */
Wenn Sie eine eng-disable-Direktive vor jeglichem Code am Anfang einer .js- oder .html-Datei platzieren, werden die übergebenen Prüfungen für die gesamte Datei deaktiviert.
eng-disable-AnnotationenVor Version 1.9.0 konnten Global Checks nicht mit Code-Annotationen deaktiviert werden. Wenn Sie noch eine alte Version verwenden, nutzen Sie stattdessen das -x CLI-Argument, um manuell eine Liste von Prüfungen zu deaktivieren (z.B. -x LimitNavigationJsCheck,PermissionRequestHandlerJsCheck,CSPGlobalCheck).
Beachten Sie, dass die Verwendung von Annotationen für einige übergeordnete Prüfungen wie CSP_GLOBAL_CHECK oder AVAILABLE_SECURITY_FIXES_GLOBAL_CHECK möglicherweise nicht anwendbar ist. In diesen Fällen sollten Sie das -x-Flag verwenden, um bestimmte Prüfungen von Ihrem Scan auszuschließen.
Electronegativity Action kann als Teil Ihrer GitHub CI/CD-Pipeline ausgeführt werden, um "Code scanning alerts" zu erhalten:

Sie können electronegativity auch programmatisch verwenden, mit ähnlichen Optionen wie für das CLI:
const run = require('@doyensec/electronegativity')
// or: import run from '@doyensec/electronegativity';