Em resumo: a CVE-2026-115560 é um aviso que o php.net publicou a 23 de outubro de 2026. A execução remota de código só é possível, segundo ele, numa configuração de sessão invulgar. Até à próxima versão regular de correção de erros, a solução é: definir session.upload_progress.enabled=0 no servidor e reiniciar todos os workers.
O que é a CVE-2026-115560?
Dois dias depois dos patches para as vulnerabilidades PHP2Shell CVE-2026-109618 e CVE-2026-109619, o projeto PHP publicou mais um aviso. A CVE-2026-115560 diz respeito ao tratamento de sessões do PHP em ligação com a função session upload progress, que guarda na sessão o progresso dos uploads de ficheiros em curso.
Segundo o php.net, é possível a execução remota de código malicioso, mas apenas numa configuração invulgar. O aviso completo (advisory), com todos os pormenores, deverá seguir-se com a próxima versão regular de correção de erros. Até lá, o conhecimento disponível é deliberadamente escasso.
O que faz o session upload progress?
O session upload progress é uma função de conveniência do PHP. Quando um visitante envia um ficheiro maior, o PHP escreve na sessão, durante o upload, indicações contínuas sobre o progresso: quantos dados já chegaram e que ficheiro está a ser transferido. Uma aplicação pode consultar essas indicações em paralelo e construir com elas uma barra de progresso.
Na prática, poucas aplicações a usam, porque os formulários de upload modernos medem o progresso normalmente diretamente no navegador. No PHP, porém, a função está ativada por predefinição. Por isso aparece tanto na CVE-2026-115560 como nas medidas provisórias contra o PHP2Shell: o que não é necessário deve estar desligado.
Quando é que um servidor está afetado pela CVE-2026-115560?
Segundo o aviso do php.net, têm de se verificar em conjunto três condições:
- Na configuração, o
session.serialize_handlertem o valorphp_binaryouphp_serialize. - A aplicação altera este valor em tempo de execução, com
ini_set(), paraphp, antes de chamarsession_start(). - O session upload progress está ativo.
O valor predefinido do session.serialize_handler é php. Uma alteração na configuração e uma reposição no código é invulgar, mas ocorre em desenvolvimentos próprios antigos ou em bibliotecas com tratamento próprio de sessões. Se isso se aplica no seu caso, pode ser verificado.
Como verificar a sua configuração
Primeiro, os valores efetivos. A CLI pode ler um php.ini diferente do PHP-FPM ou do mod_php; verifique por isso também a configuração do servidor web ou do pool FPM.
php -i | grep -E "session.serialize_handler|session.upload_progress.enabled"
grep -rn "serialize_handler\|upload_progress" /etc/php/ 2>/dev/null # o caminho varia conforme a distribuição
Depois, o código da aplicação. A pesquisa seguinte é apenas de leitura e mostra os locais onde o handler é definido em tempo de execução:
grep -rn "session.serialize_handler" /var/www/ --include="*.php"
Se a pesquisa não encontrar nada e o handler estiver em php na configuração, a combinação descrita é improvável. Mesmo assim, deve desativar o session upload progress, pois o php.net indica a mesma definição também como medida provisória contra o PHP2Shell.
Solução: session.upload_progress.enabled=0
Defina o valor no php.ini, no pool FPM ou na configuração do servidor. Segundo o php.net, expressamente não através de ini_set() ou .user.ini, pois aí atua tarde demais ou pode ser sobreposto pela aplicação.
; php.ini (para todos os pools e SAPIs que leem este ficheiro)
session.upload_progress.enabled = 0
; ou no pool FPM
php_admin_flag[session.upload_progress.enabled] = off
# Apache com mod_php, no VirtualHost ou na configuração do servidor
php_admin_flag session.upload_progress.enabled off
Depois, reinicie todos os workers do PHP, por exemplo systemctl restart php8.3-fpm ou o Apache, no caso do mod_php. Os nomes de pacotes e de serviços variam conforme a distribuição. Sem reinício, a definição antiga continua a vigorar. Mais informação em Reiniciar o PHP-FPM e todos os workers.
Depois do reinício, verifique se a definição realmente produz efeito: no contexto web, e não apenas na linha de comandos. Uma página phpinfo criada por pouco tempo e protegida contra acesso mostra o valor efetivo; apague-a logo a seguir.
Enquadramento em relação ao PHP2Shell
A CVE-2026-115560 é claramente mais restrita do que as duas vulnerabilidades do PHP2Shell, que atuam nos modos de operação habituais sem configuração especial. Quem tem de priorizar agora deve primeiro instalar a atualização do PHP2Shell e depois definir session.upload_progress.enabled=0. As duas coisas são exequíveis numa só janela de manutenção.
Para a administração e para quem não é técnico: a CVE-2026-115560 não é motivo de inquietação, mas é um ponto da lista. A definição é rapidamente aplicada, quase não tem efeitos percetíveis em nenhuma aplicação e cobre, ao mesmo tempo, uma das medidas provisórias contra o PHP2Shell. As restantes medidas provisórias do php.net constam de Medidas imediatas quando ainda não pode aplicar o patch, as indicações gerais sobre a configuração de sessões em Proteger as sessões em PHP.
O que ainda não sabemos: que versões do PHP estão exatamente afetadas e que versão traz a correção. Atualizamos esta página assim que o aviso (advisory) for publicado.
Como ajuda concretamente a PHP SOS?
No âmbito do hardening de servidor, aplicamos a solução de forma duradoura e verificável:
- Ler a configuração: valores de sessão efetivos por SAPI, pool e host virtual.
- Pesquisar o código: locais onde o handler ou as opções de sessão são alterados em tempo de execução.
- Desativar no sítio certo: no php.ini, no pool ou na configuração do servidor, sem poder ser sobreposto pela aplicação, com reinício a seguir.
- Acompanhar: quando a versão de correção de erros sair, instalamo-la e documentamos o estado.
Perguntas frequentes
A CVE-2026-115560 faz parte do PHP2Shell?
O aviso surgiu dois dias depois dos patches do PHP2Shell e diz também respeito ao próprio PHP. Mas é uma vulnerabilidade distinta, com número CVE próprio, e só atua numa configuração específica e invulgar. As atualizações do PHP2Shell de 21 de outubro não a corrigem, segundo o estado atual.
Já existe uma atualização contra a CVE-2026-115560?
Segundo o estado de 25/10/2026, não. O php.net anuncia que o aviso completo (advisory) se seguirá com a próxima versão regular de correção de erros. Até lá, session.upload_progress.enabled=0 é a solução recomendada.
O que deixa de funcionar se eu desativar o session upload progress?
A função comunica à aplicação o progresso dos uploads de ficheiros em curso. Só as aplicações que implementam uma barra de progresso deste tipo através desta função do PHP perdem a indicação. O upload em si continua a funcionar.