
Backdoor User-Agentt do PHP 8.1.0-dev para Execução Remota de Código (RCE)
User-Agentt do PHP 8.1.0-dev – Execução Remota de Código (RCE)Gravidade: Crítica (Equivalente CVSS: 10.0)
Tipo de Vulnerabilidade: Backdoor de Supply Chain / Execução Remota de Código (RCE)
Software Afetado: PHP 8.1.0-dev (Apenas Build de Desenvolvimento)
Vetor de Ataque: Remoto (Não Autenticado)
Autenticação Necessária: Não
Interação do Usuário: Nenhuma
Impacto: Comprometimento Total do Sistema
O Backdoor User-Agentt do PHP 8.1.0-dev é um dos comprometimentos de supply chain mais infames da história do software de código aberto. Diferentemente das vulnerabilidades tradicionais que surgem de erros de programação, este problema resultou de código malicioso inserido intencionalmente no repositório oficial do código-fonte do PHP.
O backdoor apareceu em snapshots de desenvolvimento do PHP 8.1.0-dev durante março de 2021, depois que atacantes comprometeram com sucesso a infraestrutura Git do PHP. Os commits maliciosos se passaram por mantenedores confiáveis do PHP e introduziram um mecanismo oculto capaz de executar código PHP arbitrário sempre que um cabeçalho HTTP especialmente criado fosse recebido.
Embora o backdoor tenha existido apenas brevemente antes de ser descoberto e removido, qualquer servidor que implantasse um dos builds de desenvolvimento comprometidos ficava instantaneamente vulnerável a Execução Remota de Código (RCE) não autenticada.
Esse incidente mudou fundamentalmente o fluxo de trabalho de desenvolvimento do PHP e, em última análise, levou à migração do repositório de código-fonte do PHP para fora de sua infraestrutura Git auto-hospedada. :contentReference[oaicite:0]{index=0}
A maioria das vulnerabilidades de Execução Remota de Código se origina de:
Esta vulnerabilidade era diferente.
Não era um bug de codificação.
Era um backdoor deliberadamente plantado escondido dentro do código-fonte legítimo do PHP.
Em vez de explorar uma fraqueza existente, os atacantes modificaram o próprio PHP para executar código PHP arbitrário fornecido por qualquer pessoa que fizesse uma requisição HTTP.
Isso faz deste incidente um dos exemplos mais conhecidos de um ataque à cadeia de suprimentos de software.
Em 28 de março de 2021, dois commits suspeitos apareceram no repositório Git do PHP.
Ambos os commits pareciam ter vindo de mantenedores conhecidos do PHP.
Inicialmente, pareciam inofensivos.
As mensagens dos commits pareciam correções comuns de erros de digitação.
No entanto, pesquisadores rapidamente notaram um código suspeito adicionado ao interpretador do PHP.
O código inserido procurava, nas requisições HTTP recebidas, um cabeçalho personalizado:
User-Agentt
Observe o "t" extra.
Essa diferença sutil na grafia ajudou a esconder o backdoor durante uma revisão casual.
Se o cabeçalho começasse com a string de gatilho:
zerodium
O PHP executaria imediatamente tudo o que viesse em seguida usando:
zend_eval_string()
Isso efetivamente permitia que qualquer pessoa executasse código PHP arbitrário remotamente.
Os commits maliciosos foram removidos poucas horas após a descoberta. A investigação indicou posteriormente que os atacantes haviam comprometido a infraestrutura Git do PHP, em vez de obter legitimamente as chaves de assinatura dos mantenedores. :contentReference[oaicite:1]{index=1}
O código inserido realizava, aproximadamente, a seguinte lógica:
Incoming HTTP Request
│
▼
Read User-Agentt Header
│
▼
Does header start with "zerodium"?
│
Yes ▼
Execute remaining text as PHP
│
▼
Attacker gains Remote Code Execution
Em vez de tratar o cabeçalho como metadados inofensivos, o PHP o avaliava diretamente como código PHP executável.
Normalmente, uma requisição HTTP contém cabeçalhos semelhantes a:
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla Firefox
A versão comprometida do PHP também processava:
User-Agentt:
Se o valor começasse com:
zerodium
O PHP chamava:
zend_eval_string()
O conteúdo restante tornava-se PHP executável.
Conceitualmente:
User-Agentt:
zerodium
│
▼
zend_eval_string(payload)
│
▼
Remote Code Execution
Attacker
│
│ HTTP Request
▼
GET /
User-Agentt: zerodiumsystem("id");
│
▼
PHP 8.1.0-dev
│
▼
Backdoor Triggered
│
▼
system("id")
│
▼
Command Executed
│
▼
Output Returned
Sem autenticação.
Sem sessão.
Sem credenciais.
Uma única requisição HTTP era suficiente.
Os atacantes escolheram intencionalmente
User-Agentt
em vez de
User-Agent
porque:
Esse pequeno erro de digitação escondia um backdoor completo de execução remota de código.
Apenas:
PHP 8.1.0-dev
Especificamente os snapshots de desenvolvimento comprometidos publicados durante o incidente de março de 2021.
Versões estáveis, como:
nunca foram afetadas.
O atacante precisava apenas de:
Sem autenticação.
Sem força bruta.
Sem login.
Sem acesso prévio.
A exploração bem-sucedida permite que os atacantes:
Na prática, essa vulnerabilidade resulta em comprometimento total do servidor.
Os administradores devem investigar imediatamente sistemas que exponham:
PHP/8.1.0-dev
em cabeçalhos de resposta, como:
X-Powered-By:
PHP/8.1.0-dev
Os logs HTTP também devem ser examinados em busca de requisições suspeitas contendo:
User-Agentt
ou
zerodium
Muitos sistemas de detecção de intrusão e produtos IPS agora incluem assinaturas especificamente para esse padrão de ataque. :contentReference[oaicite:2]{index=2}
Possíveis indicadores incluem:
User-Agenttzerodium| Propriedade | Valor |
|---|---|
| Autenticação | Nenhuma |
| Interação do Usuário | Nenhuma |
| Complexidade | Muito Baixa |
| Privilégios Necessários |
Esta é considerada uma das vulnerabilidades de Execução Remota de Código mais fáceis de explorar, pois o atacante simplesmente envia uma requisição HTTP especialmente criada.
Nunca implante snapshots de desenvolvimento do PHP em sistemas de produção.
Se um servidor for encontrado executando o build comprometido:
Este incidente demonstrou várias lições importantes:
O comprometimento acelerou mudanças na infraestrutura de desenvolvimento do PHP e destacou a crescente importância da segurança da cadeia de suprimentos de software em todo o setor. :contentReference[oaicite:3]{index=3}
O Backdoor User-Agentt do PHP 8.1.0-dev continua sendo um dos exemplos mais significativos de um ataque à cadeia de suprimentos de software afetando um grande projeto de código aberto. Em vez de explorar uma falha de programação, os atacantes inseriram um backdoor oculto diretamente no código-fonte da linguagem, permitindo a execução remota não autenticada de código PHP arbitrário por meio de um cabeçalho HTTP User-Agentt especialmente criado. Embora os snapshots de desenvolvimento comprometidos tenham sido rapidamente removidos e nenhuma versão estável do PHP tenha sido afetada, o incidente ressaltou a importância crítica de proteger a infraestrutura de desenvolvimento de software, verificar a procedência do código e evitar a implantação de builds de desenvolvimento em ambientes de produção. Hoje, a vulnerabilidade é amplamente estudada como um caso marcante na segurança da cadeia de suprimentos e serve como um lembrete de que a integridade do processo de build de software é tão importante quanto a segurança do próprio código.
| Técnica | Descrição |
|---|
| T1195 | Comprometimento da Cadeia de Suprimentos |
| T1059 | Interpretador de Comandos e Scripts |
| T1505 | Componente de Software de Servidor |
| T1105 | Transferência de Ferramenta de Entrada |
| T1071 | Protocolo de Camada de Aplicação |
| T1106 | API Nativa |
| T1055 | Injeção de Processo (possível pós-exploração) |
| T1027 | Arquivos ou Informações Ofuscados |
| Nenhum |
| Remoto | Sim |