Presentamos Missions: la siguiente fase de la formación en seguridad centrada en el desarrollador

Desde 2015, hemos involucrado a desarrolladores de todo el mundo con un enfoque proactivo y positivo hacia la seguridad, ayudándoles a adquirir las habilidades necesarias para proteger su código, reducir el trabajo de corrección y, con suerte, lograr que el equipo de seguridad deje de ser visto como el "policía de la diversión".
Seguimos comprometidos a trabajar codo a codo con los desarrolladores mientras protegen su código por toda la galaxia, pero ha llegado el momento de cambiar las cosas y llevar a nuestros desarrolladores, curtidos en mil batallas y conscientes de la seguridad, al siguiente nivel.
Nos complace anunciar el lanzamiento de una nueva funcionalidad en la plataforma Secure Code Warrior: Missions. Esta categoría de desafíos totalmente nueva representa la siguiente fase en la formación en seguridad orientada a desarrolladores, permitiendo a los usuarios pasar de la simple memorización de conceptos de seguridad a su aplicación en un entorno de simulación del mundo real. Este enfoque de microaprendizaje estructurado desarrolla habilidades sólidas de codificación segura que son relevantes para el trabajo y mucho más entretenidas que ver interminables vídeos de formación de fondo durante la jornada laboral.
Nuestra primera misión pública y jugable es una simulación de la brecha de Unicode en GitHub. Puede parecer engañosamente simple, pero es una vulnerabilidad realmente ingeniosa que resulta divertido analizar. El investigador de seguridad 0xsha realizó un estudio de caso exhaustivo sobre cómo este mismo error puede utilizarse para explotar Django mediante transformaciones de mayúsculas y minúsculas, revelando además cómo el comportamiento de la vulnerabilidad puede cambiar entre diferentes lenguajes de programación. Hay mucho más por descubrir sobre este problema de seguridad, y nuestra misión es un excelente punto de partida.
Colisión frontal (mapeo de mayúsculas/minúsculas) de GitHub
En una publicación de blog del 28 de noviembre de 2019, el grupo de investigación de seguridad Wisdom informó sobre un error de seguridad que descubrieron en GitHub. Explicaron cómo pudieron utilizar una colisión de mapeo de mayúsculas/minúsculas en Unicode para provocar el envío de un correo electrónico de restablecimiento de contraseña a la dirección incorrecta (o, si pensamos como un atacante, a una dirección de correo electrónico elegida por el actor de amenazas).
Aunque una vulnerabilidad de seguridad nunca es una buena noticia, los investigadores de seguridad que actúan con ética (whitehat) ofrecen cierta ayuda —por no mencionar la oportunidad de evitar un desastre— si descubren errores potencialmente explotables en una base de código. Sus blogs e informes suelen ser una lectura excelente, y resulta interesante aprender sobre una nueva vulnerabilidad y cómo funciona.
Para alcanzar el siguiente nivel de destreza en codificación segura, es sumamente útil no solo encontrar vulnerabilidades comunes (especialmente las nuevas y llamativas; todos sabemos que los actores malintencionados buscarán terreno fértil para extraer datos con estas nuevas técnicas), sino también contar con un entorno seguro y práctico para entender cómo explotarlas.
Así que hagamos precisamente eso. Sigue leyendo para descubrir cómo se puede explotar una colisión de mapeo de mayúsculas/minúsculas en Unicode, cómo se ve en tiempo real y cómo puedes adoptar la mentalidad de un investigador de seguridad para probarlo tú mismo.
¿Listo para enfrentarte a una colisión de mapeo de mayúsculas/minúsculas ahora mismo? Adelante:

