Blog

Qué es Trojan Source y cómo se infiltra en su código fuente

February 23, 2022
Laura Verheyde
Primer plano de una placa de circuito brillante con trazas naranjas y el texto '01' enfocado.

A principios de noviembre, la Universidad de Cambridge publicó su investigación sobre Trojan-Source. Este estudio se centra en cómo se pueden ocultar puertas traseras en el código fuente y en los comentarios mediante caracteres de formato direccional. Estos pueden utilizarse para crear código cuya lógica sea interpretada de forma distinta por el compilador y por un revisor humano.

Esta vulnerabilidad es nueva, aunque Unicode se ha utilizado con fines malintencionados en el pasado, por ejemplo, ocultando la extensión real de un archivo al invertir la dirección de la última parte del nombre del archivo. La investigación reciente reveló que muchos compiladores ignoran los caracteres Unicode en el código fuente sin previo aviso, mientras que los editores de texto, incluidos los editores de código, pueden reorganizar las líneas que contienen comentarios y código basándose en ellos. Por lo tanto, el editor puede mostrar el código y los comentarios de forma distinta, y en un orden diferente, a como los analizará el compilador, llegando incluso a intercambiar código y comentarios.

Sigue leyendo para saber más. O, si prefieres pasar a la acción y probar una simulación de hackeo de Trojan Source, únete a nuestra misión pública gratuita para experimentarlo tú mismo.

Texto bidireccional

Uno de estos ataques de Trojan-Source utiliza el algoritmo Bidi (bidireccional) de Unicode, que gestiona cómo combinar texto con un orden de visualización diferente, como el inglés (de izquierda a derecha) y el árabe (de derecha a izquierda). Los caracteres de formato direccional pueden utilizarse para reorganizar la agrupación y mostrar el orden de los caracteres.

La tabla anterior contiene algunos de los caracteres de anulación Bidi relevantes para el ataque. Tomemos como ejemplo:

RLI o d i c PDI

La abreviatura RLI significa Right-to-Left Isolate (aislamiento de derecha a izquierda). Aísla el texto de su contexto (delimitado por PDI, Pop-Directional-Isolate) y lo lee de derecha a izquierda. El resultado es:

c o d i g o

Sin embargo, los compiladores e intérpretes no suelen procesar los caracteres de control de formato, incluidos los de anulación Bidi, antes de analizar el código fuente. Si simplemente ignoran los caracteres de formato direccional, analizarán:

o g i d o c

¿Más de lo mismo?

Por supuesto, esto no es nada nuevo bajo el sol. En el pasado, se han insertado caracteres de formato direccional en los nombres de archivo para disfrazar su naturaleza maliciosa. Un archivo adjunto de correo electrónico que aparece como 'miejercicio.doc' podría parecer inocente, si no fuera por el carácter RLO (Right-to-Left override) presente, que revela que el nombre real es 'miejerciciocod.exe'.

El ataque Trojan Source inserta caracteres de formato direccional en los comentarios y cadenas presentes en el código fuente, ya que estos no generan errores de sintaxis ni de compilación. Estos caracteres de control cambian el orden de visualización de la lógica del código, provocando que el compilador lea algo totalmente distinto a lo que leería un humano.

Por ejemplo, un archivo que contenga los siguientes bytes en este orden:

Bidirectional Unicode Text

será reordenado de la siguiente manera por los caracteres de formato direccional

Directional Formatting Characters

haciendo que el código se visualice así si los caracteres de formato direccional no se señalan explícitamente:

Bidirectional Unicode Characters

El RLO invierte la llave de cierre por una de apertura, y viceversa, en la última línea. El resultado de ejecutar este código sería: “You are an admin”. La comprobación de administrador estaba comentada, pero los caracteres de control dan la impresión de que sigue presente. 

