Vulnerabilidade do PHP: patch do PHP2Shell e como verificar a versão do PHP (WordPress)

Aviso de afiliados v3.1
Aviso de afiliados v3.2 (somente celular)
Ambiente de teste Família RHELAlmaLinux 9.8PHP 8.3 · WordPress 7.1.3Verificado em 2026-10-22

PHP2Shell é o nome de duas vulnerabilidades do PHP (CVE-2026-109618 · CVE-2026-109619) cujos patches foram publicados em 21 de outubro de 2026. São falhas de execução remota de código que permitem executar código no servidor mesmo com uma requisição sem login, então o primeiro passo é verificar qual versão do PHP o seu site usa e atualizá-la para uma versão corrigida. Em um servidor Nginx + Apache com WordPress 7.1.3, verifiquei a versão do PHP no Diagnóstico, atualizei só os pacotes php para a versão corrigida e depois verifiquei de novo.

1️⃣ A vulnerabilidade do PHP PHP2Shell: como as falhas funcionam e quem é afetado

As falhas ficam dentro do motor do PHP, que lê a requisição antes de qualquer código do WordPress ser executado, então continuam lá mesmo que você mantenha plugins e temas atualizados, enquanto o PHP não for atualizado. Segundo o alerta do CERT-EU, as duas têm pontuação CVSS 9,2; os detalhes técnicos foram divulgados e estão em discussão, e um código inicial de prova de conceito já começou a circular.

A CVE-2026-109618 é uma falha em que, quando uma requisição ultrapassa o limite de memória (memory_limit) e é interrompida, o processo de limpeza trata como válidos dados da requisição inicializados só pela metade. A CVE-2026-109619 é uma falha em que o estado da memória liberada após um erro fatal permanece e é reutilizado antes da inicialização na próxima requisição tratada pelo mesmo worker.

Segundo o anúncio do php.net, todas as instalações do PHP que processam requisições web são afetadas, e o Apache mod_php é considerado a configuração mais perigosa. Isso porque no mod_php foi demonstrado que uma única requisição sem login dispara o ataque antes de o código da aplicação ser executado.

Modo de execução do PHPImpactoObservações
Apache mod_php🔴 Afetado · o mais perigosoDemonstração em que uma única requisição sem login disparou o ataque antes de o código da aplicação ser executado
PHP-FPM🔴 Afetado—
php-cgi🔴 Afetado—
FrankenPHP🔴 Afetado—
LiteSpeed🔴 Afetado—

As versões corrigidas são 8.2.35, 8.3.36, 8.4.27 e 8.5.12, e todas as versões anteriores das séries 8.2 a 8.5 são afetadas. O PHP 8.1 e anteriores são séries que o projeto PHP não suporta mais, por isso não há versão corrigida oficial; elas são cobertas por correções que distribuições e empresas de hospedagem trazem para essas versões (backports).

Quando a CISA publicou o alerta em 21 de outubro, ainda não havia exploração real confirmada, mas a CISA considerou perigoso deixar os sistemas sem patch e recomendou aplicar o patch imediatamente, começando pelos sistemas expostos à internet. No mesmo dia, em seu alerta, o CERT-EU concluiu que, com o código de prova de conceito começando a circular, ficou mais provável que atacantes já estejam explorando as falhas.

2️⃣ Verificar a versão do PHP: Diagnóstico › Informação › Servidor

Mesmo conhecendo as falhas, não dá para saber o que fazer sem saber com qual versão do PHP o seu site funciona. No painel de administração, abra [Ferramentas › Diagnóstico] e expanda a seção [Servidor] da aba [Informação]: a linha [Versão do PHP] mostra a versão do PHP que realmente processa as requisições do seu site.

Tela da aba Informação do Diagnóstico: menu à esquerda Ferramentas › Diagnóstico e as linhas Arquitetura do servidor, Servidor web, Versão do PHP e PHP SAPI da seção Servidor — a versão do PHP é a referência para verificar o patch da vulnerabilidade do PHP PHP2Shell (WordPress 7.1.3)

A linha [PHP SAPI], logo abaixo de [Versão do PHP], mostra o modo de execução do PHP; fpm-fcgi indica uma configuração PHP-FPM. Aqui basta olhar as duas linhas [Versão do PHP] e [PHP SAPI] da seção [Servidor].

🧩 Fluxo do ataque PHP2Shell
Diagrama explicativo
①Requisição sem loginUma requisição web que qualquer pessoa pode enviar
②Requisição especialmente forjadaO PHP lê antes do código do WordPress
③Falhas do PHPMemória esgotada → dados construídos pela metade são usados como estãoCVE-2026-109618A próxima requisição usa o estado de uma requisição já encerradaCVE-2026-109619
④Execução de código no servidorTomada do site
✅ As versões corrigidas bloqueiam este fluxo8.2.35 · 8.3.36 · 8.4.27 · 8.5.12

O ataque começa com uma requisição sem login. Na etapa em que o PHP lê a requisição especialmente forjada antes do código do WordPress, ela aciona uma das duas falhas e leva à execução de código no servidor. As versões corrigidas bloqueiam esse fluxo, então o que há a fazer é levar o PHP do site a uma versão corrigida ou mais recente.

