Em março de 2021, dois commits foram submetidos ao repositório Git oficial do PHP. O primeiro, com o título inofensivo "[skip-ci] Fix typo" e atribuído a Rasmus Lerdorf (o criador da linguagem), foi notado e revertido. No entanto, o atacante enviou o mesmo código novamente, mascarando o commit como um revert ("Revert "Revert "[skip-ci] Fix typo"") e assinando-o com o nome de Nikita Popov (um dos principais desenvolvedores do núcleo). Ambos os commits introduziram um backdoor no interpretador: se um cabeçalho User-Agentt estivesse presente em uma requisição HTTP com um valor começando com zerodium, o PHP executaria o restante do valor do cabeçalho como código PHP. Isso permitiria a execução remota de código em qualquer sistema que atualizasse para essa compilação.
O backdoor se manifestava através de algumas linhas adicionadas à função php_zlib_output_compression_start() no arquivo ext/zlib/zlib.c, afetando o processamento de praticamente qualquer requisição HTTP. O código verificava a existência do cabeçalho $_SERVER['HTTP_USER_AGENTT']. Se encontrado e se o valor contivesse a string zerodium, a função zend_eval_string() era chamada com o restante da string após o prefixo zerodium. A função zend_eval_string() é o equivalente em C da função eval() do PHP, executando a string fornecida como código PHP. O comentário REMOVETHIS: sold to zerodium, mid 2017 deixado pelo atacante era uma referência cínica à Zerodium, uma corretora de exploits. Nem Rasmus Lerdorf nem Nikita Popov escreveram esse código. O ataque explorou a própria infraestrutura Git do PHP (git.php.net), onde os commits foram enviados via HTTPS com autenticação por senha. Acredita-se que a base de senhas do master.php.net tenha sido comprometida, embora o próprio servidor não pareça ter sido invadido. A descoberta ocorreu acidentalmente, quando membros da comunidade notaram o código suspeito e questionaram sua presença. Como resultado, a equipe do PHP migrou seu repositório canônico para o GitHub, abandonando sua infraestrutura interna.
Este incidente expõe várias vulnerabilidades críticas na cadeia de suprimentos de software. Ele destaca a fragilidade da confiança na assinatura do autor (já que os commits não foram assinados e o nome do autor pode ser falsificado) e na infraestrutura (que foi comprometida). Mais importante, demonstra que existe uma longa cadeia entre o código-fonte que revisamos e o artefato que é executado pelo usuário, e qualquer elo dessa cadeia pode ser atacado. Ataques a essa cadeia podem explorar a infraestrutura (como no caso do git.php.net), enganar indivíduos (como no caso do event-stream, onde um mantenedor foi levado a incluir código malicioso por um suposto benfeitor) ou comprometer o processo de build (como no infame caso do xz/liblzma, onde um backdoor foi escondido em um arquivo tarball de release, mas não no repositório Git). A confiança em mecanismos como GPG, hashes e HTTPS, embora úteis, oferece apenas proteção parcial. A indústria tem respondido com soluções como o Sigstore, que visa remover a dependência de chaves de longa duração, utilizando identidades efêmeras e registros de transparência para verificar a proveniência dos artefatos. A verificação da proveniência do build (build provenance) garante que um artefato foi construído por um workflow específico a partir de um commit específico, mas não garante sua inofensividade. A adoção de práticas como o uso de SHAs de commit em vez de tags para dependências em CI/CD, e a implementação de Sigstore, são passos cruciais para mitigar esses riscos. Para o ecossistema PHP, a integração com Sigstore e a verificação de artefatos assinados são áreas em desenvolvimento, mas essenciais para a segurança futura.








