PHP CVE-2026-115560: A Verdade Sobre o Novo Alerta de RCE e Mitigação
A vulnerabilidade CVE-2026-115560 é um aviso de segurança emitido pela equipa do PHP dois dias após as correções de emergência do exploit PHP2Shell (CVE-2026-109618 e CVE-2026-109619). O vetor envolve a funcionalidade session.upload_progress combinada com a troca dinâmica do manipulador de serialização (session.serialize_handler) antes de session_start(). Plataformas padrão como WordPress e Laravel não executam essa troca e não estão vulneráveis por omissão. Como medida preventiva universal para qualquer servidor Linux, deves desativar a funcionalidade definindo session.upload_progress.enabled = 0 no php.ini até que a correção de rotina seja lançada.
Se acompanhas canais de inteligência de cibersegurança e redes de administradores de sistemas (como o cybersecurity_outlook), viste disparar um novo alarme generalizado: “Dois dias após o PHP2Shell, foi descoberto outro 0-day de RCE não corrigido no núcleo do PHP!”.
Quando surge uma manchete destas, a reação imediata de muitas equipas de engenharia divide-se entre o pânico desnecessário e a paralisia operacional. No entanto, em administração de infraestruturas críticas, a nossa obrigação é separar o ruído mediático dos factos técnicos verificados.
Este alerta complementa diretamente a estratégia de resposta a incidentes do nosso Alerta CISA, NSA e FBI: Blindagem PHP, Node e Portas Expostas e o manual de Mitigação PHP2Shell em Painéis de Controlo.
No Webxtek Studio, onde gerimos operações para empresas de cibersegurança e pen-test e plataformas de SaaS empresarial B2B, auditámos o comportamento deste vetor no código-fonte do interpretador PHP. Abaixo explico com rigor o que acontece no motor de sessões, quem está realmente em perigo e como neutralizar a superfície de ataque em 60 segundos.
1. A Anatomia do CVE-2026-115560: O Desfasamento de Serialização de Sessão
Para compreenderes este vetor sem alarmismos, tens de olhar para a forma como o PHP processa carregamentos de ficheiros em segundo plano.
Desde a versão 5.4, o PHP inclui nativamente a diretiva session.upload_progress.enabled = 1 (ativa por omissão). Quando um cliente envia um pedido HTTP POST multipart contendo um campo oculto com o nome PHP_SESSION_UPLOAD_PROGRESS, o motor interno do PHP interceta os bytes do upload antes de qualquer código da tua aplicação começar a correr.
Para permitir que o frontend consulte o progresso da transferência, o interpretador escreve dados de telemetria diretamente na superglobal $_SESSION:
Fluxo Normal de Upload Progress:
1. Cliente envia POST multipart/form-data com chave PHP_SESSION_UPLOAD_PROGRESS.
2. SAPI/FastCGI interceta o fluxo antes do script do utilizador.
3. PHP inicializa a sessao e escreve $_SESSION["upload_progress_" . $id].
4. Os dados sao serializados em disco ou Redis conforme session.serialize_handler.
O problema reside no mecanismo de serialização interna do PHP quando ocorrem três condições em simultâneo:
- Configuração Base: O ficheiro
php.iniou a configuração global do servidor define o manipulador de serialização comophp_binaryouphp_serialize. - Troca Dinâmica em Runtime: A aplicação executa
ini_set('session.serialize_handler', 'php')em tempo de execução antes da invocação desession_start(). - Funcionalidade Ativa: A diretiva
session.upload_progress.enabledpermanece ligada.
Neste cenário específico, o PHP grava o registo de progresso de upload com um formato de codificação e tenta posteriormente desserializar os dados da sessão com um analisador sintático diferente. Esta discrepância de formato cria uma desserialização assimétrica: um atacante consegue manipular o prefixo de dados da sessão e injetar objetos serializados forjados (POP Gadgets), alcançando execução remota de código no processo do servidor.
2. Pânico das Redes Sociais vs. Realidade Operacional: Quem Está em Risco?
A classificação de uma falha de segurança como “RCE não corrigida” gera sempre alarme imediato. Contudo, importa analisar porque é que a equipa do PHP não lançou uma versão de emergência:
Comparacao de Gravidade Operacional:
Vetor: PHP2Shell (CVE-2026-109618 / 109619)
- Gravidade: CVSS 9.2 (Critico Universal)
- Condicao: Qualquer servidor com PHP unpatched a receber POST multipart
- Impacto: Exploracao remota sem autenticacao em qualquer WordPress/Laravel
- Acao do PHP: Release de emergencia fora de ciclo (8.2.35, 8.3.36, 8.4.27)
Vetor: CVE-2026-115560
- Gravidade: Aviso Informativo (Configuracao Especifica)
- Condicao: Requer troca de session.serialize_handler via ini_set() antes de session_start()
- Impacto: Restrito a aplicacoes que forcam alternancia de serializadores em runtime
- Acao do PHP: Resolucao agendada no ciclo regular de bugfix mensal
O Teu CMS Está Vulnerável?
- WordPress e WooCommerce: Não estão vulneráveis por omissão. O WordPress não utiliza a funcionalidade de upload progress do PHP para a sua biblioteca de media e não altera os serializadores de sessão nativos.
- Laravel e Symfony: Não estão vulneráveis por omissão. As frameworks modernas utilizam manipuladores de sessão próprios (geralmente geridos em base de dados, Redis ou cookies encriptados) em vez do mecanismo padrão do PHP em ficheiros de texto.
- Aplicações Proprietárias e Código Legado: Se geres plataformas desenvolvidas à medida que dependem de bibliotecas antigas de upload de ficheiros, ou sistemas que alternam entre formatos binários de sessão, a exposição é real e exige intervenção imediata.
3. Mitigação Imediata no Terminal: Como Proteger o Teu Servidor em 60 Segundos
A recomendação oficial da equipa do PHP consiste em desativar o progresso de upload de sessões. Esta funcionalidade é quase obsoleta em 2026, uma vez que a grande maioria dos websites e APIs utiliza carregamentos assíncronos diretos (como S3 presigned URLs ou WebSockets) sem depender da superglobal de sessão do servidor.
Passo 1: Verificar o Estado Atual no Teu Servidor
Executa no terminal para identificar se a funcionalidade está ativa:
php -i | grep -E "session\.upload_progress\.(enabled|name)"
Se o comando devolver session.upload_progress.enabled => On => On, o teu ambiente está com a funcionalidade ligada.
Passo 2: Desativar no Debian, Ubuntu ou Servidores Bare-Metal
Para servidores com PHP-FPM em Debian ou Ubuntu (substitui a versão conforme o teu PHP ativo):
# Desativar em todas as versoes instaladas do PHP-FPM
for ini in /etc/php/*/fpm/php.ini; do
if [ -f "$ini" ]; then
echo "A ajustar $ini..."
sudo sed -i 's/^session.upload_progress.enabled = .*/session.upload_progress.enabled = 0/' "$ini"
if ! grep -q "^session.upload_progress.enabled = 0" "$ini"; then
echo "session.upload_progress.enabled = 0" | sudo tee -a "$ini"
fi
fi
done
# Reiniciar os servicos PHP-FPM para aplicar a alteracao
sudo systemctl reload "php*-fpm" || sudo systemctl restart "php*-fpm"
Passo 3: Desativar no HestiaCP, Plesk ou cPanel
Se geres múltiplos clientes através de painéis de controlo de alojamento:
- HestiaCP:
Podes forçar a desativação diretamente nos modelos de pool em
/etc/php/8.3/fpm/pool.d/ou adicionar a diretiva de bloqueio:echo "php_admin_value[session.upload_progress.enabled] = 0" | sudo tee -a /etc/php/*/fpm/pool.d/*.conf sudo systemctl reload "php*-fpm" - cPanel com EasyApache 4:
Edita o ficheiro global
/opt/cpanel/ea-php*/root/etc/php.iniou adiciona uma diretiva local via WHM MultiPHP INI Editor definindosession.upload_progress.enabled = Off, seguido de:/scripts/restartsrv_apache_php_fpm - Plesk:
for ini in /opt/plesk/php/*/etc/php.ini; do sed -i 's/^session.upload_progress.enabled = .*/session.upload_progress.enabled = 0/' "$ini" done systemctl reload "plesk-php*-fpm"
Passo 4: Contentores Docker em Produção
Se publicas aplicações PHP em Docker, adiciona um ficheiro de configuração dedicado no teu Dockerfile para garantir que a imagem nasce protegida:
# Blindagem contra CVE-2026-115560 e PHP2Shell
RUN echo "session.upload_progress.enabled = 0" > /usr/local/etc/php/conf.d/security-hardening.ini \
&& echo "session.upload_progress.cleanup = 1" >> /usr/local/etc/php/conf.d/security-hardening.ini
4. Conclusão: A Importância da Blindagem Perimetral em Profundidade
O aparecimento do CVE-2026-115560 logo após o terramoto do PHP2Shell demonstra uma regra básica de engenharia de segurança: quando uma funcionalidade central antiga do PHP é dissecada por investigadores e atacantes, todos os mecanismos periféricos adjacentes (gestão de memória, sessões, temporários) começam a ser auditados à lupa.
A melhor defesa contra vulnerabilidades no interpretador nunca é esperar pelo próximo patch de emergência; é reduzir ativamente a superfície de ataque:
- Atualiza os Binários: Mantém as versões estáveis do PHP compiladas e corrigidas (8.2.35+, 8.3.36+, 8.4.27+).
- Elimina Funcionalidades Obsoletas: Desativa
session.upload_progress.enabled = 0em todos os nós. - Tranca o Perímetro: Conforme demonstrámos no nosso artigo sobre o fecho de portas e painéis de controlo, portas de gestão expostas (cPanel 2083, Plesk 8443, HestiaCP 8083) devem ser bloqueadas com
nftablese acessíveis apenas via WireGuard. - Isola os Processos: Utiliza sockets UNIX protegidos com permissões restritas e jaulas
chrootpara programadores, tal como documentámos no nosso guia de Isolamento SSH com Jailkit no HestiaCP.
Com estas medidas aplicadas, o teu servidor deixa de estar à mercê de ondas de exploração automatizada e opera com a resiliência exigida em ambientes de produção.
[+] [ INDEX_DIRECTORY ] 17 tópicos ▼
- 1. A Anatomia do CVE-2026-115560: O Desfasamento de Serialização de Sessão
- 2. Pânico das Redes Sociais vs. Realidade Operacional: Quem Está em Risco?
- O Teu CMS Está Vulnerável?
- 3. Mitigação Imediata no Terminal: Como Proteger o Teu Servidor em 60 Segundos
- Passo 1: Verificar o Estado Atual no Teu Servidor
- Passo 2: Desativar no Debian, Ubuntu ou Servidores Bare-Metal
- Passo 3: Desativar no HestiaCP, Plesk ou cPanel
- Passo 4: Contentores Docker em Produção
- 4. Conclusão: A Importância da Blindagem Perimetral em Profundidade
- Autor
- Perguntas Frequentes
- O que é a vulnerabilidade CVE-2026-115560 no PHP?
- O meu site WordPress ou aplicação Laravel está vulnerável ao CVE-2026-115560 por omissão?
- Porque é que a equipa do PHP não lançou uma versão de emergência fora de calendário como no PHP2Shell?
- Qual é a medida de mitigação temporária recomendada antes da atualização oficial?
- Nós Relacionados
- Sequência do Caminho
Perguntas Frequentes
O que é a vulnerabilidade CVE-2026-115560 no PHP?
É um aviso de segurança emitido pela equipa oficial do PHP relativo a um vetor de execução remota de código (RCE) na funcionalidade session.upload_progress. O problema ocorre quando uma aplicação define o manipulador de serialização para php_binary ou php_serialize e depois altera dinamicamente essa opção para php através de ini_set() antes de chamar session_start().
O meu site WordPress ou aplicação Laravel está vulnerável ao CVE-2026-115560 por omissão?
Não. As principais frameworks e CMS de mercado (WordPress, Laravel, Symfony, Drupal e Magento) não alteram dinamicamente o session.serialize_handler em tempo de execução antes do session_start(). O risco afeta sobretudo aplicações proprietárias antigas, código legado com gestores de sessão customizados ou bibliotecas que forçam alternância de serializadores.
Porque é que a equipa do PHP não lançou uma versão de emergência fora de calendário como no PHP2Shell?
Porque a combinação de configurações e comportamentos em runtime necessária para explorar o CVE-2026-115560 é invulgar na maioria das aplicações em produção. A equipa de segurança do PHP avaliou o risco prático como reduzido para a maioria dos utilizadores e optou por integrar a correção definitiva no ciclo regular de manutenção mensal.
Qual é a medida de mitigação temporária recomendada antes da atualização oficial?
Basta desativar o progresso de upload de sessão definindo session.upload_progress.enabled = 0 no teu php.ini ou nas configurações de pool do PHP-FPM. Se já aplicaste a mitigação completa do PHP2Shell recomendada pelo Webxtek Studio, esta opção já está desativada no teu servidor e estás totalmente protegido.
[ RELATED_NODES ]
> INICIAR_PROJETO
Precisa de um website que transmita confiança, apareça na pesquisa e dê mais força à sua presença digital? Comece a conversa aqui.