O [php -v] no terminal mostra só a versão do PHP padrão da linha de comando. Em configurações com várias versões do PHP no mesmo servidor, como o EA-PHP do cPanel ou o alt-php do CloudLinux, ela pode ser diferente da versão que o seu site usa. Por isso a referência é o valor [Versão do PHP] no Diagnóstico.

php -v
PHP 8.3.xx (cli) (built: Jun  3 2025 17:17:57) (NTS gcc x86_64)

3️⃣ Abaixo do PHP 8.2: confirme com a hospedagem se há um backport e, se não houver, solicite

Se a [Versão do PHP] no Diagnóstico for inferior a 8.2 (7.x, 8.0 ou 8.1), não há versão corrigida oficial do php.net. Pela tabela de versões suportadas do php.net (verificada em 22 de outubro de 2026), só quatro séries têm suporte, 8.2, 8.3, 8.4 e 8.5, e as versões oficiais 8.1 e anteriores não recebem patches de segurança.

Em vez disso, distribuições e empresas de hospedagem às vezes publicam pacotes que mantêm o número da versão e só incorporam a correção (backports). Os pacotes 7.4.33, 8.0.30 e 8.1.34 de um servidor de teste de uma hospedagem gerenciada são um exemplo. O changelog deles tinha a linha [Backported from 8.2.35 — CVE-2026-109618, CVE-2026-109619].

Mesmo com o número de versão igual, para saber se a correção está incluída procure o número do CVE no changelog do pacote. No Debian e no Ubuntu, a busca é algo como [zcat /usr/share/doc/php8.2-cli/changelog.Debian.gz | grep 109618]. Em sistemas RPM, a forma é [rpm -q --changelog php-common | grep 109618]; ajuste o número da versão no nome do pacote à versão que o seu site usa.

Por isso, se você estiver abaixo do 8.2, primeiro pergunte à sua empresa de hospedagem se o backport foi aplicado e, se não foi ou se não for possível confirmar, peça a atualização para uma versão suportada (8.2 ou superior). Depois da atualização, verifique de novo o valor [Versão do PHP] no Diagnóstico.

A CISA recomendou que organizações que usam 8.1 ou anterior e não conseguem atualizar logo mantenham seus sistemas baseados em PHP offline até aplicar o patch ou fazer o upgrade.

Se você administra o próprio servidor e usa 8.1 ou anterior, pode instalar os pacotes com backport da sua distribuição ou aplicar os patches de código-fonte para 7.4, 8.0 e 8.1 publicados pela equipe de segurança do PHP. Mesmo assim, são séries sem suporte, então a solução de verdade é passar para uma versão suportada.

4️⃣ PHP 8.2 ou superior: atualize para a versão corrigida e verifique de novo

Se você está no 8.2 ou superior, mas abaixo da versão corrigida, atualize o próprio PHP. Na hospedagem gerenciada e compartilhada, a empresa aplica o patch no servidor inteiro, então confirme pelos avisos dela ou pelo suporte se ele já foi aplicado e qual build está rodando, e veja se a [Versão do PHP] no Diagnóstico mudou. Segundo a página de status, a Cloudways começou a aplicar o patch em todas as versões do PHP que suporta (5.6 a 8.4) em 21 de outubro, às 22:19 UTC. Em 22 de outubro, às 10:11 UTC, anunciou a conclusão.

Em um servidor que você mesmo administra, atualize com os pacotes do repositório da distribuição ou de um fornecedor LTS, como indica o anúncio do php.net. Antes de atualizar, confira numa prévia a lista de pacotes que vão mudar para garantir que só os pacotes que começam com php sejam atualizados e que nenhum outro venha junto, e não misture com outras atualizações do sistema operacional.

dnf upgrade --assumeno 'php*'
Dependencies resolved.
================================================================================
 Package       Architecture  Version         Repository  Size
================================================================================
Upgrading:
 php           x86_64  8.3.xx-1.…        …       1.9 M
 php-cli       x86_64  8.3.xx-1.…        …       5.6 M
 php-common    x86_64  8.3.xx-1.…        …       1.3 M
 php-fpm       x86_64  8.3.xx-1.…        …       1.9 M
 (linhas de pacotes de extensão como php-gd · php-intl omitidas)

Transaction Summary
================================================================================
Upgrade  xx Packages
dnf upgrade 'php*'
Upgraded:
  php-8.3.xx-1.….x86_64
  php-cli-8.3.xx-1.….x86_64
  php-common-8.3.xx-1.….x86_64
  php-fpm-8.3.xx-1.….x86_64
  (linhas de pacotes de extensão omitidas)

Complete!

Neste teste, só os pacotes que começam com php foram atualizados para a versão corrigida, e o php-fpm reiniciou sozinho quando a instalação dos pacotes terminou. A versão corrigida só passa a valer quando os workers do php-fpm reiniciam, então, em ambientes sem reinício automático, execute você mesmo [systemctl restart php-fpm].

