Quando nos referimos ao OpenSSL, falamos de um kit de ferramentas completas para o uso dos protocolos Transport Layer Security (TLS) e Secure Sockets Layer (SSL), além de ser uma biblioteca criptográfica. Seu código é Open Source e amplamente utilizado para segurança nas comunicações em aplicações web.
Infelizmente nenhum software está livre de problemas, por isso é muito importante que sejam feitas revisões periódicas de códigos, a fim de buscar e corrigir a maioria das falhas, essas revisões ajudam na busca constante dos problemas. Ultimamente o OpenSSL vem sofrendo com muitas dessas falhas, como por exemplo o caso dos ataques Heartbleed e do Poodle, que exploram algumas das vulnerabilidades que foram encontradas. O melhor de se encontrar falhas é que podemos ter certeza de que elas serão corrigidas e implementadas, porém, há o risco de serem graves e nem sempre as empresas atualizam seus sistemas de imediato, com isso ficam expostos a ataques de usuários maliciosos.
A nova falha, categorizada com o CVE-2016-0701, afeta as versões 1.0.2e, 1.0.2d, 1.0.2c, 1.0.2b, 1.0.2a e 1.0.2. De acordo com o próprio site do OpenSSL, o problema foi corrigido na versão 1.0.2f. O bug foi identificado na implementação de troca de chaves Diffie-Hellman.
![]() |
Exemplo de troca de chaves por: https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange |
Em resumo, o algoritmo de Diffie-Hellman é usado para a trocar chaves secretas através de canais não confiáveis, criando uma conexão segura entre os dois lados. A falha acontece porque o algoritmo não usa números primos “seguros”, deixando vulnerável a um ataque de recuperação de chave. Servidores que habilitaram a opção SSL_OP_SINGLE_DH_USE estão seguros ao ataque e essa opção força o servidor a não usar o mesmo expoente. Infelizmente, essa opção veio desabilitada por padrão nas versões citadas acima, exceto a versão 1.0.2f, onde o OpenSSL optou por deixar habilitado por padrão.
Digamos que você esteja desenvolvendo um software e está utilizando a biblioteca antiga do OpenSSL, caso não queira atualizar para a versão mais atual, utilize a função SSL_CTX_set_options() para ativar o SSL_OP_SINGLE_DH_USE.
Foi disponibilizado no git um código simples para verificar se seu sistema está trabalhando com uma versão vulnerável do OpenSSL: https://github.com/luanjampa/cve-2016-0701
Referências: