Descubierta una vulnerabilidad en un gran número de compiladores para ocultar código malicioso
Los expertos de la Universidad de Cambridge han publicado información sobre una peligrosa vulnerabilidad (CVE-2021-42574) que afecta a casi todos los compiladores de código fuente modernos. El artículo Trojan Source describe un ataque insidioso que permite a los hackers ocultar código malicioso en el código fuente de varios programas.
El ataque se basa en la forma en que los compiladores manejan los identificadores únicos utilizados para determinar si el texto está orientado de izquierda a derecha o de derecha a izquierda. El punto débil reside en el algoritmo Bidi de Unicode, que permite utilizar conjuntamente palabras escritas de derecha a izquierda y de izquierda a derecha. Gracias a este algoritmo, se pueden combinar palabras árabes e inglesas. Permite leer el texto escrito de derecha a izquierda, de izquierda a derecha y viceversa.
En algunos casos, la capacidad del algoritmo Unicode Bidi no es suficiente para cambiar la forma en que se muestran estas palabras, y en tales casos se utilizan caracteres de control especiales. Sin embargo, si en una línea se combinan palabras con diferente dirección de texto, es posible utilizar estos caracteres de control para cambiar la dirección de lectura de este texto por parte del compilador y, por ejemplo, hacer que líneas que parecen comentarios funcionen como código ejecutable.
Utilizando este método, puedes añadir una instrucción maliciosa al código fuente normal y hacer que el texto de esa instrucción sea invisible al ver el código con un comentario posterior. Esto conducirá a la inserción de caracteres totalmente diferentes, que en realidad podrían ser código arbitrario. El código fuente final sigue siendo semánticamente correcto, pero tras la compilación ocurre lo contrario.
Al revisar y analizar dicho código fuente, el programador ve código con comentarios que no despiertan ninguna sospecha, pero el compilador o el intérprete invertirán el orden lógico de los caracteres y un comentario inocente se convertirá en un código adicional insertado en el programa. El fallo está presente en casi todos los compiladores - para los lenguajes de programación C, C++ (gcc y clang), C#, JavaScript (Node.js), Java (OpenJDK 16), Rust, Go y Python; en varios editores de código populares, incluyendo VS Code, Emacs, Atom; y en las interfaces de revisión de código fuente en GitHub, Gitlab, repositorios BitBucket y todos los productos Atlassian.
Fuente: trojansource, zdnet