Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2022-0778 — Exploit de prova de conceito para CVE-2022-0778, uma vulnerabilidade de negação de serviço na função BN_mod_sqrt() do OpenSSL, com ambiente de laboratório baseado em Docker para testes e análise. | Kitploit
Ferramentas/GitHubGitHub/jeongjunsoo/cve-2022-0778
Análise de VulnerabilidadesExploraçãoCriptografiaAprendizado e EducaçãoLabs e Prática
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

Exploit de prova de conceito para CVE-2022-0778, uma vulnerabilidade de negação de serviço na função BN_mod_sqrt() do OpenSSL, com ambiente de laboratório baseado em Docker para testes e análise.

Ver Repositório
1há 2 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2022-0778

Colaboradores

  • 정준수(@jeongjunsoo)

Resumo

  • A vulnerabilidade CVE-2022-0778 afeta a função BN_mod_sqrt() do OpenSSL, que calcula a raiz quadrada de números primos.

  • Quando esta função processa certificados maliciosamente manipulados que não são baseados em números primos, servidores não corrigidos podem ficar expostos a ataques de DoS.


Alvo

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

Antes do patch

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;
}

  • De acordo com este algoritmo, o loop deveria terminar quando o valor de i atingir o valor de e.
  • No entanto, se através de uma entrada específica, tanto i quanto e forem feitos para ter o valor 1, o loop não termina e ocorre um loop infinito.
  • Isso resulta em uma negação de serviço.

  • Após o patch

    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;
    }
    
    
    • O loop while original foi alterado para um loop for.
    • Assim, foi corrigido para que o loop termine automaticamente quando o valor de i atingir e.
    • O patch acima eliminou o risco de loop infinito.

    Configuração do ambiente e execução

    • Configuração do ambiente Ubuntu

    • docker compose up -d Executar o ambiente de teste

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

    • docker compose exec curl top Verificar o status dos processos

    • docker compose exec curl bash Executar bash

    • curl -k https://172.17.0.1:12345 Enviar uma solicitação HTTPS para a porta 12345


    Execução

    • Prepare três janelas de terminal (A, B, C) para o exercício.

    • No terminal A, execute o comando docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 para iniciar a imagem Docker.

    • Em seguida, no terminal B, execute o comando docker compose exec curl top para verificar a situação dos processos em execução.

    • Por fim, no terminal C, digite docker compose exec curl bash e, em seguida, envie uma solicitação HTTPS para a porta 12345 com curl -k https://172.17.0.1:12345.

    Resultado

    • No resultado do comando top executado no terminal B, pode-se observar que o processo curl está usando quase 100% dos recursos da CPU. Isso ocorre devido ao loop infinito.

    Conclusão

    • Esta vulnerabilidade é causada pela ausência de verificação de primalidade.
    • Para evitar o problema do loop infinito, o loop while foi alterado para um loop for no patch.

    Referências

    • 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/


    Baixar ferramenta