Pular para o conteúdo
Todos os conceitos

Cabeçalho que vira expressão

Quando um framework avalia uma linguagem de expressão sobre dado do usuário, o dado roda como código.

Alguns frameworks têm uma linguagem de expressão para montar textos e telas, como a OGNL no Apache Struts. Ela é poderosa: pode ler objetos e até chamar métodos. Vira um buraco quando um texto do usuário chega a um ponto que a avalia.

Na CVE-2017-5638 (a falha da Equifax), o parser de upload do Struts, diante de um Content-Type inválido, montava uma mensagem de erro com o valor cru do cabeçalho e a passava a uma função que avaliava OGNL. Um %{...} colocado no Content-Type era então executado como código no servidor. O gatilho não era um campo de formulário, era um cabeçalho HTTP.

O conserto parou de reavaliar a mensagem de erro com o valor do usuário. A regra geral: dado de fora nunca deve chegar a um avaliador de expressões; a mensagem de erro deve tratar o valor como texto, nunca como expressão.

Content-Type %{ ...exec('id')... } User-Agent curl/8.5.0 mensagem de erro avalia = RCE segue como texto comum
O cabeçalho Content-Type com %{...} entra na mensagem de erro do parser e é avaliado como OGNL, executando o comando; o User-Agent segue como texto comum.

Aparece nestes desafios