Skip to main content

¿Puede Snyk detectar algoritmos criptográficos débiles? Adiós, MD5

Escrito por
blog feature snyk code green

25 de febrero de 2025

0 minutos de lectura

Usar criptografía sólida es esencial para proteger los datos y la seguridad de las aplicaciones, por ejemplo, para tareas como aplicar hash a las contraseñas (aunque, técnicamente, esto no es criptografía clásica con fines de cifrado). Sin embargo, es posible que todavía haya código heredado en producción que use algoritmos criptográficos débiles y obsoletos que no se detectaron. ¿Cómo puede ayudarte Snyk Code a encontrar estas aplicaciones vulnerables?

Los peligros de los algoritmos criptográficos débiles

Los algoritmos débiles y obsoletos, ya sean de cifrado o de hash, representan graves riesgos de seguridad y pueden exponer información confidencial a los atacantes. Confiar en implementaciones inadecuadas da una falsa sensación de seguridad y deja los sistemas vulnerables. Es esencial comprender las limitaciones de los algoritmos antiguos y adoptar prácticas criptográficas modernas y seguras.

Varios algoritmos criptográficos se consideran actualmente inseguros y deben evitarse. MD5, por ejemplo, está criptográficamente roto y no es apto para ninguna aplicación de seguridad, sobre todo para aplicar hash a contraseñas. Como es fácil encontrar colisiones, distintas entradas pueden producir el mismo valor hash. Esto permite que los atacantes averigüen la contraseña original o creen una falsa que coincida con el hash almacenado. Otros ejemplos de algoritmos débiles son DES y RC4, que tienen vulnerabilidades conocidas y ya no deben usarse.

Algoritmo MD5 débil en Java

Considera la siguiente aplicación Java, que usa MD5 para aplicar hash a las contraseñas de los usuarios:

    @PostMapping("/login")
    public String loginUser(@RequestParam String username, @RequestParam String password) {
        String hashedPassword = userDatabase.get(username);
        if (hashedPassword != null && hashedPassword.equals(hashPassword(password))) {
            return "Login successful";
        }
        return "Invalid username or password";
    }

    private String hashPassword(String password) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(password.getBytes());
            byte[] digest = md.digest();
            return DatatypeConverter.printHexBinary(digest).toUpperCase();
        } catch (NoSuchAlgorithmException e) {
            return "Error: Hashing algorithm not found";
        }
    }

Nota: Consulta el código fuente completo en GitHub.

Probablemente sabes que no debes usar MD5 para aplicar hash a las contraseñas. Pero ¿qué pasa cuando tienes que mantener muchas aplicaciones y una gran cantidad de repositorios de código, y necesitas revisar rápidamente cientos de miles de líneas de código?

Si conectas Snyk a tus repositorios de código (o lo integras de cualquier otra forma), puede analizar de manera rápida y sencilla el código vulnerable, ya sea que esté latente en una de tus aplicaciones heredadas o que se haya generado con errores mediante GenAI y otros asistentes de código con IA.

Snyk detecta el algoritmo MD5 débil y señala la ruta de llamada de origen a destino en tu código:

Snyk Code detecta un algoritmo MD5 débil en código Java.

¿Cómo corregimos el algoritmo MD5 débil en Java?

Snyk enriquece los hallazgos de seguridad y, además de detectar el código vulnerable, también ofrece un análisis de las correcciones. En el siguiente ejemplo se muestra cómo se corrigió la API MessageDigest en un proyecto de código abierto (en este caso, el registro de seguridad de OWASP) y cómo se reemplazó el algoritmo hash obsoleto SHA-1 por una versión más actualizada: SHA-256:

Captura de pantalla de un análisis de ejemplo de una corrección de Snyk Code. Snyk Code ofrece detalles, prácticas recomendadas para prevenir problemas y ejemplos de correcciones.

Snyk también ofrece prácticas recomendadas para usar algoritmos sólidos en el hash y la criptografía, y explica los riesgos de almacenar información confidencial en texto sin formato.

Recomendaciones y prácticas recomendadas para la seguridad de los algoritmos

Se recomienda elegir los algoritmos adecuados para cada tarea. Si necesitas aplicar hash a contraseñas, debes elegir un algoritmo criptográfico seguro que proteja contra ataques de fuerza bruta y ofrezca un rendimiento adecuado para aplicaciones del mundo real. Bcrypt es uno de los principales ejemplos y lleva décadas siendo el estándar de facto de la industria. Otros ejemplos son PBKDF2 y el más reciente Argon2.

Asegúrate de consultar las prácticas recomendadas de seguridad criptográfica, como los recursos de OWASP.

Por último, empieza a usar Snyk (¡es gratis!) y suma puntos de seguridad al encontrar y detectar código vulnerable, dependencias obsoletas, criptografía débil y otros problemas de seguridad.

Herramienta gratuita en línea para revisar código

Protege tu código antes de tu próximo commit.

Leer más

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas definen el estándar.

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

illustration hero ai
Blog

El huracán de la IA ha llegado

La IA está acelerando por igual la creación de software y los ciberataques. Los líderes deben proteger los agentes y el código desde el inicio, aplicar controles en tiempo de ejecución y validar las defensas de forma independiente.