Unicode: complejo, infinitamente personalizable y mucho más que emojis
"Unicode" puede no estar en el vocabulario de la persona promedio, pero es muy probable que la mayoría lo utilice de alguna forma todos los días. Si has usado un navegador web, cualquier software de Microsoft o enviado un emoji, has estado en contacto directo con Unicode. Es un estándar para la codificación y el manejo coherente de texto de la mayoría de los sistemas de escritura del mundo, asegurando que todos puedan expresarse (digitalmente) utilizando un único conjunto de caracteres. Actualmente, existen más de 143.000 caracteres, así que estás cubierto tanto si usas islandés, como la "i" sin punto turca, o cualquier otra cosa.
Debido al enorme volumen de caracteres que tiene Unicode, en muchos casos es necesario convertir caracteres a otro "equivalente". Por ejemplo, parece lógico que si conviertes una cadena Unicode con una "i" sin punto a ASCII, debería convertirse simplemente en una "i", ¿verdad?
Un gran volumen de codificación de caracteres conlleva un gran potencial de desastre
Una colisión de mapeo de mayúsculas/minúsculas en Unicode es un fallo de lógica de negocio y, en esencia, puede llevar a la toma de control de cuentas que no están protegidas por autenticación de dos factores (2FA). Para ilustrar la vulnerabilidad en cuestión, veamos un ejemplo de este error en un fragmento de código real:
app.post(/api/resetPassword, function (req, res) {
var email = req.body.email;
db.get(SELECT rowid AS id, email FROM users WHERE email = ?, [email.toUpperCase()],
(err, user) => {
if (err) {
console.error(err.message);
res.status(400).send();
} else {
generateTemporaryPassword((tempPassword) => {
accountRepository.resetPassword(user.id, tempPassword, () => {
messenger.sendPasswordResetEmail(email, tempPassword);
res.status(204).send();
});
});
}
});
});
La lógica funciona más o menos así:
- Acepta la dirección de correo electrónico proporcionada por el usuario y la convierte a mayúsculas para mantener la coherencia.
- Comprueba si la dirección de correo electrónico ya existe en la base de datos.
- Si existe, establece una nueva contraseña temporal (por cierto, esto no es una buena práctica; en su lugar, utiliza un enlace con un token que permita restablecer la contraseña).
- Luego envía un correo electrónico a la dirección obtenida en el paso 1, que contiene la contraseña temporal (esto es una práctica muy deficiente por muchas razones. ¡Qué horror!).
Veamos qué sucede con el ejemplo proporcionado en la publicación original del blog, donde un usuario solicita un restablecimiento de contraseña para el correo John@GıtHub.com (nótese la i turca sin punto):
- La lógica convierte John@Gıthub.com a JOHN@GITHUB.COM
- Busca esto en la base de datos y encuentra al usuario JOHN@GITHUB.COM
- Genera una nueva contraseña y la envía a John@Gıthub.com
Tenga en cuenta que este proceso termina enviando el correo electrónico altamente confidencial a la dirección incorrecta. ¡Vaya!
Cómo expulsar a este demonio Unicode
El aspecto interesante de esta vulnerabilidad específica es que existen múltiples factores que la hacen vulnerable:
- El comportamiento real de conversión de Unicode
- La lógica que determina la dirección de correo electrónico a utilizar, es decir, la dirección proporcionada por el usuario en lugar de la que ya existe en la base de datos.
En teoría, puede solucionar este problema específico de dos maneras, tal como se identifica en la publicación del blog de Wisdom:
- Convertir el correo electrónico a ASCII con conversión Punycode
- Utilizar la dirección de correo electrónico de la base de datos, en lugar de la proporcionada por el usuario
Cuando se trata de fortalecer el software, es una gran idea no dejar nada al azar, empleando tantas capas de defensa como sea posible. Por lo que sabemos, puede haber otras formas de explotar esta codificación; simplemente aún no las conocemos. Todo lo que pueda hacer para reducir el riesgo y cerrar las puertas que puedan quedar abiertas para un atacante es valioso.
¿Listo para probarlo usted mismo?
La mayoría de los desarrolladores saben que los datos comprometidos son malos para el negocio. Sin embargo, los ingenieros conscientes de la seguridad son un poderoso antídoto contra las crecientes vulnerabilidades, las brechas y los problemas de ciberseguridad.
Es hora de llevar sus habilidades de codificación segura y concienciación al siguiente nivel. Experimente esta vulnerabilidad de GitHub en una simulación inmersiva y segura, donde podrá ver el impacto del código defectuoso tanto en el frontend como en el backend. Los atacantes tienen ventaja, así que igualemos el campo de juego y apliquemos habilidades reales con un contraataque de sombrero blanco.

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).
Explorar más blogs
Acceda a contenido especializado sobre programación segura, gobernanza de IA y gestión de riesgos de software.

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.

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.

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.

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.

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.
.avif)
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.
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.