
Verifica seus arquivos quanto à existência de caracteres Unicode BIDI que podem ser mal utilizados para ataques à cadeia de suprimentos. Veja CVE-2021-42574
Esta ferramenta verifica seus arquivos quanto à existência de caracteres Unicode BIDI que podem ser mal utilizados em ataques à cadeia de suprimentos para mitigar CVE-2021-42574. Esta ferramenta foi escrita em Rust e é distribuída como um contêiner docker pequeno (< 3MB) compatível para permitir uso rápido e fácil.
Para uma explicação do ataque, veja a entrada do blog do GitHub ou o artigo original onde o ataque foi publicado.
Este pacote é principalmente destinado a ser usado por meio de seu contêiner docker. Mas a instalação local é possível, claro. A compilação requer pelo menos Rust 1.56.0 porque usa a Edição Rust 2021. Clone este repositório e execute cargo install --path . para instalar o binário para seu usuário atual. Depois disso, você pode invocar o comando bidi_detector.
Executar a ferramenta por meio de seu contêiner docker oficial é provavelmente a maneira mais fácil de começar. Para executá-la via docker, o seguinte comando deve funcionar para escanear todos os arquivos dentro do seu diretório de trabalho atual:
docker run --rm -it -v $(pwd):/data ghcr.io/maweil/bidi_char_detector:latest
Dependendo do seu sistema, pode ser necessário adaptar ligeiramente este comando. Se você usa, por exemplo, podman e tem o SELinux habilitado, tente o seguinte comando:
podman run --rm -it -v $(pwd):/data:Z ghcr.io/maweil/bidi_char_detector:latest
Por padrão, todos os arquivos serão verificados. Se você tiver arquivos binários dentro do diretório atual, o comando falhará porque não consegue decodificar um arquivo codificado que não seja UTF-8. Para adaptar o comando às suas necessidades, coloque um arquivo chamado bidi_config.toml na raiz do seu projeto. Você pode encontrar um exemplo para ele neste repositório, veja um exemplo abaixo. As opções serão descritas em mais detalhes abaixo do exemplo:
[general]
includes = [
"src/**/*",
"**/*.patch",
"**/*.json",
"**/Dockerfile",
"test/*.js"
]
excludes = [
".git/*",
"target/*"
]
[display]
show_details = true
Esta seção inclui dois arrays (includes e excludes) onde você pode especificar padrões de arquivos a serem escaneados (ou a serem excluídos da verificação). Certifique-se de que seus padrões correspondam aos arquivos dentro do diretório, não ao nome do diretório em si, caso contrário seus arquivos não serão escaneados. Se você quiser escanear todos os arquivos e excluir apenas, por exemplo, seu diretório .git, a seguinte configuração resolveria:
[general]
includes = [
"**/*"
]
excludes = [
".git/*",
]
[display]
show_details = true
Se você quiser, em vez disso, definir explicitamente qual pasta contém seus arquivos fonte, o seguinte exemplo de configuração escanearia todos os arquivos no diretório src (sem ignorar nada):
[general]
includes = [
"src/**/*"
]
excludes = [
]
[display]
show_details = true
As seguintes configurações estão disponíveis nesta seção:
Exemplo: 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!
Exemplo: 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!
Exemplo: show_details = false, verbose = false
test/example-commenting-out.js - 6 BIDI characters
Found 6 potentially dangerous Unicode BIDI characters!
Todos os créditos pela detecção do ataque, incluindo a lista de caracteres BIDI relevantes, vão para os autores originais do artigo correspondente. Por favor, cite o artigo original ao desenvolver seu trabalho.
O arquivo test/example-commenting-out.js neste repositório é uma cópia de commenting-out.js em seu repositório original. Seu licenciamento segue o repositório original (Licença MIT). Ele é usado apenas para fins de teste aqui.
@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}
}
| Configuração | Descrição | Opcional | Padrão | Introduzido em |
|---|
show_details | Decide se deve exibir linha/posição e tipo do caractere BIDI detectado, se encontrado (veja exemplos abaixo) | Não | - | v0.1.1 |
ignore_invalid_data | Se deve exibir uma mensagem de erro quando arquivos binários/não-UTF8 são detectados | Sim | true | v0.1.2 |
verbose | Se deve exibir o nome do arquivo mesmo se nenhum caractere suspeito for encontrado | Sim | true | v0.1.2 |