php2shell: o RCE crítico no PHP e como corrigir

Ilustração isométrica de painel tecnológico azul, capa do artigo sobre o php2shell no PHP

Em 21 de outubro de 2026 o PHP publicou duas correções de falha crítica. Elas permitem execução remota de código sem autenticação em qualquer aplicação que receba requisições web. As falhas ganharam o apelido php2shell e não são problema de WordPress, AlmaLinux ou painel: são do interpretador. Por isso, quem roda PHP exposto precisa atualizar o pacote e reiniciar o processo.

O que é o php2shell: as duas falhas

A CVE-2026-109618 explora o tratamento de out-of-memory. Quando um request estoura o memory_limit, o PHP aborta com longjmp e, em alguns pontos, a memória do request está só parcialmente inicializada. Assim, a limpeza de fim de request lê esse estado inválido. Além disso, multipart sem Content-Length utilizável, com headers e campos vazios em excesso, chega ao OOM sem estourar os limites declarados de upload.

A CVE-2026-109619 vive entre requests. O worker mantém estado global apontando para memória de um request já liberado. Então o request seguinte usa esse estado antes da inicialização. Os caminhos confirmados, aliás, são o backtrace de erro fatal no PHP 8.5 e o session upload progress. As duas falhas, portanto, recebem 9.2 no CVSS v4.0.

Quem está exposto

Toda instalação PHP que atende web: mod_php, PHP-FPM, php-cgi, FrankenPHP e LiteSpeed. O risco maior, contudo, é no mod_php, com exploit completo por HTTP nos limites padrão, antes de qualquer código da aplicação. No FPM a análise aponta suscetibilidade na primeira falha, sem exploit completo demonstrado. Na segunda, o caminho de session foi validado em mod_php e FPM.

Não é preciso formulário de upload: o parser multipart roda antes do script, então qualquer .php serve de entrada. Mas atualizar o CMS não fecha essa porta. O WordPress 7.1.3, por exemplo, corrigiu falhas do core. O PHP, porém, segue exposto se o pacote não for atualizado.

Como corrigir o php2shell: versões e pacotes

O PHP corrigiu nas versões 8.5.12, 8.4.27, 8.3.36 e 8.2.35. As branches 8.1 e anteriores estão fora de suporte, mas receberam backports para 7.4, 8.0 e 8.1.

No Ubuntu, os pacotes saíram para todas as releases suportadas:

sudo apt update && sudo apt upgrade apt list '?installed ?name(^php[0-9.]+$)' sudo systemctl restart apache2

Troque apache2 por php8.x-fpm em site com FPM.

No AlmaLinux e na família RHEL:

sudo dnf clean metadata && sudo dnf upgrade 'php*' sudo systemctl restart php-fpm rpm -q php-common

No AlmaLinux 8 com mod_php, reinicie o httpd. Os streams php:7.2, 7.3 e 8.0 no AlmaLinux 8 e o 8.1 no 9 saíram do ciclo. Todos, porém, receberam patch. O 7.2 ainda é o padrão no AlmaLinux 8. No Remi não havia atualização no dia do anúncio, então o PHP recomenda pacote da distro ou build da fonte.

Em contêiner e painel, a versão vem da imagem: rebuild resolve.

Se não der para atualizar agora

Só a atualização é mitigação completa do php2shell, mas algumas configurações fecham caminhos conhecidos.

  • memory_limit=-1 por php_admin_value no pool do FPM ou no Apache, sem nenhum pool repor limite finito. – post_max_size=8M sem upload e 32M com upload, com upload_max_filesize menor. – session.upload_progress.enabled=0 e, no PHP 8.5, fatal_error_backtraces=0, com reinício de todos os workers. Para isso, use php.ini ou pool, nunca ini_set(). – Bloquear multipart no proxy quando a aplicação não usa upload, e não usar RLIMIT_AS nem RLIMIT_DATA, que levam ao caminho vulnerável.

O ISPConfig publicou um guard para nginx e Apache que barra multipart antes do PHP. Serve como emergência, com o custo de derrubar upload nos sites bloqueados.

Como confirmar

Em distro com backport, php -v mostra o número antigo. Por isso, confira pelo pacote: rpm -q php-common no AlmaLinux, dpkg -l | grep php no Ubuntu e Debian. Depois, reinicie o serviço e confirme os workers novos.

Conclusão

O php2shell é falha de infraestrutura, não de CMS, e dispensa autenticação. Atualize o pacote, reinicie o worker e confirme a versão no gerenciador, não no php -v. Mitigação de configuração compra tempo até o patch entrar.

Fonte: https://www.php.net/archive/2026.php#2026-10-21-5

Andre Luiz Bellafronte

André Bellafronte é desenvolvedor de softwares, empresário e publicador de conteúdos nas horas vagas. Acredita que o conhecimento deva ser compartilhado livremente.

Você pode gostar...