Reino: Code Quality

Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.

Encoding Confusion: BiDi Control Characters

Abstract
Os caracteres de controle bidirecional no código-fonte podem levar a ataques de origem trojan.
Explanation
O código-fonte que contém caracteres de controle de substituição bidirecional Unicode pode ser um sinal de um ataque de ameaça interna. Esse ataque pode ser alavancado por meio da cadeia de suprimentos para linguagens de programação como C, C++, C#, Go, Java, JavaScript, Python e Rust. Diversas variantes de ataque já foram publicados por Nicholas Boucher e Ross Anderson, incluindo: Retornos iniciais, comentários e strings estendidas.
Exemplo 1: O código a seguir exibe um caractere de controle, presente em um arquivo de código-fonte C, que leva a um ataque de Retorno Antecipado:

#include <stdio.h>

int main() {
/* Nothing to see here; newline RLI /*/ return 0 ;
printf("Do we get here?\n");
return 0;
}

O caractere Unicode de controle bidirecional isolado da direita para a esquerda (RLI), em Example 1, faz com que o código seja visto como o seguinte:

#include <stdio.h>

int main() {
/* Nothing to see here; newline; return 0 /*/
printf("Do we get here?\n");
return 0;
}

É importante ressaltar que um desenvolvedor que realiza uma revisão de código, em um editor/visualizador vulnerável, não veria visivelmente o que um compilador vulnerável processará. Especificamente, a instrução de retorno antecipado que modifica o fluxo do programa.
References
[1] Nicholas Boucher, and R. Anderson Trojan Source: Invisible Vulnerabilities
[2] Standards Mapping - Common Weakness Enumeration CWE ID 451
[3] Standards Mapping - OWASP Top 10 2017 A1 Injection
[4] Standards Mapping - OWASP Top 10 2021 A03 Injection
[5] Standards Mapping - Smart Contract Weakness Classification SWC-130
desc.regex.universal.encoding_confusion_bidi_control_characters