Ataques em PHP, Node.js e Python: o que houve e como se proteger
Falhas no PHP derrubaram sites, um pacote Python foi publicado com malware e o Node.js recebeu correções: o que houve e como se proteger.
Ataques em PHP, Node.js e Python: o que houve e como se proteger
Rascunho para validação do autor. Não publicado. Dados da semana de 19 a 24/10/2026; conferir antes de publicar, porque o cenário muda rápido.
Na semana de 21 de outubro de 2026, uma falha no PHP obrigou governos e empresas a tirar sites do ar, e um pacote Python muito usado em projetos de IA foi publicado com um programa roubador de senhas. Este texto explica o que aconteceu, por que aconteceu e o que fazer, em três partes: o problema, a solução e a prevenção.
1. Resumo da semana
| Linguagem | O que aconteceu | Impacto | Ação principal |
|---|---|---|---|
| PHP | Duas falhas críticas (CVE-2026-109618 e CVE-2026-109619, nota 9,2), apelidadas de PHP2Shell | Sites tirados do ar por precaução; exploração já observada | Atualizar o PHP para 8.5.12, 8.4.27, 8.3.36 ou 8.2.35 |
| Node.js | Release de segurança em 21/10 com 10 CVEs; sem exploração confirmada no comunicado | Risco de atualizar tarde; ataques a pacotes npm são um problema contínuo | Atualizar para 22.23.4, 24.22.1 ou 26.12.1 e revisar dependências |
| Python | Versão 1.107.0 do LiteLLM publicada no PyPI com malware | Roubo de credenciais de nuvem, chaves de IA e segredos de CI | Voltar para a 1.106.2 e trocar as credenciais que estavam acessíveis |
Vamos por partes.
2. PHP: a falha que derrubou sites
O problema
Os dois erros estão no tratamento de situações de erro dentro do PHP. Para entender, pense em um cozinheiro que, ao ver a cozinha pegar fogo, grita "saiam todos" e pula direto para a saída, sem recolher os ingredientes que estavam na bancada. Esses ingredientes continuam ali, e quem entrar depois pode pegar algo que não deveria.
Tecnicamente, o PHP usa uma função chamada longjmp() para pular de volta quando falta memória ou ocorre um erro fatal. Segundo a Unit 42, da Palo Alto Networks:
- CVE-2026-109618: quando a memória acaba, parte da memória da requisição fica sem inicialização. Um atacante consegue provocar esse estado de forma confiável e chegar à execução de código.
- CVE-2026-109619: depois de um erro fatal, um ponteiro global continua apontando para memória já liberada. Requisições seguintes podem ler esse espaço e, com isso, executar código.
Em linguagem simples: o atacante envia uma requisição HTTP especialmente preparada e o servidor passa a executar o que ele mandar. Não é preciso login. A Wiz afirma que todas as versões do PHP lançadas na última década têm pelo menos uma dessas falhas.
Por que sites saíram do ar? A Krebs on Security e a Reuters relatam que governos europeus desligaram sites como medida preventiva enquanto aplicavam a correção. Outros sites, como serviços da Wikimedia, também tiveram parte dos serviços suspensos para aplicar o patch. A Unit 42 relata que um governo europeu teve a infraestrutura comprometida em duas horas, com acesso a hashes de senha e segredos de MFA.
A solução
- Atualize o PHP para uma destas versões, conforme o ramo que você usa:
- 8.5.12
- 8.4.27
- 8.3.36
- 8.2.35
- Confirme a versão instalada, sem presumir:
php -v
- Atualize também o software que roda em cima do PHP. A Krebs estima que quase 70% dos sites dependem de WordPress, Drupal, Joomla ou Magento, que também recebem atualizações. Ter o PHP corrigido não basta se o CMS continuar antigo.
- Se não der para atualizar agora, reduza a exposição: restrinja o acesso a painéis administrativos por IP, use regras de WAF (a Cloudflare disse ter publicado regras de proteção) e monitore o servidor.
A prevenção
- Verifique se o patch foi de fato instalado. Um pacote agendado não protege nada. A Unit 42 recomenda avaliar a exposição antes de atualizar, para saber quais serviços estão no ar.
- Monitore processos filhos do PHP. Um processo de worker do PHP-FPM que inicia
sh,bashou um download é sinal de alerta. A Unit 42 publicou consultas de caça para isso (cuidado com falsos positivos). - Mantenha o PHP em suporte. Versões fora de suporte não recebem correção como esta. Um servidor que roda uma versão antiga precisa de um plano de migração, não só de patch.
3. Node.js: release de segurança e pacotes maliciosos
O problema
Em 21/10/2026, o Node.js publicou atualizações para as linhas 26.x, 24.x e 22.x. Os CVEs corrigidos incluem:
- CVE-2026-111497 (alta): uma escrita fora dos limites no decodificador Brotli do
node:zlib. Ao processar dados malformados, pode levar a travamento, vazamento de memória ou execução de código. É o mais grave da lista, mas só afeta aplicações que descompactam dados Brotli enviados por terceiros. - CVE-2026-105482, CVE-2026-105483 e CVE-2026-106069 (alta): falhas na validação de nomes e IPs em TLS e DNS. Podem fazer um cliente aceitar o certificado errado. Exigem um endpoint que o cliente já confia.
Os outros são de gravidade média ou baixa. O comunicado não diz que essas falhas estejam sendo exploradas.
Além disso, a semana teve ataques a pacotes do ecossistema npm. Com base em fontes secundárias, há relatos de pacotes comprometidos e de um malware que rouba senhas de navegador, tokens do Discord e carteiras de cripto. Esses números ainda não foram verificados em fontes primárias, então não os use sem conferir.
A solução
- Atualize o Node.js para 22.23.4, 24.22.1 ou 26.12.1, conforme a sua linha.
- Confira a versão com:
node -v
- Versões fora de suporte também recebem o problema. O comunicado diz que o fim de vida (EOL) não protege.
A prevenção: como reduzir o risco de pacotes maliciosos
Um pacote malicioso costuma rodar código durante a instalação (postinstall) ou ao ser importado. Algumas medidas reduzem o risco:
# instala exatamente o que está no package-lock.json, sem atualizar nada
npm ci
# não executa scripts de instalação de dependências
npm ci --ignore-scripts
- Trave as versões com
package-lock.jsone usenpm cino CI, nuncanpm install. - Desligue os scripts de instalação quando não forem necessários.
- Não confie só em bloquear scripts. Há relatos de pacotes que executam código ao serem importados. Por isso, revise dependências novas e atualizações de versão.
- Limite os segredos disponíveis no CI. Um token com acesso amplo, exposto em uma etapa de build, é o que o malware busca.
4. Python: o LiteLLM 1.107.0 comprometido
O problema
O LiteLLM é uma biblioteca que centraliza chamadas a modelos de IA. Em 21/10/2026, a versão 1.107.0 foi publicada no PyPI com um programa malicioso em todas as sete versões de pacote (wheels). Segundo a StepSecurity, a Wiz estimou cerca de 49 mil downloads antes da remoção, que aconteceu até as 13:23 UTC.
O ataque não quebrou o PyPI nem o Python. Ele atacou o pipeline de publicação do projeto. A análise do BerriAI descreve a cadeia:
- Um servidor interno do LiteLLM estava exposto.
- Tokens de OAuth do GitHub CLI vazaram para os logs de deploy.
- Um token de dono de organização foi usado para desativar a proteção de branch e alterar o workflow de release.
- Com a aprovação feita por outro token roubado, o pacote foi publicado com assinatura de procedência válida.
Por isso, medidas como publicação confiável (Trusted Publishing) não impediram o ataque: o atacante modificou o próprio processo confiável.
Por que é tão perigoso? O arquivo cook.pth é executado toda vez que o interpretador Python inicia. Ou seja, o código roda mesmo sem import litellm. O programa coleta senhas de navegador, chaves SSH, credenciais da AWS, Azure e GCP, variáveis de ambiente, tokens de ferramentas de IA e, se houver, a base de dados do proxy LiteLLM. Os dados são enviados para um domínio externo.
A solução
- Fixe a versão segura, 1.106.2, e nunca use versão flutuante:
pip install "litellm==1.106.2"
- Se o 1.107.0 rodou em alguma máquina, reconstrua o ambiente virtual do zero, em vez de limpar a instalação. Remova
cook.pth,cook.pyesitecustomize.pydo site-packages. - Troque todas as credenciais acessíveis naquele ambiente: chaves de nuvem, chaves SSH, tokens de registro, segredos de CI e as chaves de provedores de IA guardadas no proxy.
- Procure sinais de execução: requisições para
litellm.deve para/codepy, e chamadasGetCallerIdentityno CloudTrail perto da data de instalação.
A prevenção
Um arquivo de requisitos com hashes faz o pip recusar qualquer arquivo que não seja exatamente o esperado:
pip install --require-hashes -r requirements.txt
- Trave as dependências com hash, geradas por ferramentas como
pip-tools. - Não use versões flutuantes (
litellm>=1.100) em produção. - Separe o ambiente de build do ambiente de execução, e dê o mínimo de credenciais para cada um.
- Audite regularmente com
pip-audit.
5. O que as três têm em comum
Os três casos mostram três pontos que valem para qualquer linguagem:
- Patch não é opcional. Uma falha de execução remota sem login se propaga em horas.
- A cadeia de suprimento é alvo. Pacotes, workflows de CI e tokens são o caminho mais curto para o atacante.
- Segredos são o prêmio. Um servidor comprometido vale pelo que ele guarda: chaves de nuvem, senhas e tokens.
Um checklist mínimo para esta semana:
- [ ] Versão do PHP conferida e atualizada (ou regra de WAF aplicada)
- [ ] Node.js atualizado e
npm cino CI - [ ]
litellmfixado em 1.106.2, com ambiente reconstruído se o 1.107.0 rodou - [ ] Credenciais expostas trocadas
- [ ] Dependências travadas com lock ou hash
Referências
- Palo Alto Networks, Unit 42. Threat Brief: Critical Vulnerabilities in PHP: CVE-2026-109618, CVE-2026-109619, 23/10/2026. https://unit42.paloaltonetworks.com/cve-2026-109618-cve-2026-109619/
- Krebs on Security. Widespread PHP Flaw May Cause Many Site Outages Today, 21/10/2026. https://krebsonsecurity.com/2026/10/widespread-php-flaw-may-cause-many-site-outages-today/
- TechRadar. Which major websites have been hit by the PHP security crisis?. https://www.techradar.com/computing/cyber-security/which-major-websites-have-been-hit-by-the-php-security-crisis-here-are-the-biggest-so-far-from-wikipedia-to-the-internet-archive
- Malwarebytes. PHP2Shell: Why many websites had to go offline, 10/2026. https://www.malwarebytes.com/blog/bugs/2026/10/php2shell-why-websites-are-going-offline-for-emergency-security-updates
- CBC. A flaw in a computer language sent websites scrambling. https://www.cbc.ca/news/business/php-cybersecurity-vulnerability-explainer-9.7392394
- Node.js. Security Release: Wednesday, October 21, 2026. https://nodejs.org/en/blog/vulnerability/october-2026-security-releases
- StepSecurity. litellm 1.107.0 Compromised on PyPI: Backdoored Wheels Drop a Credential Stealer and an Hourly Remote Code Loader. https://www.stepsecurity.io/blog/litellm-1-107-0-compromised-pypi-backdoored-wheels-credential-stealer
- Wiz. LiteLLM Compromised, Steals Credentials. https://www.wiz.io/blog/litellm-compromised-steals-credentials
- The Hacker News. LiteLLM Compromised in Supply Chain Attack Delivering Credential Stealer and Backdoor, 10/2026. https://thehackernews.com/2026/10/litellm-compromised-in-supply-chain.html
- The Hacker News. Eight Malicious npm Packages Downloaded 40,767 Times Deliver Overlord RAT and Stealer, 10/2026. https://thehackernews.com/2026/10/eight-malicious-npm-packages-downloaded.html (fonte secundária; os números não foram verificados em fonte primária)
Verificação pendente: o relatório da PHP Group e o comunicado do PyPI/BerriAI não foram lidos diretamente. Os números de versões do PHP vêm da Krebs e da Unit 42. Antes de publicar, confira o anúncio oficial do PHP.