OpenAI publicou php2shell-checker, uma skill oficial do Codex que te diz se um site ou um servidor usa uma versão de PHP exposta ao PHP2Shell (CVE-2026-109618 e CVE-2026-109619) sem enviar sequer uma solicitação de exploit. Se instala no Codex com uma instrução, e o mesmo script também funciona por conta própria apenas com Node.js.
yoDEV Testado · 21 de outubro de 2026 Executamos php2shell-checker (commit 40a4746, Node.js 22.22 e PHP 8.3.6 de distribuição) contra uma instalação local de PHP, um servidor PHP local, um servidor parcialmente corrigido simulado e um site público sem PHP. Os resultados que reportamos como nossos saem desse teste.
O que é a skill php2shell-checker do Codex?
É um pequeno script de Node.js mais duas skills do Codex, que OpenAI publicou em 21 de outubro de 2026 junto com seu anúncio de Patch the Planet sobre as vulnerabilidades de PHP. OpenAI a apresenta como um verificador de versão de PHP distribuído como skill do Codex, pensado para que os operadores identifiquem versões de PHP potencialmente vulneráveis.
O repositório tem licença Apache-2.0 e não tem dependências: não é necessário npm install. Contém três peças:
skills/phpcheck-url: verifica a versão de PHP que anuncia uma URL. Inclui o script real.skills/phpcheck-server: apenas instruções, sem script. Indica ao Codex como verificar o PHP que realmente serve um site quando você tem acesso ao servidor.phpcheck.jsna raiz: um wrapper de uma linha sobre o script da skill de URL, para que você possa executá-lo sem o Codex.
O mais importante é o que não faz: nunca testa a vulnerabilidade. Lê cadeias de versão e as compara com uma tabela de versões limite.
No momento de publicar essa nota, o repositório tinha 7 commits e nenhuma release etiquetada (o script se identifica como 1.0.0), e OpenAI indica que não aceita contribuições de código externas. Mudou duas vezes no mesmo dia de sua publicação, então revise o README antes de depender de qualquer um dos comandos abaixo.
Qual versão de PHP corrige o PHP2Shell?
PHP 8.5.12, 8.4.27, 8.3.36 e 8.2.35, publicadas em 21 de outubro de 2026. São exatamente um patch acima dos limites que traz o checker (8.5.11, 8.4.26, 8.3.35 e 8.2.34), então um servidor com qualquer uma delas retorna OK.
PHP 8.1 e anteriores não recebem uma versão oficial. A equipe de segurança do PHP publicou backports mínimos em código-fonte para 7.4, 8.0 e 8.1, e as distribuições Linux e os provedores LTS receberam os patches antecipadamente. Explicamos as vulnerabilidades, as mitigações e as branches sem suporte em nosso artigo sobre PHP2Shell.
Como instalar a skill no Codex CLI?
Peça ao Codex dentro de uma sessão:
$skill-installer install both skills from https://github.com/openai/php2shell-checker
$skill-installer é a skill integrada do Codex para adicionar skills. A documentação do Codex indica que também pode baixar skills de outros repositórios, não apenas do catálogo oficial. Codex detecta automaticamente as skills recém-instaladas; se alguma não aparecer, reinicie o Codex.
Depois, invoque a que corresponda ao seu caso:
$phpcheck-server check the PHP version serving my site
$phpcheck-url check example.com
Use phpcheck-server quando você tem acesso à máquina, e phpcheck-url quando tem apenas um endereço.
Como verificar a versão de PHP de um site sem o Codex?
Clone o repositório e execute o script diretamente. Node.js é o único requisito.
git clone https://github.com/openai/php2shell-checker
cd php2shell-checker
node phpcheck.js "https://example.com"
node phpcheck.js --local
Flags úteis: --json para obter uma saída legível por máquina, --php PATH para apontar --local a um binário específico e --timeout SECONDS para hosts lentos.
Um detalhe com o qual nos deparamos: a CLI precisa de uma URL completa. Ao passar um host:porta sem esquema retornou UNKNOWN: Invalid URL. A skill de URL resolve isso para você, porque suas instruções pedem ao Codex que adicione https:// aos nomes de host sem esquema.
Que resultados obtivemos ao testá-lo?
A bateria de testes (node --test phpcheck.test.js) passou 39 de 39. Depois o executamos contra quatro objetivos:
| Objetivo | Saída | Código de saída |
|---|---|---|
--local, PHP 8.3.6 de distribuição |
VULNERABLE: PHP 8.3.6 |
1 |
Servidor local php -S com PHP 8.3.6 |
VULNERABLE: PHP 8.3.6 |
1 |
Servidor local que envia X-Powered-By: PHP/8.3.36 |
OK: PHP 8.3.36 |
0 |
| github.com (sem header de PHP) | UNKNOWN — “PHP version not found” |
3 |
Com --json, a verificação local retornou:
{"patch_status":"vulnerable","php_version":"8.3.6","reason":"PHP 8.3.6","exit_code":1}
A primeira linha é a mais instrutiva. Esse PHP 8.3.6 vem dos pacotes da distribuição, e as distribuições costumam aplicar backports de segurança sem alterar o número de versão upstream. O checker não consegue vê-lo. No nosso caso tinha razão ao alertar, porque a compilação é anterior à correção, mas com um pacote de distribuição já corrigido diria exatamente o mesmo.
O que significam OK, VULNERABLE e UNKNOWN?
Significam menos do que parecem, e o README deixa isso claro.
OK(código 0): a versão está acima do limite de sua branch. É uma comparação de versões, não uma verificação da correção. Os headers podem ser reescritos, e umOKobtido de um header escrito à mão não vale nada: é assim exatamente como obtivemos nossa linhaOK.VULNERABLE(código 1): a versão é igual ou inferior ao limite. Se você usar pacotes de distribuição, confirme com o aviso de segurança de seu provedor antes de se alarmar. No 8.1 e anteriores continuará dizendoVULNERABLEmesmo que você aplique um backport em código-fonte, porque a cadeia de versão não muda.UNKNOWN(código 3): não encontrou versão, a branch não está na tabela ou é uma compilação anterior a uma versão estável. Não significa que esteja corrigido. Qualquer site que oculteX-Powered-By, uma medida de hardening habitual, cai aqui. Também os release candidates do PHP 8.6, porque a branch 8.6 não está na tabela, embora 8.6.0 RC4 já inclua a correção.
Os argumentos inválidos retornam o código 2. Os códigos 1 e 3 são resultados, não falhas de execução: útil se você integrar em CI ou em um script de monitoramento.
Por que não basta revisar apenas a URL?
Porque só vê o que o servidor decide anunciar. O modo URL lê os headers X-Powered-By e Server, envia uma solicitação HEAD (e recorre a GET apenas se receber um 405 ou um 501), não segue redirecionamentos e não lê o corpo da página.
Isso o torna uma ferramenta rápida de triagem para uma lista de sites, não um teste. A skill phpcheck-server existe para a verificação mais robusta: indica ao Codex que comece com php -v, mas que confirme que a CLI corresponde à compilação de PHP-FPM ou Apache que realmente serve o site, e que compare a revisão completa do pacote com os avisos de PHP ou do provedor. Se não conseguir verificar a versão que serve o site, a instrução é relatar desconhecido.
Ambas as skills incluem a mesma regra: não executar testes de exploit.
Por que importa que seja uma skill do Codex?
É a primeira vez que vemos OpenAI publicar uma skill oficial do Codex como repositório independente ligado a uma resposta de segurança, em vez de incluí-la em seu catálogo de skills ou em sua documentação. A skill é o mecanismo de distribuição: uma única instrução coloca um checker revisado dentro do agente de cada usuário do Codex, com as salvaguardas (“não executar testes de exploit”) escritas na própria skill.
Para quem busca em inglês: são skills do Codex que funcionam no Codex CLI, e o padrão de instalação com $skill-installer serve da mesma forma para qualquer outro repositório de skills.
O mesmo anúncio compromete assinaturas para mantenedores de código aberto através do Codex for OSS. Não conseguimos confirmar quando esse programa se abriu, então a notícia de hoje é a skill, não a assinatura.
E você? Quantos servidores PHP você tem que revisar essa semana?
- Manualmente com php -v ou phpinfo()
- Com php2shell-checker, com ou sem Codex
- Meu hosting ou minha distribuição me avisa
- Prefiro outra opção (conte-nos qual)
Comente abaixo ou, se este artigo chegou até você por email, responda diretamente ao email: sua resposta é publicada aqui.
Relacionado: CVE-2026-109618 e CVE-2026-109619: qual versão de PHP você precisa e quando sai o patch