ASA-2019-00539 – curl: Heap buffer overflow no protocolo TFTP com tamanho de bloco pequeno

libcurl contém um heap buffer overflow na função (tftp_receive_packet()) que recebe dados de um servidor TFTP. Ele pode chamar recvfrom() com o tamanho padrão para o buffer, e não com o tamanho usado para alocá-lo. Portanto, o conteúdo que pode substituir a memória heap é controlado pelo servidor. Essa falha é acionada apenas se o servidor TFTP enviar um OACK sem a opção BLKSIZE, quando um BLKSIZE menor que 512 bytes foi solicitado pelo cliente TFTP. OACK é uma extensão TFTP e não é usada por todos os servidores TFTP.

ASA-2019-00538 – curl: FTP-KRB double-free

Pode-se dizer à libcurl para usar o kerberos via FTP em um servidor, conforme definido com a opção CURLOPT_KRBLEVEL. Durante essa transferência de dados FTP do kerberos, o servidor envia dados para agrupar os blocos com o tamanho de 32 bits de cada bloco primeiro e depois com a quantidade de dados imediatamente a seguir. Um servidor mal-intencionado ou quebrado pode reivindicar o envio de um bloco muito grande e, ao fazer isso, faz com que a chamada subsequente de curl para realloc() falhe, o curl se comportará mal no caminho de saída e liberará duas vezes a memória. Em termos práticos, uma área de memória de até 4 GB pode muito bem ser alocada em um sistema moderno de 64 bits, mas em sistemas de 32 bits ela falhará.

ASA-2019-00537 – OpenSSL: Padding Oracle nas funções PKCS7_dataDecode e CMS_decrypt_set1_pkey

Nas situações em que um atacante recebe uma notificação automatizada do sucesso ou falha de uma tentativa de descriptografia, o atacante, após enviar um número muito grande de mensagens a serem descriptografadas, pode recuperar uma chave de criptografia transportada CMS/PKCS7 ou descriptografar qualquer mensagem criptografada RSA que foi criptografada com a chave pública RSA, usando um ataque de padding oracle Bleichenbacher. Os aplicativos não serão afetados se eles usarem um certificado junto com a chave RSA privada para as funções CMS_decrypt() ou PKCS7_decrypt() para selecionar as informações corretas do destinatário a descriptografar.

ASA-2019-00536 – OpenSSL: Proteção fork

O OpenSSL 1.1.1 introduziu um reescrito gerador de números aleatórios (RNG). Isso pretendia incluir proteção no caso de uma chamada do sistema fork() para garantir que os processos pai e filho não compartilhassem o mesmo estado RNG. No entanto, essa proteção não estava sendo usada no caso padrão. Uma mitigação parcial para esse problema é que a saída de um timer de alta precisão é misturada no estado RNG, para que a probabilidade de um estado de compartilhamento de processos pai e filho seja significativamente reduzida. Se um aplicativo já chamar OPENSSL_init_crypto() explicitamente usando OPENSSL_INIT_ATFORK, esse problema não ocorrerá.

ASA-2019-00535 – OpenSSL: ECDSA timing attack remoto

Normalmente, nos grupos OpenSSL EC sempre há um co-fator presente e isso é usado em caminhos de código resistentes a side channel. No entanto, em alguns casos, é possível construir um grupo usando parâmetros explícitos (em vez de usar uma curva nomeada). Nesses casos, é possível que esse grupo não tenha o cofator presente. Isso pode ocorrer mesmo onde todos os parâmetros correspondem a uma curva nomeada conhecida. Se essa curva for usada, o OpenSSL retornará a caminhos de código nao resistentes a side channel, o que pode resultar em recuperação total de chave durante uma operação de assinatura ECDSA. Para ficar vulnerável, o atacante precisa ter a capacidade de cronometrar a criação de um grande número de assinaturas, onde parâmetros explícitos sem co-fator presente estão sendo usados por um aplicativo que usa libcrypto.