Início/Blog/PHP2Shell: a falha crítica do PHP e o qu
Segurança
PHP2Shell: a falha crítica do PHP e o que fiz pelos activos digitais dos meus clientes.
Duas falhas, gravidade 9,2, execução de código sem palavra-passe em qualquer site em PHP. A lista que segui nos sites que mantenho, o que pedir ao seu alojamento esta semana, e porque é que guardar dados de clientes passou a exigir mais do que boa vontade.

A 21 de Outubro de 2026 o PHP corrigiu duas falhas críticas, CVE-2026-109618 e CVE-2026-109619, que permitem executar código num servidor sem conta nem palavra-passe. Qualquer site em PHP que receba pedidos da web está exposto até correr a 8.2.35, a 8.3.36, a 8.4.27 ou a 8.5.12. Nos sites que mantenho, a resposta foi um inventário, a versão corrigida fixada no único site em PHP, uma revisão do que estava à volta, a Cloudflare à frente como protecção temporária e uma auditoria de exposição a cada site. O que se segue é essa lista, para a copiar.
Escrevo isto dois dias depois do aviso, com as fontes oficiais ao lado e sem alarmismo: a maior parte dos sites de pequenas empresas em Portugal corre em PHP sem o dono saber, e a única coisa que decide se estão seguros é uma pergunta ao alojamento. Explico o que aconteceu, o que fiz pelos meus activos digitais e pelos dos meus clientes, e o que a lei passou a pedir a quem guarda dados de outros.
O que aconteceu
Duas falhas críticas no PHP, corrigidas a 21 de Outubro
A 21 de Outubro de 2026 o PHP publicou versões de emergência para duas falhas, CVE-2026-109618 e CVE-2026-109619, que a comunidade baptizou de PHP2Shell. As duas têm gravidade 9,2 em 10 e permitem a um atacante executar código no servidor sem precisar de conta nem de palavra-passe. Segundo a agência de cibersegurança dos Estados Unidos, afectam todas as instalações de PHP que servem pedidos da web, seja com PHP-FPM, com o módulo do Apache ou com outros servidores.
As versões corrigidas são a 8.5.12, a 8.4.27, a 8.3.36 e a 8.2.35. O PHP 8.1 e as versões anteriores já não recebem actualizações normais; houve correcções limitadas no código fonte para a 7.4, a 8.0 e a 8.1, mas quem está nessas versões depende do alojamento ou de uma migração. A Rapid7 explica as duas falhas em pormenor: uma corrompe a memória quando um pedido esgota a memória a meio, a outra deixa um processo reutilizar dados de um pedido anterior que já devia ter sido limpo. A 22 de Outubro já circulavam várias provas de conceito públicas e havia relatos de tentativas de exploração, embora nenhuma delas funcione em todas as combinações de sistema e versão. A CERT-EU emitiu um aviso no mesmo dia.
Porque lhe toca
Metade da web portuguesa corre em PHP sem saber
WordPress, WooCommerce, PrestaShop, Moodle, Laravel, a maior parte dos sites de pequenas empresas em alojamento partilhado: tudo isto é PHP. O dono do site não vê a versão, não escolhe quando actualiza, e muitas vezes não sabe quem é o alojamento. Quando uma falha destas aparece, a diferença entre um site seguro e um site aberto é uma definição no painel do alojamento, ou um email que alguém tem de escrever.
E o que está em risco não é só o site. Num servidor com PHP estão formulários com nomes e emails de clientes, encomendas, ficheiros de clientes carregados por upload, credenciais de ligação a bases de dados e, muitas vezes, chaves de serviços de terceiros. Executar código no servidor é ter tudo isso na mão.
O que fiz
A lista que segui nos sites que mantenho
Mantenho sites meus e de clientes: um escritório de advogados, um gabinete de contabilidade, um salão de beleza, um marketplace de barbearias, uma loja de reparação e várias aplicações em construção. Foi por esta ordem:
- Inventário em meia hora: que sites correm PHP, em que versão e em que alojamento. A resposta foi um só: o site em Laravel de um escritório de advogados, num alojamento gerido. Tudo o resto corre sem PHP, em Cloudflare Pages, Vercel ou Node, e por isso a falha não existe nesses sites. Sem inventário, esta pergunta leva dias; com ele, leva minutos.
- Versão fixada, não prometida por email: esse site passou a exigir uma versão de PHP já corrigida sempre que é reconstruído, para não voltar a instalar uma versão com a falha. O assunto só fica fechado quando vejo a versão instalada com os meus olhos, não quando recebo um "está tratado".
- Revisão do que estava à volta: uma falha grave é uma boa desculpa para olhar para o resto. Nesse site, as peças de software de que a aplicação depende estavam atrasadas e foram actualizadas para as versões correntes, e o código foi revisto à procura de portas que não deviam estar abertas. O que apareceu foi fechado na mesma passagem.
- Modo de depuração desligado: é o primeiro item da lista em qualquer aplicação. Ligado, mostra o interior do site a quem o visita quando há um erro. Tem de estar desligado no alojamento, não só no código.
- Cloudflare à frente de tudo: todos os sites que mantenho passam pela Cloudflare, com TLS estrito, HSTS e cabeçalhos de segurança. Enquanto uma actualização não está em produção, é ali que se limitam os pedidos com envio de ficheiros, a porta de entrada da primeira falha, e se bloqueia tráfego anómalo. Não substitui a actualização; ganha tempo.
- Auditoria de exposição em cada site: desde Outubro uso uma ferramenta que vê o site como um atacante o veria, do lado de fora: chaves esquecidas no código, ficheiros que não deviam estar acessíveis, protecções em falta, cookies e serviços de terceiros. Só audito o que é meu ou de clientes com autorização. O que aparece entra numa lista de correcções com data.
- Acessos: contas de cliente separadas, verificação em dois passos onde a ferramenta a tem, nada de dados de clientes copiados para fora das ferramentas deles sem necessidade, e acessos cancelados no fim de cada contrato. Está escrito na minha política de privacidade porque é um compromisso, não um lembrete.
- Menos dados, menos risco: o site da Wandofi não tem base de dados nem sessões. O teste de diagnóstico guarda só o que pede, numa folha privada, com consentimento; o Google Analytics só carrega depois de o visitante aceitar. O que não se recolhe não se perde.
Nada disto é heróico, e nem tudo entra em produção no mesmo dia: num site de cliente, as alterações passam por um ambiente de teste antes de chegarem ao público, e a pressa é precisamente o que parte sites. O que conta é a lista, com datas, feita antes da falha. Quem não sabe onde corre PHP não consegue sequer começar.
Para o dono de um site
O que fazer esta semana, mesmo sem ser técnico
- Pergunte ao alojamento a versão do PHP, por escrito. A resposta tem de ser 8.2.35, 8.3.36, 8.4.27 ou 8.5.12, ou superior. "Está actualizado" não é uma versão.
- Se estiver em 8.1 ou abaixo, a conversa é sobre migrar, não sobre actualizar. Peça prazo e, até lá, uma protecção no firewall de aplicações.
- WordPress: actualizar o WordPress e os plugins não resolve esta falha, que está no PHP. Mas aproveite para apagar plugins que não usa; cada um é uma porta.
- Cópias de segurança: confirme que existe uma de ontem e que a sabe repor. Muita gente descobre na altura errada que a cópia automática estava desligada.
- Quem tem acesso: liste quem tem palavra-passe do painel, do FTP e da base de dados. Antigos fornecedores incluídos. Corte o que não é preciso e ligue a verificação em dois passos.
- Sinais de intrusão: ficheiros novos em pastas do site, utilizadores administradores que não criou, emails de redefinição de palavra-passe que não pediu. Se vir um destes, mude as credenciais e peça ajuda no próprio dia.
Dados de terceiros
O cuidado que passou a ser obrigatório
Quando um site guarda dados de clientes, de pacientes ou de alunos, o dono do site é responsável por eles perante a lei, mesmo que o alojamento seja de outra empresa e o site tenha sido feito por um terceiro. O RGPD pede medidas de segurança adequadas ao risco, no artigo 32.º, e um contrato com quem trata os dados por conta do responsável, no artigo 28.º. E se houver uma violação de dados com risco para as pessoas, há 72 horas para a comunicar à CNPD, pelo artigo 33.º. Setenta e duas horas é pouco para quem descobre o problema a ler o jornal.
Para quem, como eu, trabalha por dentro das ferramentas dos clientes, a obrigação é a mesma na outra ponta: usar os acessos só para o trabalho contratado, guardar o mínimo, avisar o cliente se detectar uma fuga, e deixar escrito quem acedeu a quê. Numa semana como esta, o cliente tem de poder perguntar "o meu site está seguro?" e receber uma resposta com versão, data e nome de quem confirmou.
A segurança de um negócio pequeno não se compra num dia de pânico. Faz parte da infraestrutura, como a facturação ou a contabilidade, e é por isso que entra em todos os projectos que faço, do site às automações. Se quiser saber onde está o seu, o diagnóstico começa por aí.
Gostou de ler isto?
Carregue no botão e o Google passa a dar prioridade aos artigos da Wandofi nos seus resultados, nas notícias em destaque e nas respostas de IA da Pesquisa. Leva um segundo, e pode desfazer quando quiser.
Abre as definições do Google numa nova janela. A escolha fica guardada na sua conta Google e não me dá acesso a dados seus.
Perguntas frequentes
Perguntas frequentes
O meu site WordPress está afectado pela falha PHP2Shell?
Se o servidor corre uma versão de PHP anterior à 8.2.35, 8.3.36, 8.4.27 ou 8.5.12, está. A falha não está no WordPress nem nos plugins, está no PHP que os executa. A correcção é feita pelo alojamento, ou por si, se gerir o servidor.
Como sei a versão do PHP do meu site?
No painel do alojamento há quase sempre uma opção chamada PHP, Versão do PHP ou Seleccionar PHP. No WordPress, em Ferramentas, Saúde do site, Informação, aparece a versão em uso. Se não encontrar, pergunte ao alojamento por escrito e guarde a resposta.
Actualizei o WordPress e os plugins. Chega?
Não. Esta falha vive no PHP, não na aplicação. Actualizar o WordPress é boa prática, mas a versão do PHP tem de ser uma das corrigidas. Confirme as duas coisas.
Tenho de avisar os meus clientes?
Só se houver uma violação de dados, ou seja, se alguém tiver acedido ou podido aceder aos dados deles. Nesse caso, a CNPD tem de ser informada em 72 horas e as pessoas afectadas quando o risco for elevado. Actualizar a tempo, sem sinais de intrusão, não obriga a aviso, mas convém guardar a prova de que o fez e quando.
E se o alojamento não conseguir actualizar já?
Peça uma data por escrito. Entretanto, ponha o site atrás de um firewall de aplicações, como o da Cloudflare, limite o tamanho dos pedidos e os envios de ficheiros, e desligue funcionalidades de upload que não usa. Se o site estiver em PHP 8.1 ou abaixo e não houver correcção à vista, a recomendação oficial é tirar o site do ar até resolver.
A seguir
Continue por aqui
Outros artigos do blog:
Quer um agente de IA a correr no seu negócio, sem depender de uma plataforma?
Monto agentes à medida, ligados às ferramentas que já usa, e fico para a manutenção. Começamos por um diagnóstico, sem compromisso.