Eles encontraram vulnerabilidades nas bibliotecas de rede do Rust and Go impedindo a validação de IP

Faz pouco informações sobre vulnerabilidades foram divulgadas que foram encontrados nas bibliotecas padrão das línguas Rust and Go, que são relacionado ao manuseio incorreto de endereços IP com dígitos octais em funções de análise de endereço.

É mencionado que eEssas vulnerabilidades permitem que você evite verificações de endereços válidos en aplicativos, por exemplo, para organizar o acesso a endereços de interface de loopback ou sub-redes de intranet quando ataques de falsificação de solicitação do lado do servidor são executados.

As vulnerabilidades nestes dois idiomas As strings de endereço IP têm realização na especificação baseado em zero, já que você é em teoria, eles devem ser interpretados como números octais, mas o problema que causa essas falhas é que muitas bibliotecas ignoram isso e simplesmente descartam o zero, então eles acabam tratando o valor como um número decimal.

Por exemplo, para entender como os endereços IP são interpretados nesses bugs, o número 0177 em octal é 127 em decimal e com o qual um invasor pode solicitar um recurso especificando o valor "0177.0.0.1", que, por não ser usado como octal, a notação decimal para isso é "127.0.0.1".

É por isso que no caso de usar uma das bibliotecas problemáticas, o aplicativo não detectará a ocorrência do endereço 0177.0.0.1 na sub-rede 127.0.0.1, mas na verdade, ao enviar uma solicitação, pode-se chamar o endereço "0177.0.0.1" que, devido a uma interpretação incorreta, as funções de rede o processarão como 127.0.0.1. Da mesma forma, o acesso a endereços de intranet pode ser enganado e verificado especificando vários valores, que o invasor avaliará para possível exploração.

No lado Ferrugem, descobriu-se que o problema está sujeito à biblioteca padrão "std :: net" e que já está catalogado sob "CVE-2021-29922". Descreve que o analisador de endereço IP desta biblioteca descarta um zero na frente dos valores do endereço, mas apenas se não forem especificados mais de três dígitos, por exemplo, "0177.0.0.1" será interpretado como um valor inválido e um resultado incorreto será retornado em resposta.

A validação de entrada de string octal incorreta na biblioteca "net" padrão rust-lang permite que atacantes remotos não autenticados executem ataques SSRF, RFI e LFI indeterminados em muitos programas que dependem de rust-lang std :: net. Os octetos do endereço IP são deixados eliminados em vez de serem avaliados como endereços IP válidos.

Também é mencionado que os aplicativos que usam a biblioteca std :: net :: IpAddr ao analisar endereços especificados pelo usuário são potencialmente suscetíveis a ataques SSRF (falsificação de solicitação do lado do servidor), RFI (inclusão de arquivo remoto) e BIA (inclusão de arquivos locais). Da mesma forma, um invasor pode inserir 127.0.026.1, que na verdade é 127.0.22

Por exemplo, um invasor que envia um endereço IP para um aplicativo da web baseado em std :: net :: IpAddr pode causar SSRF inserindo dados de entrada octal; Um invasor pode enviar endereços IP exploráveis ​​se o octeto tiver 3 dígitos, com o octeto explorável mínimo 08 que leva à negação de serviço e o octeto máximo explorável 099 que também leva à negação de serviço. 

Se você quiser saber mais sobre esta vulnerabilidade em Rust, você pode verificar os detalhes no link a seguir. Também é mencionado que a vulnerabilidade foi corrigida no branch Rust 1.53.0.

Logo que para o problema que afeta to Go, é mencionado que este está sujeito à biblioteca padrão «net» e já está listado em CVE-2021-29923. Na descrição é mencionado que permite que atacantes remotos não autenticados realizem ataques SSRF, RFI e LFI indeterminado em muitos programas que dependem da função net.ParseCIDR embutida de golang. Os octetos CIDR IP individuais são removidos em vez de avaliá-los como octetos IP válidos.

Por exemplo, um invasor pode passar o valor 00000177.0.0.1, que, quando verificado na função net.ParseCIDR, será analisado como 177.0.0.1/24, não 127.0.0.1/24. O problema também se manifesta na plataforma Kubernetes. A vulnerabilidade foi corrigida na versão Go 1.16.3 e na versão beta 1.17.

Você pode aprender mais sobre isso sobre esta vulnerabilidade no link a seguir.


Seja o primeiro a comentar

Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.