Depois da atualização, confira se [php -v] e a linha [Versão do PHP] da aba [Informação] do Diagnóstico mostram a versão corrigida ou mais recente, e verifique também o status do serviço php-fpm e a resposta do site. Se só o valor da linha de comando mudou e a [Versão do PHP] continua igual, reinicie o php-fpm e verifique de novo.

Tela da aba Informação do Diagnóstico: depois da atualização, nova verificação de que a linha Versão do PHP da seção Servidor está na versão corrigida ou mais recente — menu à esquerda Ferramentas › Diagnóstico e as linhas Versão do PHP e PHP SAPI da seção Servidor (WordPress 7.1.3)

Depois da atualização, abra de novo a seção [Servidor] na aba [Informação] da mesma tela [Ferramentas › Diagnóstico] e veja a linha [Versão do PHP]. Se o valor mudou para a versão que você instalou, os workers do php-fpm também já estão rodando na nova versão.

php -v
PHP 8.3.xx (cli) (built: Oct 19 2026 14:00:34) (NTS gcc x86_64)
systemctl is-active php-fpm
active
curl -s -o /dev/null -w '%{http_code}\n' 'https://example.com/?r=1'
200

Em pacotes cujo número de versão sobe, o patch se confirma pelo novo número de versão; em pacotes com backport que mantêm o número, pelo número do CVE no changelog. Este servidor era do primeiro tipo: o [rpm -q --changelog php-common] não tinha nenhuma linha com o número do CVE, e confirmei pelo novo número de versão na primeira linha do changelog.

5️⃣ Quando não dá para atualizar já: as medidas temporárias indicadas pelo php.net

Para servidores que não podem ser atualizados já, o php.net indica as configurações abaixo como medidas temporárias, mas deixa claro que elas só reduzem caminhos de ataque específicos e não tornam a instalação segura. Também orienta a não limitar a memória com RLIMIT_AS ou RLIMIT_DATA no lugar disso, porque isso pode justamente provocar as falhas de alocação vulneráveis.

ConfiguraçõesValorOndeO que bloqueia
memory_limit-1php_admin_value no pool do FPM ou na configuração do Apache (para que a aplicação não consiga reverter)CVE-2026-109618 · caminho de falha do limite de memória (incompleto)
post_max_size8M (32M se precisar de uploads) · upload_max_filesize menor que issophp.ini · configuração do poolCVE-2026-109618
session.upload_progress.enabled0 + reiniciar todos os workersphp.ini · pool do FPM · configuração do servidor (não via ini_set() nem .user.ini)CVE-2026-109619 · só o caminho de sessão confirmado
fatal_error_backtraces0 + reiniciar todos os workers (só PHP 8.5)Igual ao de cimaCVE-2026-109619 · só o caminho de backtrace confirmado

O php_admin_value é uma configuração do lado do servidor que a aplicação não consegue reverter, então quem usa hospedagem compartilhada muitas vezes não pode mudá-lo por conta própria e, também nesse caso, acaba tendo de pedir à empresa de hospedagem. O php.net recomenda ainda impor limites, também no servidor web ou no proxy, ao tamanho do corpo da requisição, ao número de campos de entrada, ao número de partes multipart, ao número de cabeçalhos e à profundidade de aninhamento.

🔢 FAQ & conteúdo recomendado

As atualizações automáticas do WordPress só cobrem o núcleo, os plugins, os temas e as traduções; o PHP é um programa instalado no servidor, então quem o atualiza é o administrador do servidor ou a empresa de hospedagem. As atualizações automáticas do núcleo, dos plugins e dos temas são ativadas na tela Atualizações do WordPress e nas telas de plugins e temas, respectivamente, e em nenhuma delas aparece a versão do PHP.

Todos os detalhes técnicos estão nos dois avisos de segurança do GitHub que o anúncio do php.net liga ao lado dos números de CVE. A CVE-2026-109618 é o GHSA-w8hw-w9fx-j79w, e a CVE-2026-109619 é o GHSA-6wmf-4rv5-p3rp. O alerta do CERT-EU também cita esses dois avisos como referência, e os detalhes para reproduzir o ataque não estão neste artigo.

A CISA orienta a monitorar se processos worker do PHP abrem shells ou baixam ferramentas. Também diz que, até aplicar o patch, um firewall de aplicação web pode oferecer alguma proteção. Como o PHP muitas vezes vem embutido em outros softwares e passa despercebido, a CISA recomendou começar fazendo uma lista dos sistemas em que o PHP roda.

ℹ️ Aviso de afiliados
O conteúdo deste site contém links de afiliados. Quando um visitante compra um produto ou serviço por meio de um desses links, o site recebe uma comissão do vendedor. O valor que o comprador paga (em promoções, ele diminui ↓) não aumenta por causa disso. Preços, descontos e informações de estoque valem para o momento em que o texto foi escrito e podem ter mudado, por isso confirme com o vendedor antes de comprar. Os produtos são escolhidos e avaliados por critérios próprios, e o recebimento de comissão não influencia a ordem de apresentação nem o conteúdo das avaliações.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Demonstre sua humanidade: 7   +   1   =