
Vérifie la présence de caractères Unicode BIDI dans vos fichiers qui peuvent être détournés pour des attaques sur la chaîne d'approvisionnement. Voir CVE-2021-42574
Cet outil vérifie la présence de caractères Unicode BIDI dans vos fichiers, qui peuvent être utilisés pour des attaques sur la chaîne d'approvisionnement afin d'atténuer CVE-2021-42574. Cet outil a été écrit en Rust et est distribué sous forme d'un petit conteneur docker compatible (< 3 MB) pour une utilisation rapide et facile.
Pour une explication de l'attaque, consultez l'article de blog de GitHub ou l'article original où l'attaque a été publiée.
Ce paquet est principalement destiné à être utilisé via son conteneur docker. Mais une installation locale est bien sûr possible.
La compilation nécessite au moins Rust 1.56.0 car il utilise l'édition Rust 2021.
Clonez ce dépôt et exécutez cargo install --path . pour installer le binaire pour votre utilisateur actuel. Après cela, vous pouvez invoquer la commande bidi_detector.
Exécuter l'outil via son conteneur docker officiel est probablement le moyen le plus simple de commencer. Pour l'exécuter via docker, la commande suivante devrait fonctionner pour analyser tous les fichiers dans votre répertoire de travail actuel :
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
Selon votre système, vous devrez peut-être adapter légèrement cette commande. Si vous utilisez par exemple podman avec SELinux activé, essayez la commande suivante :
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
Par défaut, tous les fichiers sont vérifiés. Si vous avez des fichiers binaires dans le répertoire actuel, la commande échouera car elle ne peut pas décoder un fichier non encodé en UTF-8.
Pour adapter la commande à vos besoins, placez un fichier nommé bidi_config.toml à la racine de votre projet.
Vous trouverez un exemple dans ce dépôt, voir ci-dessous. Les options seront décrites plus en détail après l'exemple :
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
Cette section comprend deux tableaux (includes et excludes) où vous pouvez spécifier des motifs de fichiers à analyser (ou à exclure de l'analyse).
Assurez-vous que vos motifs correspondent aux fichiers dans le répertoire, pas au nom du répertoire lui-même, sinon vos fichiers ne seront pas analysés.
Si vous voulez analyser tous les fichiers et seulement exclure par exemple votre répertoire .git, la configuration suivante fera l'affaire :
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
Si vous voulez plutôt définir explicitement quel dossier contient vos fichiers sources, l'exemple de configuration suivant analyserait tous les fichiers dans le répertoire src (sans rien ignorer) :
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
Les paramètres suivants sont disponibles dans cette section :
| Paramètre | Description | Optionnel | Par défaut | Introduit dans |
|---|---|---|---|---|
show_details | Décide s'il faut afficher la ligne/position et le type du caractère BIDI détecté s'il est trouvé (voir exemples ci-dessous) | Non | - | v0.1.1 |
ignore_invalid_data | S'il faut afficher un message d'erreur lorsque des fichiers binaires/non UTF-8 sont détectés | Oui | true | v0.1.2 |
verbose | S'il faut afficher le nom du fichier même si aucun caractère suspect n'a été trouvé | Oui | true | v0.1.2 |
Exemple : 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!
Exemple : 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!
Exemple : show_details = false, verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
Tous les crédits pour la détection de l'attaque, y compris la liste des caractères BIDI pertinents, reviennent aux auteurs originaux de l'article correspondant. Veuillez citer leur article original lorsque vous construisez sur leur travail.
Le fichier test/example-commenting-out.js dans ce dépôt est une copie de commenting-out.js dans leur dépôt original. Sa licence suit celle du dépôt original (Licence MIT)
Il est utilisé ici uniquement à des fins de test.
@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}
}