detalhes de um novo ataque a sites que utilizam o modelo front-end-back-end, por exemplo, aqueles que operam através de redes de entrega de conteúdo, balanceadores de carga ou proxies. O ataque permite, através do envio de determinados pedidos, intervir no conteúdo de outros pedidos que estão sendo processados no mesmo fluxo entre o front-end e o back-end. O método proposto foi aplicado com sucesso para organizar um ataque que permite interceptar os parâmetros de autenticação dos usuários do serviço PayPal, que pagou aos pesquisadores cerca de 40 mil dólares em seu programa de recompensa por vulnerabilidades não resolvidas. O ataque também é aplicável a sites que utilizam a rede de entrega de conteúdo Akamai.
A essência do problema é que os front-ends e back-ends muitas vezes oferecem diferentes níveis de suporte ao protocolo HTTP, mas encapsulam os pedidos de diferentes usuários em um canal comum. Para a comunicação entre o front-end que recebe os pedidos e o back-end que processa os pedidos, é estabelecida uma conexão TCP de longa duração, através da qual os pedidos dos usuários são transmitidos em cadeia um após o outro, com separação por meio do protocolo HTTP. Para delimitar os pedidos, podem ser utilizados os cabeçalhos "Content-Length" (que define o tamanho total dos dados no pedido) e "" (que permite transmitir dados em partes, especificando blocos de tamanhos diferentes no formato "{tamanho}\r\n{bloco}\r\n{tamanho}\r\n{bloco}\r\n0").
O problema surge se o front-end suporta apenas "Content-Length", mas ignora "Transfer-Encoding: chunked" (por exemplo, assim agia o CDN Akamai) ou vice-versa. Caso haja suporte para "Transfer-Encoding: chunked" em ambos os lados, podem ser utilizadas as particularidades da implementação dos analisadores de cabeçalhos HTTP para o ataque (por exemplo, quando o front-end ignora linhas como "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked", "Transfer-Encoding:[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" ou "Transfer-Encoding : chunked", enquanto o back-end os processa com sucesso).
Nesse caso, o atacante pode enviar uma solicitação que especifica simultaneamente os cabeçalhos "Content-Length" e "Transfer-Encoding: chunked", mas o tamanho em "Content-Length" não corresponde ao tamanho da sequência chunked, que é menor que o valor real. Se o front-end processar e redirecionar a solicitação com base no "Content-Length", e o back-end esperar o término do bloco com base no "Transfer-Encoding: chunked", o final dos dados com base no "Transfer-Encoding: chunked" será determinado antes, e o restante da cauda da solicitação do atacante ficará no início da próxima solicitação, ou seja, o atacante terá a possibilidade de anexar dados arbitrários ao início de uma solicitação de outra pessoa que seja transmitida a seguir.

Para identificar o problema na combinação utilizada entre front-end e back-end, pode-se enviar uma solicitação do tipo:
POST /about HTTP/1.1
Host: example.com
Transfer-Encoding: chunked
Content-Length: 4
1
Z
Q
O problema está presente se o back-end não processar imediatamente a solicitação e esperar pela chegada do bloco final nulo delimitador dos dados chunked. Para uma verificação mais completa, uma ferramenta especial que também testa possíveis métodos para ocultar o cabeçalho "Transfer-Encoding: chunked" do front-end.
A realização de um ataque real depende das capacidades do site atacado, por exemplo, ao atacar o aplicativo web Trello, é possível modificar o início da solicitação (insere-se dados como "PUT /1/members/1234… x=x&csrf=1234&username=testzzz&bio=cake") e enviar uma mensagem que inclua a solicitação original de outro usuário e os Cookies de autenticação especificados nela. Para o ataque ao saas-app.com, foi possível realizar a substituição de código JavaScript na resposta, através da sua inclusão em um dos parâmetros da solicitação. Para o ataque ao redhat.com, um manipulador interno foi utilizado para redirecionar ao site do atacante (foi incluída uma solicitação do tipo "POST /search?dest=..\/assets\/idx?redir=\/\/redhat.com@evil.net\/ HTTP/1.1").
A aplicação do método para redes de entrega de conteúdo permitia simplesmente substituir o site solicitado pela substituição do cabeçalho "Host:". O ataque também é aplicável à organização da injeção de conteúdo em sistemas de cache de conteúdo e à extração de dados confidenciais em cache. O auge da aplicação do método foi a organização de um ataque ao PayPal, que permitia interceptar senhas enviadas pelos usuários durante a autenticação (foi realizada uma modificação na solicitação do iframe para executar JavaScript no contexto da página paypal.com/us/gifts, que não aplicava CSP (Content Security Policy)).
Curiosamente, em 2005 houve uma técnica semelhante de substituição de solicitações, permitindo alterar dados em proxies de cache (Tomcat, squid, mod_proxy) ou contornar bloqueios de firewalls especificando várias solicitações "GET" ou "POST" dentro de uma única sessão HTTP.
Fonte: opennet.ru
