
Comprueba la existencia de caracteres BIDI de Unicode en tus archivos que pueden ser mal utilizados para ataques a la cadena de suministro. Ver CVE-2021-42574
Esta herramienta verifica la existencia de caracteres Unicode BIDI en tus archivos, los cuales pueden ser mal utilizados para ataques a la cadena de suministro para mitigar CVE-2021-42574. Esta herramienta fue escrita en Rust y se distribuye como un contenedor pequeño (< 3MB) compatible con Docker para permitir un uso rápido y sencillo.
Para una explicación del ataque, echa un vistazo a la entrada del blog de GitHub o al artículo original donde se publicó el ataque.
Este paquete está diseñado principalmente para ser utilizado a través de su contenedor Docker. Pero la instalación local también es posible, por supuesto.
La compilación requiere al menos Rust 1.56.0 porque utiliza la Edición Rust 2021.
Clona este repositorio y ejecuta cargo install --path . para instalar el binario para tu usuario actual. Después, puedes invocar el comando bidi_detector.
Ejecutar la herramienta a través de su contenedor Docker oficial es probablemente la forma más fácil de empezar. Para ejecutarla mediante Docker, el siguiente comando debería funcionar para escanear todos los archivos dentro de tu directorio de trabajo actual:
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
Dependiendo de tu sistema, es posible que tengas que adaptar ligeramente este comando. Si usas, por ejemplo, podman y tienes SELinux habilitado, prueba el siguiente comando en su lugar:
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
Por defecto, se verificarán todos los archivos. Si tienes archivos binarios dentro del directorio actual, el comando fallará porque no puede decodificar un archivo no codificado en UTF8.
Para adaptar el comando a tus necesidades, coloca un archivo llamado bidi_config.toml en la raíz de tu proyecto.
Puedes encontrar un ejemplo en este repositorio, mira un ejemplo a continuación. Las opciones se describirán con más detalle después del ejemplo:
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
Esta sección incluye dos arreglos (includes y excludes) donde puedes especificar patrones de archivos a escanear (o excluir del escaneo).
Asegúrate de que tus patrones coincidan con los archivos dentro del directorio, no con el nombre del directorio en sí, de lo contrario tus archivos no serán escaneados.
Si deseas escanear todos los archivos y solo excluir, por ejemplo, tu directorio .git, la siguiente configuración funcionaría:
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
Si en cambio deseas definir explícitamente qué carpeta contiene tus archivos fuente, el siguiente ejemplo de configuración escanearía todos los archivos en el directorio src (sin ignorar nada):
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
Los siguientes ajustes están disponibles en esta sección:
| Ajuste | Descripción | Opcional | Valor predeterminado | Introducido en |
|---|---|---|---|---|
show_details | Decide si imprimir la línea/posición y el tipo del carácter BIDI detectado si se encuentra (ver ejemplos más abajo) | No | - | v0.1.1 |
ignore_invalid_data | Si se debe imprimir un mensaje de error cuando se detectan archivos binarios/no UTF8 | Sí | true | v0.1.2 |
verbose | Si se debe imprimir el nombre del archivo incluso si no se encontraron caracteres sospechosos | Sí | true | v0.1.2 |
Ejemplo: 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!
Ejemplo: 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!
Ejemplo: show_details = false, verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
Todo el crédito por la detección del ataque, incluyendo la lista de caracteres BIDI relevantes, corresponde a los autores originales del artículo correspondiente. Por favor, cita su artículo original cuando construyas sobre su trabajo.
El archivo test/example-commenting-out.js en este repositorio es una copia de commenting-out.js en su repositorio original. Su licencia sigue la del repositorio original (Licencia MIT)
Aquí se utiliza únicamente con fines de prueba.
@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}
}