Pular para o conteúdo
Todos os conceitos

O contexto do template

Um template enxerga tudo o que o programa colocou no contexto, inclusive segredos.

Além de fazer contas, uma expressão de template lê variáveis do contexto: os valores que o programa entrega ao motor para a página usar. Numa página normal, isso é {{ user.name }} ou {{ config.app_name }}.

Quando há injeção, essa leitura vira do atacante. Tudo o que estiver no contexto fica legível: um objeto de configuração, uma chave de deploy, o objeto do usuário logado, qualquer coisa que o programador tenha deixado ali por conveniência. SSTI não precisa de execução de comando para já causar vazamento: às vezes basta ler o campo certo.

No exemplo, o contexto tem config com três campos. {{ config.app_name }} mostra um valor público; {{ config.deploy_token }} mostra o segredo que estava ali ao lado.

expressao do atacante {{ config.deploy_token }} le o campo secreto contexto dado ao motor config app_name: 'AgroPampa' publico theme: 'pampa' publico deploy_token: tocaia{context_holds_secrets} segredo
O contexto entregue ao motor tem config com app_name (público) e deploy_token (segredo); a expressão le o campo secreto direto.

Aparece nestes desafios