(Fuente: https://github.com/nickboucher/trojan-source/blob/main/C%23/commenting-out.csx)

¿Cómo podría afectarle esto?

Muchos lenguajes son vulnerables a este ataque: C, C++, C#, JavaScript, Java, Rust, Go y Python, y se asume que hay más. Un desarrollador experimentado podría extrañarse al ver caracteres de formato direccional en el código fuente, pero un principiante podría simplemente ignorarlos. Además, la visualización de estos caracteres depende en gran medida del IDE, por lo que no hay garantía de que se detecten.

Pero, ¿cómo podría esta vulnerabilidad colarse en el código fuente en primer lugar? En primer lugar, puede ocurrir al utilizar código fuente de fuentes poco fiables, donde las contribuciones de código malicioso han pasado desapercibidas. En segundo lugar, podría ocurrir mediante un simple copiar y pegar de código encontrado en internet, algo que la mayoría de los desarrolladores hemos hecho alguna vez. La mayoría de las organizaciones dependen de componentes de software de múltiples proveedores. Esto plantea la cuestión de hasta qué punto podemos confiar plenamente en este código. ¿Cómo podemos detectar código fuente que contenga puertas traseras ocultas?

¿De quién es el problema?

Por un lado, los compiladores y las canalizaciones de compilación deberían rechazar líneas de código fuente con más de una dirección, a menos que una dirección esté estrictamente limitada a cadenas y comentarios. Tenga en cuenta que un carácter de formato direccional en una cadena o comentario puede, si no se cierra, extender un cambio de dirección hasta el final de la línea. En general, los editores de código deberían renderizar y resaltar explícitamente los caracteres Unicode sospechosos, como los homoglifos y los caracteres de formato direccional. Desde noviembre, GitHub añade una señal de advertencia y un mensaje a cada línea de código que contiene texto Unicode bidireccional, aunque no resalta en qué parte de la línea se encuentran estos caracteres. Esto aún puede permitir que cambios de dirección maliciosos se cuelen junto con cambios de dirección benignos.

La concienciación entre los desarrolladores y los revisores de código es esencial, por lo que hemos creado una guía que ilustra la vulnerabilidad. Actualmente, esta guía está disponible para Java, C#, Python, GO y PHP.

Así que, si desea saber más, pruebe nuestra simulación (misiones públicas) de Trojan Source, y lea la investigación sobre Trojan Source.

Simulación en Java

Simulación en C#

Simulación en PHP

Simulación en GO

Simulación en Python

Eslogan

Controle el desarrollo impulsado por IA antes de su lanzamiento

Mida el riesgo asistido por IA, aplique políticas de codificación segura en el momento de la confirmación y acelere la entrega segura en todo su ciclo de vida de desarrollo de software (SDLC).

Reservar una demostración
Biblioteca de recursos

Explorar más blogs

Acceda a contenido especializado sobre programación segura, gobernanza de IA y gestión de riesgos de software.

ver todo
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Una cultura de seguridad: cómo Sage creó su programa de defensores

Descubre cómo Sage reforzó su seguridad con un enfoque flexible y centrado en las relaciones, logrando formar a más de 200 expertos en seguridad y alcanzar una reducción de riesgos cuantificable.

Más información
Icono de ventana de navegador con las letras KVK en negrita y dos líneas horizontales azules debajo sobre un fondo azul degradado.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Kamer van Koophandel: Seguridad a escala impulsada por los desarrolladores

La Cámara de Comercio (Kamer van Koophandel) comparte cómo integró la programación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de puntuación de confianza y una cultura de responsabilidad compartida en seguridad.

Más información
Logotipo de Insurance Australia Group con texto y un icono en azul y gris dentro del diseño de una ventana de navegador web.
Caso de estudio
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cómo un «Juego de Códigos» guía a IAG Group hacia un futuro de programación más seguro

IAG Group es la entidad detrás de muchas de las principales compañías de seguros en la región de Asia-Pacífico, que suscribe pólizas para millones de clientes por un valor aproximado de 11.400 millones de dólares australianos en primas anuales.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Mes de la Concienciación sobre Ciberseguridad 2026: Comprender la seguridad de la IA es fundamental para la defensa empresarial

Hemos llegado a un punto en el que la mayoría de las principales empresas de IA han pedido públicamente una ralentización global en el desarrollo de la IA para que las medidas de seguridad puedan ponerse al día, pero la verdad es que ya se han materializado graves problemas de seguridad. Esto deja a innumerables líderes de seguridad y equipos ejecutivos en una situación urgente, a medida que los costes monetarios y de riesgo de la implementación de la IA siguen acumulándose.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Habilitador 8: Branding de su programa

Un programa de codificación segura necesita algo más que un buen contenido para tener éxito. El Habilitador 8 muestra cómo el branding transforma la participación en una experiencia codiciada basada en el estatus.

Más información
Blog
Etiqueta de filtro
Este es un texto dentro de un bloque div.

Cada empleado está ahora en la primera línea de la ciberseguridad de la IA

El panorama tecnológico empresarial está cambiando a una velocidad que pocos previeron hasta que fue demasiado tarde. Hemos cruzado oficialmente el umbral del código escrito por humanos y la asistencia básica de copilotos hacia la era del Ciclo de Vida de Desarrollo Agéntico (ADLC). Si bien los agentes de IA autónomos prometen una eficiencia sin precedentes en múltiples funciones, también traen consigo una clase completamente nueva de riesgos regulatorios y de seguridad.

Más información

Proteja el desarrollo basado en IA antes de su lanzamiento

Identifique riesgos de desarrollo, aplique políticas y prevenga vulnerabilidades en todo el ciclo de vida de su software.

Reservar una demostración
No se encontraron elementos.