Bug de análisis de archivos de Easy Grade Pro 4.1 usado como ejemplo educativo para mostrar cómo los principiantes pueden iniciarse en la investigación de vulnerabilidades mediante ingeniería inversa.
Un ejemplo educativo creado para mostrar a principiantes que la investigación de vulnerabilidades mediante ingeniería inversa es posible desde el principio.
Este repositorio surge de la necesidad de contar con un ejemplo sencillo que pueda usarse al enseñar a principiantes que comienzan en la investigación de vulnerabilidades, especialmente aquellos interesados en la ingeniería inversa.
Después de completar un curso, una capacitación o un programa de maestría relacionado con la explotación binaria o el análisis binario, muchos estudiantes sienten que la investigación real de vulnerabilidades está muy por encima de su nivel. Suelen asociar la ingeniería inversa con temas muy avanzados como vulnerabilidades del kernel, explotación de navegadores, investigación de firmware o objetivos modernos complejos, y por eso creen que aún no están preparados. En la práctica, el problema no es la falta de conocimiento, sino la falta de un punto de partida realista.
Quería un ejemplo que pudiera mostrar que con las habilidades aprendidas durante un curso básico, ya es posible tomar un programa real, entender cómo funciona, provocar un fallo e identificar un error real.
Este repositorio es exactamente ese tipo de ejemplo. No se trata de encontrar una vulnerabilidad compleja. Se trata de mostrar que los principiantes pueden comenzar con algo pequeño, reproducible y comprensible, y aún así estar haciendo investigación real de vulnerabilidades.
Este repositorio está directamente relacionado con mi charla "El camino que lleva a tu primer CVE", donde explico que hay múltiples formas de entrar en el mundo de la investigación de vulnerabilidades, y que cada persona suele seguir un camino diferente según sus intereses.
Algunas personas comienzan con la auditoría de código fuente, otras con la ingeniería inversa, otras con la seguridad web y otras con la investigación de tecnología. Todos estos caminos son válidos, pero lo importante es entender que cada área también tiene puntos de entrada amigables para principiantes.
Ejemplos de caminos para principiantes incluyen:
Este tipo de objetivos pueden parecer básicos, pero enseñan las mismas habilidades fundamentales que se necesitan más adelante al trabajar en sistemas complejos.
Este repositorio representa uno de esos caminos para principiantes en el campo de la ingeniería inversa.
La vulnerabilidad documentada aquí se encontró analizando una aplicación antigua, entendiendo cómo se analiza su formato de archivo e identificando un error de programación que provoca un fallo. El impacto en sí no es complejo, pero el proceso es real, reproducible y útil para aprender cómo funciona realmente la investigación de vulnerabilidades.
Este es el tipo de ejemplo que uso al explicar "El camino que lleva a tu primer CVE", para mostrar que la ingeniería inversa es un camino válido desde el principio, y que comenzar con objetivos simples no solo es aceptable, sino que a menudo es la mejor manera de aprender.
Cuando estás empezando, las aplicaciones modernas suelen ser demasiado complejas. Utilizan protecciones, mitigaciones y bases de código que son difíciles de entender sin mucha experiencia. El software antiguo es diferente.
Las aplicaciones heredadas no fueron escritas teniendo en cuenta las prácticas modernas de seguridad. A menudo contienen errores simples de análisis, operaciones de memoria inseguras y errores lógicos que pueden entenderse con habilidades básicas de ingeniería inversa. Eso las hace perfectas para aprender.
Con un programa antiguo puedes: realizar ingeniería inversa del binario, entender el formato de archivo, provocar un fallo, analizar el fallo, localizar el error, documentar el problema e informar la vulnerabilidad. En otras palabras, aprendes las habilidades fundamentales que todo investigador de vulnerabilidades necesita.
De eso trata exactamente este ejemplo.
Este ejemplo es importante porque muestra algo muy simple:
Si te gusta la ingeniería inversa, puedes seguir ese camino desde el principio. Puede que lleve años dominarlo, pero no necesitas esperar años para empezar a hacer trabajo real.
La vulnerabilidad (CVE-2025-70330)) afecta la lógica de análisis de archivos de Easy Grade Pro 4.1 al cargar archivos de libro de calificaciones en formato .EGP propietario.
La aplicación reconstruye las estructuras internas del libro de calificaciones leyendo campos de posición fija del archivo y utilizando esos valores como desplazamientos dentro del búfer del archivo cargado. Estos desplazamientos se usan posteriormente para calcular tamaños de memoria y copiar datos en búferes asignados dinámicamente.
En condiciones normales, el archivo pasa varias comprobaciones estructurales antes de que continúe el análisis. Sin embargo, una vez que estas comprobaciones tienen éxito, el analizador confía en los valores de desplazamiento almacenados dentro del archivo sin validar que permanezcan dentro de los límites del búfer cargado.
Al modificar bytes específicos dentro de un archivo .EGP que por lo demás es válido, es posible corromper estos cálculos internos de desplazamiento. Cuando el analizador utiliza posteriormente estos valores, intenta leer memoria fuera de la región válida del archivo, lo que resulta en una violación de acceso y un bloqueo de la aplicación.
Esta condición corresponde a una lectura fuera de los límites (CWE-125), lo que provoca una denegación de servicio local cuando se abre el archivo manipulado.