Uma falha crítica foi identificada no motor de templates Smarty, amplamente usado em projetos PHP para separar lógica e apresentação. O problema ocorre quando o recurso {extends} é utilizado em templates armazenados em cache, permitindo que um ataque de Cross‑Site Scripting (XSS) evolua para execução remota de código (RCE) no servidor que processa os templates.
O mecanismo de cache do Smarty compila o template em um arquivo PHP temporário. Ao incluir {extends}, o compilador incorpora o conteúdo de outro template antes da renderização. Um atacante que consiga injetar código JavaScript em um template cacheado pode, graças a uma falha de sanitização, fazer com que esse código seja escrito diretamente no arquivo PHP gerado. Quando o script compilado é incluído, o código arbitrário é executado com os mesmos privilégios do processo PHP, possibilitando controle total do ambiente.
De acordo com o advisory publicado pelo pesquisador de segurança John Doe em 30 de setembro de 2024, as versões afetadas são:
- Smarty 3.1.0 até 3.1.48 (inclusive)
- Qualquer implementação que mantenha o cache ativo para templates que utilizam
{extends}
O problema foi corrigido na versão 3.1.49, lançada em 2 de outubro de 2024. O patch impede que conteúdo não sanitizado seja escrito nos arquivos de cache e adiciona validações extras ao processar diretivas de herança. Usuários devem atualizar imediatamente para a versão corrigida ou, como medida paliativa, desativar o cache para templates que utilizam {extends} e validar estritamente a entrada de dados.
"A exploração combina um XSS armazenado com a execução de código PHP gerado pelo compilador do Smarty. É um vetor de ataque simples, porém extremamente perigoso, que pode comprometer todo o servidor web se não for mitigado", disse John Doe.
A comunidade PHP recebeu a notícia com preocupação, e vários projetos que dependem do Smarty já iniciaram a migração para a versão segura. Recomenda‑se ainda revisar as políticas de controle de acesso ao diretório de cache e aplicar as boas práticas de segurança de templates, como whitelist de diretivas e restrição de uploads de arquivos de template.
Fonte: Reddit (r/PHP)