DEV Community

Cover image for PHP2Shell e o resto: o que quebrou no runtime e o que fazer agora
Alex Pimenta
Alex Pimenta

Posted on

PHP2Shell e o resto: o que quebrou no runtime e o que fazer agora

Em 21 de outubro de 2026 o PHP publicou patches de emergência para duas falhas críticas no próprio interpretador: CVE-2026-109618 e CVE-2026-109619, batizadas pela comunidade de PHP2Shell. CVSS 9.2 cada uma. O ponto que muda o jogo: o ataque não depende do seu código. Em vários cenários (especialmente Apache com mod_php), a requisição maliciosa é processada antes de qualquer linha da aplicação rodar. Login, middleware e validação de input não entram no caminho.

CVE-2026-109618 é corrupção ligada a out-of-memory. O PHP usa longjmp() para abortar quando estoura o memory_limit. Se isso acontece no meio da montagem interna da requisição (por exemplo no parse de multipart/form-data), a limpeza posterior trata dados pela metade como válidos. Resultado: use-after-free e, nas condições certas, execução remota de código sem autenticação. A CVE-2026-109619 é estado global obsoleto: ponteiros de uma requisição sobrevivem depois que a memória foi liberada; a próxima requisição no mesmo worker reutiliza esse estado. Um dos caminhos confirmados passa por session.upload_progress (ligado por padrão) e, no 8.5, por fatal_error_backtraces.

Versões afetadas: 8.2.x antes de 8.2.35, 8.3.x antes de 8.3.36, 8.4.x antes de 8.4.27, 8.5.x antes de 8.5.12. Ramos mais antigos (8.1 e abaixo) também, com backports de código-fonte para 7.4, 8.0 e 8.1 — sem release oficial compilado. SAPIs em risco: mod_php, PHP-FPM, php-cgi, FrankenPHP, LiteSpeed. Relatos de exploração tentada já circularam; a superfície é enorme porque o bug está no engine, não no WordPress, Laravel ou no script que você escreveu.

Isso não substitui o que já matava aplicação PHP há anos. SQL injection por concatenação de string, XSS por saída sem encoding contextual, inclusão remota de arquivo e funções perigosas habilitadas (exec, system, shell_exec) continuam no Top 10 OWASP e no dia a dia de invasão. PHP2Shell só deixa claro que "aplicação limpa" não basta se o runtime estiver desatualizado.


O que fazer, na ordem

  1. Atualizar o runtime. Única correção completa. Subir para 8.5.12, 8.4.27, 8.3.36 ou 8.2.35 (conforme o branch). Depois reiniciar todos os workers — processo antigo continua com o código vulnerável em memória. Em hospedagem compartilhada, cobrar o painel ou o provedor; em container, rebuild da imagem base.
  2. Mitigações parciais se o patch ainda não for possível (não substituem o update):
    • session.upload_progress.enabled = 0 e reinício dos workers
    • no 8.5: fatal_error_backtraces = 0
    • pm.max_requests = 1 (ou vida curta do worker) para reduzir a janela de reuso de estado
    • onde fizer sentido: bloquear multipart/form-data no proxy se a app não recebe upload
    • Aviso oficial: cada medida cobre só parte dos braços do ataque.
  3. Endurecer o php.ini. expose_php=Off, display_errors=Off em produção, logs em arquivo, disable_functions com exec,passthru,shell_exec,system,proc_open,popen (e o que mais a app não precisar). Seguir o OWASP PHP Configuration Cheat Sheet.
  4. Código da aplicação. Prepared statements (PDO com parâmetros bindados — nunca concatenar SQL). Validação por allowlist no input. Encoding contextual na saída (HTML, JS, URL, conforme o destino). Hash de senha com password_hash / password_verify. Frameworks e CMS atualizados reduzem a superfície, mas não fecham o bug de núcleo.

Se você opera servidor ou site em PHP: confira a versão (php -v ou o painel), aplique o patch desta semana e reinicie os workers. Sem isso, o restante do hardening fica em cima de um engine que ainda responde ao pacote errado.


Leia o artigo mais aprofundado clicando abaixo.


Se você quer usar IA com propriedade, e não apenas gerar código.

A série completa (eBook) está disponível com 30% de desconto usando o cupom LEIA30:

  • Cupom de 30% OFF: LEIA30.
  • Disponível também no Kindle Unlimited.


Referências

  • The PHP Foundation security release 21/10/2026 (8.5.12/8.4.27/8.3.36/8.2.35)
  • Advisories CVE-2026-109618 (OOM corruption) e CVE-2026-109619 (stale global state)
  • Análises JFrog, Datadog Security Labs, Censys, Securelist (out 2026)
  • OWASP PHP Configuration Cheat Sheet e Secure Coding Practices

Tags

#PHP #Seguranca #PHP2Shell #CVE #Ciberseguranca #WebSecurity #DevOps #Backend #OWASP #Atualizacao #RCE

Top comments (0)