Atoparon unha nova versión do ataque de contrabando de solicitudes HTTP

O sistemas web onde o frontend acepta conexións a través de HTTP / 2 e pásaos ao backend vía HTTP / 1.1 hestiveron expostos a unha nova versión do ataque "Contrabando de solicitudes HTTP", Permite enviar solicitudes de clientes especialmente deseñadas para dividir no contido das solicitudes doutros usuarios procesados ​​no mesmo fluxo entre o frontend e o backend.

O ataque pódese usar para inxectar código JavaScript malicioso nunha sesión cun sitio lexítimo, omita os sistemas de restrición de acceso e intercepta os parámetros de autenticación.

O autor do estudo demostrou a posibilidade de atacar os sistemas Netflix, Verizon, Bitbucket, Netlify CDN e Atlassian, e recibiu 56.000 dólares en programas de recompensa por identificar vulnerabilidades. O problema tamén se confirmou nos produtos F5 Networks.

O problema afecta parcialmente a mod_proxy no servidor http de Apache (CVE-2021-33193), correccións esperadas na versión 2.4.49 (os desenvolvedores recibiron unha notificación do problema a principios de maio e recibiron 3 meses para solucionalo). En nginx, a capacidade de especificar simultaneamente os encabezados "Content-Length" e "Transfer-Encoding" bloqueouse na versión anterior (1.21.1).

O principio de funcionamento do novo método de solicitudes coincidentes no tráfico é similar á vulnerabilidade descuberta polo mesmo investigador hai dous anos, pero limítase a interfaces que aceptan solicitudes a través de HTTP / 1.1.

O clásico ataque "Contrabando de solicitudes HTTP" baseouse no feito de que os frontends e os backends interpretan o uso das cabeceiras HTTP "Content-Length" de xeito diferente (determina o tamaño total dos datos na solicitude) e "Transfer-Coding: chunked" ( permítelle transferir datos en anacos) ...

Por exemplo, se a interface só admite "Contido-Lonxitude" pero ignora "Transferencia-Codificación: fragmentada", un atacante pode enviar unha solicitude que conteña as cabeceiras "Contido-Lonxitude" e "Transferencia-Codificación: fragmentada", pero o tamaño gl A "lonxitude do contido" non coincide co tamaño da cadea cortada. Neste caso, o frontend procesará e redirixirá a solicitude segundo a "Lonxitude do contido" e o backend agardará a que se complete o bloque en función da "Codificación de transferencia: fragmentada".

A diferenza do protocolo HTTP / 1.1 textual, que se analiza a nivel de liña, HTTP / 2 é un protocolo binario e manipula bloques datos dun tamaño predeterminado. Non obstante, HTTP / 2 usa pseudo-cabeceiras que corresponden a cabeceiras HTTP normais. Ao interactuar co backend usando o protocolo HTTP / 1.1, a interface traduce estes pseudo-cabeceiros en cabeceiras HTTP / 1.1 HTTP similares. O problema é que o backend toma decisións sobre a análise da transmisión baseado nas cabeceiras HTTP establecidas polo frontend, sen coñecer os parámetros da solicitude orixinal.

Mesmo en forma de pseudo-cabeceiras, os valores "Lonxitude do contido" e "codificación de transferencia" pódense transmitir en streaming, aínda que non se usan en HTTP / 2, xa que o tamaño de todos os datos determínase nun campo separado. Non obstante, ao converter unha solicitude HTTP / 2 a HTTP / 1.1, estas cabeceiras pasan e poden ser confusas para o backend.

Hai dúas opcións de ataque principais: H2.TE e H2.CL, no que o backend é enganado por unha codificación de transferencia incorrecta ou un valor de lonxitude de contido que non se corresponde co tamaño real do corpo de solicitude recibido polo frontend a través do protocolo HTTP / 2.

Como exemplo do ataque H2.CL, especifícase un tamaño incorrecto na pseudo-cabeceira lonxitude do contido ao enviar unha solicitude HTTP / 2 a Netflix. Esta solicitude leva á adición dunha cabeceira Duración do contido HTTP similar ao acceder ao backend a través de HTTP / 1.1, pero desde o tamaño en Lonxitude de contido é menor que o real, unha parte dos datos da cola son procesados ​​como o comezo da seguinte solicitude.

As ferramentas de ataque xa se engadiron ao Toolkit de Burp e están dispoñibles como extensión Turbo Intruder. Os proxies web, os balanceadores de carga, os aceleradores web, os sistemas de entrega de contido e outras configuracións onde as solicitudes se redirixen nun esquema frontend-backend son susceptibles ao problema.

Fuente: https://portswigger.net


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.