Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2022-0778 — Exploit de prueba de concepto para CVE-2022-0778, una vulnerabilidad de denegación de servicio en la función BN_mod_sqrt() de OpenSSL, con un entorno de laboratorio basado en Docker para pruebas y análisis. | Kitploit
Herramientas/GitHubGitHub/jeongjunsoo/cve-2022-0778
Análisis de VulnerabilidadesExplotaciónCriptografíaAprendizaje y EducaciónLabs y Práctica
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

Exploit de prueba de concepto para CVE-2022-0778, una vulnerabilidad de denegación de servicio en la función BN_mod_sqrt() de OpenSSL, con un entorno de laboratorio basado en Docker para pruebas y análisis.

Ver Repositorio
1hace 2 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2022-0778

Colaboradores

  • 정준수(@jeongjunsoo)

Resumen

  • La vulnerabilidad CVE-2022-0778 afecta a la función BN_mod_sqrt() de OpenSSL que calcula la raíz cuadrada de un número primo.

  • Cuando esta función procesa un certificado maliciosamente manipulado que no está basado en un número primo, los servidores sin parche pueden estar expuestos a un ataque DoS.


Objetivo

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

Antes del parche

root@kitploit:~
i = 1;
if (!BN_mod_sqr(t, b, p, ctx))
    goto end;
while (!BN_is_one(t)) {
    i++;
    if (i == e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    if (!BN_mod_mul(t, t, t, p, ctx))
        goto end;
}

  • Según este algoritmo, cuando el valor de i alcanza el valor de e, el bucle debería terminar.
  • Sin embargo, si mediante una entrada específica se logra que tanto i como e tengan el valor 1, el bucle no termina y se produce un bucle infinito.
  • Esto provoca una denegación de servicio.

  • Después del parche

    root@kitploit:~
    for (i = 1; i < e; i++) {
        if (i == 1) {
            if (!BN_mod_sqr(t, b, p, ctx))
                goto end;
        } else {
            if (!BN_mod_mul(t, t, t, p, ctx))
                goto end;
        }
        if (BN_is_one(t))
            break;
    }
    /* If not found, a is not a square or p is not prime. */
    if (i >= e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    
    
    • La sentencia while original se cambió por una sentencia for.
    • De esta manera, cuando el valor de i alcanza e, el bucle termina automáticamente.
    • Este parche elimina el riesgo de bucle infinito.

    Configuración y ejecución del entorno

    • Configuración del entorno Ubuntu

    • docker compose up -d Ejecutar el entorno de prueba

    • docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345

    • docker compose exec curl top Verificar el estado del proceso

    • docker compose exec curl bash Ejecutar bash

    • curl -k https://172.17.0.1:12345 Enviar solicitud HTTPS al puerto 12345


    Ejecución

    • Prepare tres ventanas de terminal (A, B, C) para la práctica.

    • En la terminal A, ejecute el comando docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 para iniciar la imagen Docker.

    • A continuación, en la terminal B, ejecute el comando docker compose exec curl top para observar el estado de los procesos en ejecución.

    • Finalmente, en la terminal C, introduzca docker compose exec curl bash y luego envíe una solicitud HTTPS al puerto 12345 con curl -k https://172.17.0.1:12345.

    Resultados

    • Como resultado del comando top ejecutado en la terminal B, se puede ver que el proceso curl está usando casi el 100% de los recursos de CPU. Esto ocurre debido al bucle infinito.

    Conclusión

    • Esta vulnerabilidad se debe a la falta de verificación de si un número es primo.
    • Para evitar el problema del bucle infinito, se parcheó cambiando la sentencia while por for.

    Referencias

    • https://github.com/drago-96/CVE-2022-0778

    • https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

    • https://github.com/yywing/cve-2022-0778/


    Descargar herramienta