Relatório de correção
Verificação da correção PHP2Shell
Pontuação de saúde
BomA melhorarEm risco
Antes 48
Antes 31
Antes 58
Antes 38
Antes 92
As pontuações resumem as verificações deste relatório, ponderadas em 40% segurança, 25% cópias de segurança, 20% atualizações e 15% desempenho. Descrevem o risco no momento registado e não constituem uma certificação.
1Resumo executivo
O servidor web de produção executava o PHP 8.3.35, afetado por ambas as vulnerabilidades PHP2Shell. Durante a janela de manutenção acordada, atualizámos o PHP para a versão 8.3.36, reiniciámos todos os processos PHP-FPM e confirmámos que a aplicação passou a servir o tráfego a partir do ambiente de execução corrigido. Todas as verificações funcionais acordadas foram aprovadas e não foram registados novos erros.
A análise identificou ainda um pool PHP 7.4 em fim de vida fora do âmbito acordado, um reinício do kernel pendente e lacunas na cobertura das cópias de segurança. Estes pontos não afetam a correção do PHP2Shell, mas devem ser tratados. Cada um consta das recomendações com a respetiva prioridade.
- Estado PHP2Shell
- Corrigido
- Verificações funcionais
- 8 de 8 aprovadas
- Indisponibilidade
- Nenhuma observada
- Ações de seguimento
- 6, incluindo 2 de prioridade alta
2Âmbito e método
Dentro do âmbito
- Um servidor de produção,
web-01 - Pool PHP-FPM
wwwque serve a aplicação da loja - PHP CLI utilizado pelas tarefas agendadas
- Verificações acordadas de início de sessão, pesquisa, checkout, formulários, carregamentos e tarefas agendadas
Fora do âmbito
- Pool PHP 7.4
legacy(reportado, não alterado) - Componentes internos do servidor de base de dados e código da aplicação
- Investigação de malware ou de comprometimento
- Ambientes de pré-produção e de desenvolvimento
Método
Inventário apenas de leitura por SSH com uma chave de validade limitada; origem dos pacotes verificada face ao repositório do fornecedor e ao aviso do PHP; snapshot com arranque verificado antes de qualquer alteração; atualização aplicada através do gestor de pacotes do sistema; reinício dos processos; verificações funcionais com as contas de teste do cliente. O acesso temporário foi removido às 22:31.
3Inventário do servidor
Registado no início da janela de trabalho, antes de qualquer alteração.
| Nome do anfitrião | web-01.example-retail.test |
|---|---|
| Função | Servidor web e de aplicações de produção |
| Alojamento | Servidor privado virtual, 4 vCPU, 8 GB de memória |
| Sistema operativo | Ubuntu 24.04.3 LTS |
| Kernel em execução | 6.8.0-85-generic Kernel mais recente instalado, reinício pendente |
| Tempo de atividade | 142 dias |
| Disco | Volume de sistema de 80 GB, 61% utilizado |
| Servidor web | nginx 1.24.0 |
| Pools PHP-FPM | www (PHP 8.3), legacy (PHP 7.4) |
| Base de dados | MySQL 8.0.43 num anfitrião gerido separado |
| Origem dos pacotes PHP | ppa:ondrej/php |
| Atualizações de segurança automáticas | Desativadas |
| Sincronização horária | Ativa |
| Monitorização | Apenas verificação de disponibilidade; sem alertas de recursos nem de erros da aplicação |
4Ambientes de execução PHP
Foram identificados todos os binários e pools PHP do servidor, incluindo os que estão fora do âmbito acordado.
| Ambiente de execução | Serve | Antes | Depois | Estado |
|---|---|---|---|---|
php8.3-fpm / www | Aplicação da loja | 8.3.35 | 8.3.36 | Corrigido |
php8.3-cli | Tarefas agendadas | 8.3.35 | 8.3.36 | Corrigido |
php7.4-fpm / legacy | Loja arquivada em /old-shop | 7.4.33 | 7.4.33 | Intervenção necessária |
O PHP 7.4 está em fim de vida desde novembro de 2022 e não recebe correções de segurança do projeto original. Não foi possível excluir a exposição do pool legado apenas com base na versão; ver recomendação R1.
Observações de configuração
expose_phpestá desativado edisplay_errorsestá desligado em produção.- O OPcache está ativo com 128 MB de memória, suficiente para a aplicação.
session.upload_progress.enabledestá ativo, mas não é utilizado pela aplicação.- Cada pool é executado com o seu próprio utilizador de sistema e um socket separado.
5Estado das vulnerabilidades
| Aviso | Ambiente afetado | Antes | Depois | Provas |
|---|---|---|---|---|
CVE-2026-109618 | php8.3 | Afetado | Corrigido | Registo de alterações do pacote e versão em execução |
CVE-2026-109619 | php8.3 | Afetado | Corrigido | Registo de alterações do pacote e versão em execução |
CVE-2026-109618, CVE-2026-109619 | php7.4 | Não avaliado | Não avaliado | Fora do âmbito acordado |
Uma correção adaptada pelo fornecedor a uma versão anterior pode ter um número de versão diferente. O relatório real utiliza o aviso do fornecedor relevante. A verificação bem-sucedida de uma correção não demonstra que o ambiente nunca foi comprometido.
6Cópias de segurança e recuperação
As cópias de segurança foram analisadas antes de qualquer alteração. A atualização só podia começar depois de existir um snapshot verificado.
| Cópia de segurança | Periodicidade | Último êxito | Retenção | Localização | Teste de reposição |
|---|---|---|---|---|---|
| Dump da base de dados | Diária, 03:15 | 2026-10-22 03:16 | 14 dias | Externa, encriptada | Nunca |
| Ficheiros da aplicação | Diária, 03:40 | 2026-10-22 03:52 | 14 dias | Mesmo fornecedor, volume separado | Nunca |
| Snapshot do servidor pré-alteração | Criado para este trabalho | 2026-10-22 21:04 | 7 dias | Fornecedor de alojamento | Arranque verificado |
Conclusões
- A cópia de segurança de ficheiros exclui
/var/www/shop/uploads, onde estão guardados cerca de 6,2 GB de documentos de clientes. - Não existe registo de qualquer teste de reposição para nenhuma das cópias de segurança agendadas. Não se pode contar com uma cópia de segurança que nunca foi reposta para efeitos de recuperação.
- Os dumps da base de dados são encriptados e guardados noutro fornecedor, o que os protege em caso de perda do servidor ou da conta de alojamento.
Plano de reversão para esta alteração
Reinstalar os pacotes PHP anteriores a partir da cache local de pacotes e recarregar o PHP-FPM, ou arrancar a partir do snapshot pré-alteração. Tempo estimado de recuperação: 15 minutos. A reversão não foi necessária.
7Registo de alterações
| Hora | Ação | Resultado |
|---|---|---|
21:00 | Acesso aberto; registada a linha de base de versões, serviços e tempos de resposta | Concluído |
21:04 | Snapshot do servidor pré-alteração criado e com arranque verificado | Concluído |
21:12 | Verificações funcionais de base executadas | 8 de 8 aprovadas |
21:18 | Pacotes PHP 8.3 atualizados de 8.3.35 para 8.3.36 | Concluído |
21:20 | PHP-FPM reiniciado; não restam processos da versão anterior | Concluído |
21:24 | Versão em execução confirmada através do servidor web e da CLI | Concluído |
21:31 | Verificações funcionais pós-alteração executadas | 8 de 8 aprovadas |
21:55 | Registos de erros e tempos de resposta monitorizados durante 20 minutos | Sem novos erros |
22:31 | Chave de acesso temporária removida e sessão terminada | Concluído |
8Verificação pós-alteração
| Verificação | Método | Resultado |
|---|---|---|
| Versão PHP servida aos pedidos web | Script de diagnóstico temporário, removido após a utilização | 8.3.36 |
| Processos PHP-FPM | Lista de processos e estado do serviço | Aprovado |
| Início de sessão de cliente | Conta de teste do cliente | Aprovado |
| Início de sessão de administrador | Conta de teste do cliente | Aprovado |
| Pesquisa de produtos | Três termos de pesquisa acordados com o cliente | Aprovado |
| Checkout | Encomenda de teste no modo de teste do fornecedor de pagamentos | Aprovado |
| Formulário de contacto | Envio de teste, entrega confirmada pelo cliente | Aprovado |
| Carregamento de ficheiros | Documento de teste carregado e descarregado | Aprovado |
| E-mail de reposição da palavra-passe | Conta de teste, e-mail recebido | Aprovado |
| Tarefas agendadas | Próxima execução agendada verificada nos registos | Aprovado |
| Registo de erros | Comparação dos 30 minutos antes e depois da alteração | Sem novos erros |
| Tempo de resposta da página inicial | Mediana de 20 pedidos | 182 ms → 176 ms |
9Conclusões e recomendações
Ordenadas por prioridade. Nenhum destes pontos bloqueia a correção do PHP2Shell.
| ID | Prioridade | Conclusão | Recomendação |
|---|---|---|---|
R1 | Alta | O pool PHP 7.4 está em fim de vida e pode estar exposto. | Desativar a loja arquivada ou restringi-la a utilizadores autenticados. Se tiver de permanecer online, migrá-la para uma versão PHP suportada. Orçamentado à parte. |
R2 | Alta | Está instalado um kernel mais recente, mas não está em execução; o servidor não é reiniciado há 142 dias. | Agendar um reinício na próxima janela de manutenção e confirmar depois o kernel em execução. |
R3 | Média | Há 23 atualizações do sistema operativo pendentes, incluindo OpenSSL e nginx. | Aplicá-las numa janela planeada e ativar as atualizações de segurança automáticas. |
R4 | Média | As cópias de segurança nunca foram testadas com uma reposição e a cópia de segurança de ficheiros exclui os carregamentos dos clientes. | Incluir o diretório de carregamentos na cópia de segurança de ficheiros e executar trimestralmente um teste de reposição documentado. |
R5 | Baixa | O acompanhamento do progresso de carregamentos está ativo, mas não é utilizado. | Desativar session.upload_progress.enabled para reduzir a superfície de ataque. |
R6 | Baixa | A monitorização abrange apenas a disponibilidade. | Adicionar alertas de espaço em disco, saturação do PHP-FPM e erros da aplicação. |
10Provas e entrega
- Identificadores dos ambientes e janela de trabalho acordada
- Origem do pacote, versão completa e aviso aplicável do fornecedor
- Referência da cópia de segurança, registo de alterações e provas do reinício dos processos
- Verificações funcionais acordadas, resultados e limitações
- Transcrição completa dos comandos e excertos do registo de alterações dos pacotes
11Limitações
O relatório abrange o ambiente e as verificações acordados no momento registado. Não é uma certificação de segurança, uma garantia contra futuras vulnerabilidades nem uma conclusão de que não ocorreu qualquer comprometimento anterior. A suspeita de comprometimento exige uma investigação separada.