
Controlla i tuoi file per la presenza di caratteri Unicode BIDI che possono essere utilizzati impropriamente per attacchi alla supply chain. Vedi CVE-2021-42574
Questo strumento controlla i tuoi file per la presenza di caratteri Unicode BIDI che possono essere abusati per attacchi alla supply chain per mitigare CVE-2021-42574. Questo strumento è scritto in Rust e distribuito come un contenitore docker piccolo (< 3MB) per consentire un utilizzo rapido e semplice.
Per una spiegazione dell'attacco, dai un'occhiata al post del blog di GitHub o al documento originale in cui l'attacco è stato pubblicato.
Questo pacchetto è pensato principalmente per essere utilizzato tramite il suo contenitore docker. Ma l'installazione locale è ovviamente possibile. La compilazione richiede almeno Rust 1.56.0 perché utilizza la Rust 2021 Edition. Clona questo repository ed esegui cargo install --path . per installare il binario per l'utente corrente. Dopodiché, puoi invocare il comando bidi_detector.
Eseguire lo strumento tramite il suo contenitore docker ufficiale è probabilmente il modo più semplice per iniziare. Per eseguirlo tramite docker, il seguente comando dovrebbe funzionare per scansionare tutti i file nella directory di lavoro corrente:
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
A seconda del tuo sistema, potresti dover adattare leggermente questo comando. Se usi ad esempio podman e hai SELinux abilitato, prova il seguente comando invece:
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
Per impostazione predefinita, tutti i file vengono controllati. Se hai file binari nella directory corrente, il comando fallirà perché non può decodificare un file non codificato in UTF-8.
Per adattare il comando alle tue esigenze, posiziona un file chiamato bidi_config.toml nella radice del tuo progetto.
Puoi trovare un esempio in questo repository, vedi un esempio qui sotto. Le opzioni verranno descritte più in dettaglio sotto l'esempio:
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
Questa sezione include due array (includes e excludes) in cui puoi specificare pattern di file da scansionare (o da escludere dalla scansione).
Assicurati che i tuoi pattern corrispondano effettivamente ai file all'interno della directory, non al nome della directory stessa, altrimenti i tuoi file non verranno scansionati.
Se vuoi scansionare tutti i file ed escludere solo ad esempio la tua directory .git, la seguente configurazione funzionerebbe:
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
Se invece vuoi definire esplicitamente quale cartella contiene i tuoi file sorgente, il seguente esempio di configurazione scansionerebbe tutti i file nella directory src (senza ignorare nulla):
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
Le seguenti impostazioni sono disponibili in questa sezione:
| Impostazione | Descrizione | Opzionale | Default | Introdotto in |
|---|---|---|---|---|
show_details | Decide se stampare il numero di riga/posizione e il tipo del carattere BIDI rilevato se trovato (vedi esempi sotto) | No | - | v0.1.1 |
ignore_invalid_data | Se stampare un messaggio di errore quando vengono rilevati file binari/non UTF-8 | Sì | true | v0.1.2 |
verbose | Se stampare il nome del file anche se non sono stati trovati caratteri sospetti | Sì | true | v0.1.2 |
Esempio: show_details = true, verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:4:3
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:7
Found character PDI (Pop Directional Isolate), test/example-commenting-out.js:4:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:4:22
Found character RLO (Right-to-Left Override), test/example-commenting-out.js:6:20
Found character LRI (Left-to-Right Isolate), test/example-commenting-out.js:6:24
Found 6 potentially dangerous Unicode BIDI characters!
Esempio: show_details = false, verbose = true
src/lib.rs - 0 BIDI characters
src/main.rs - 0 BIDI characters
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
Esempio: show_details = false, verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
Tutti i crediti per la scoperta dell'attacco, inclusa la lista dei caratteri BIDI rilevanti, vanno agli autori originali del documento corrispondente. Per favore citate il loro documento originale quando utilizzate il loro lavoro.
Il file test/example-commenting-out.js in questo repository è una copia di commenting-out.js nel loro repository originale. La sua licenza segue quella del repository originale (Licenza MIT).
Viene utilizzato solo per scopi di test qui.
@article{boucher_trojansource_2021,
title = {Trojan {Source}: {Invisible} {Vulnerabilities}},
author = {Nicholas Boucher and Ross Anderson},
year = {2021},
journal = {Preprint},
eprint = {2111.00169},
archivePrefix = {arXiv},
primaryClass = {cs.CR},
url = {https://arxiv.org/abs/2111.00169}
}