Os parâmetros da string de consulta são embaralhados

Os parâmetros da string de consulta são embaralhados

Estamos observando um comportamento estranho dos dados enviados para nossos sistemas a partir de um javascript desde 09/09/2015.

O problema aparece quando a string de consulta é enviada aos nossos servidores. Alguns valores dos parâmetros contidos na solicitação get são embaralhados. Um mapeamento dos dados recebidos não é possível, pois os parâmetros ficam totalmente deformados.

Por exemplo, o parâmetro 'foo=bar' obtém 'foo=abr' ou 'foo=rab'. O que implica que os dados ainda estão disponíveis, mas os caracteres não estão mais na ordem certa. Isso só acontece em parâmetros com mais de 8 caracteres.

Calculamos uma soma de verificação com base no hash de Jenkins para a string de consulta. Esta soma de verificação é transmitida corretamente, pois a string tem apenas 6 caracteres. A solicitação GET é enviada aos nossos sistemas imediatamente após o cálculo do checksum. É por isso que o problema não deveria estar no javascript.

A análise dos logs de acesso dos nossos servidores mostra que os parâmetros já estão embaralhados quando são recebidos.

Até agora só pudemos observar esse problema nos agentes de usuário do Mozilla Firefox em combinação com os sistemas operacionais Microsoft Windows. Uma amostra de solicitações incorretas de ontem mostra os seguintes agentes de usuário:

  • Mozilla/5.0 (Windows NT 10.0; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
  • Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 5.1; rv:39.0) Gecko/20100101 Firefox/39.0
  • Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 6.0; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 6.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 6.1; rv:39.0) Gecko/20100101 Firefox/39.0
  • Mozilla/5.0 (Windows NT 6.1; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0
  • Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 6.2; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
  • Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
  • Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0

É improvável que essas solicitações sejam de alguma forma um ataque, uma vez que vêm de uma ampla variedade de endereços IP e têm uma proporção muito baixa (abaixo de 0,1%) do total de solicitações. O comportamento dos clientes também parece normal.

Há uma postagem no reddit (https://redd.it/3lxg26) e uma postagem sobre stackoverflow (https://stackoverflow.com/questions/32572264/what-might-be-shufflling-my-query-string-parameters-constructed-in-javascript) descrevendo um problema semelhante.

Existe alguém que tenha alguma sugestão sobre esse problema? Ou experimentando alguns efeitos semelhantes em sua aplicação?

informação relacionada