As vulnerabilidades atopadas nas bibliotecas de rede Rust and Go impiden a validación de IP

Recientemente publicouse información sobre vulnerabilidades que se atoparon nas bibliotecas estándar das linguas Rust and Go, que son relacionado co mal manexo de enderezos IP con díxitos octais nas funcións de análise de enderezos.

Menciónase que eEstas vulnerabilidades permítenlle evitar verificacións de enderezos válidos en aplicacións, por exemplo, para organizar o acceso a enderezos de interface de loopback ou subredes de intranet cando se realizan ataques de falsificación de solicitudes do lado do servidor.

As vulnerabilidades nestas dúas linguas As cadeas de enderezos IP realizáronse na especificación baseado en cero, xa que estás en teoría deberían interpretarse como números octais, pero o problema que causa estes fallos é que moitas bibliotecas non o teñen en conta e só descartan o cero acaban tratando o valor como un número decimal.

Por exemplo, para comprender como se interpretan as direccións IP nestes erros, o número 0177 en octal é 127 en decimal e co que un atacante pode solicitar un recurso especificando o valor "0177.0.0.1", que, xa que non se toma como octal, a notación decimal para isto é "127.0.0.1".

É por iso no caso de empregar unha das bibliotecas problemáticas, a aplicación non detectará a aparición do enderezo 0177.0.0.1 na subred 127.0.0.1, pero de feito, ao enviar unha solicitude, pode chamar ao enderezo "0177.0.0.1" que, debido a unha mala interpretación, as funcións de rede procesarán isto como 127.0.0.1. Do mesmo xeito, o acceso a enderezos de intranet pódese enganar e verificar especificando varios valores, que o atacante avaliará para a súa posible explotación.

No lado de Rust, atopouse que o problema estaba suxeito á biblioteca estándar "std :: net" e que xa está catalogado baixo "CVE-2021-29922". Descríbeo o analizador das direccións IP desta biblioteca descarta un cero diante dos valores do enderezo, pero só se non se especificaron máis de tres díxitos, por exemplo, "0177.0.0.1" interpretarase como un valor non válido e devolverase un resultado incorrecto en resposta.

A validación incorrecta da entrada de cadea octal na biblioteca "net" estándar de rust-lang permite aos atacantes remotos non autenticados realizar ataques SSRF, RFI e LFI indeterminados en moitos programas que dependen de rust-lang std :: net. Os octetos da dirección IP quedan despoxados en lugar de ser avaliados como enderezos IP válidos.

Tamén se menciona que as aplicacións que usan a biblioteca std :: net :: IpAddr ao analizar enderezos especificados por usuario son potencialmente susceptibles a ataques SSRF (falsificación de solicitudes do lado do servidor), RFI (inclusión de ficheiros remotos) e LFI (inclusión de ficheiros locais). Do mesmo xeito, un atacante pode introducir 127.0.026.1, que en realidade é 127.0.22

Por exemplo, un atacante que envía unha dirección IP a unha aplicación web baseada en std :: net :: IpAddr pode causar SSRF introducindo datos de entrada octal; Un atacante pode enviar enderezos IP explotables se o octeto ten 3 díxitos, co octeto mínimo explotable 08 que leva a denegación de servizo e o octeto máximo explotable 099 que tamén leva a denegación de servizo. 

Se queres saber máis sobre esta vulnerabilidade en Rust, podes consultar os detalles Na seguinte ligazón. Tamén se menciona que a vulnerabilidade se solucionou na rama Rust 1.53.0.

Tan axiña como ao problema que afecta to Go, mencionase que está suxeito á biblioteca estándar «net» e xa figura na lista CVE-2021-29923. Na descrición mencionase que permite aos atacantes remotos non autenticados realizar ataques SSRF, RFI e LFI indeterminado en moitos programas que dependen da rede incorporada de Golang. Función ParseCIDR. Os octetos IP individuais CIDR son eliminados no canto de avalialos como octetos IP válidos.

Por exemplo, un atacante pode pasar o valor 00000177.0.0.1 que, cando se marca na función net.ParseCIDR, analizarase como 177.0.0.1/24 e non 127.0.0.1/24. O problema tamén se manifesta na plataforma Kubernetes. A vulnerabilidade solucionouse na versión 1.16.3 de Go e na versión beta 1.17.

Podes aprender máis sobre iso sobre esta vulnerabilidade Na seguinte ligazón.


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

Sexa o primeiro en opinar sobre

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.