
Correção não oficial para CVE-2026-109618 / CVE-2026-109619 (php2shell) para os pacotes PHP 5.4 / 5.3 em fim de vida do RHEL, CentOS e Oracle Linux 7 / 6
Correção não oficial para CVE-2026-109618 e CVE-2026-109619 ("php2shell") para os pacotes PHP em fim de vida
do Enterprise Linux 6 e 7: php-5.3.3 (RHEL / CentOS / Oracle Linux 6) e php-5.4.16
(RHEL / CentOS / Oracle Linux / Scientific Linux 7).
O PHP corrigiu ambas as vulnerabilidades em 21 de outubro de 2026 nas versões 8.2.35, 8.3.36, 8.4.27 e 8.5.12, e publicou backports de código-fonte para 7.4, 8.0 e 8.1. Nada foi lançado para o PHP 5, e os fornecedores do EL6 / EL7 não lançaram uma correção. Se você precisa manter esse tipo de sistema em funcionamento, este projeto fornece pacotes de fornecedor recompilados com um port da correção mínima oficial.
Esta não é uma correção oficial do PHP, Red Hat ou Oracle. Ela reduz o risco até que você possa migrar para uma versão de PHP suportada — faça isso o quanto antes. No EL8 / EL9 / EL10, instale as atualizações do seu fornecedor (por exemplo, ELSA/RHSA-2026:87080, 87151, 87079).
php-5.4.16 / php-5.3.3, que não possuem as correções de segurança posteriores do fornecedor no mesmo código
(por exemplo, CVE-2015-4024 no parsing de cabeçalhos multipart).| Distribuição | Pacote do fornecedor | Pacote corrigido deste projeto |
|---|---|---|
| RHEL / CentOS / Oracle Linux / Scientific Linux 7 | php-5.4.16-48.el7 | php-5.4.16-48.el7.php2shell.1 |
| RHEL / CentOS / Oracle Linux 6 | php-5.3.3-50.el6_10 | php-5.3.3-50.el6_10.php2shell.1 |
O sufixo de lançamento ordena acima do pacote do fornecedor e abaixo de qualquer errata futura do fornecedor
(por exemplo, 48.el7_9.1), de modo que uma correção oficial, caso algum dia apareça, substitui esta por meio de uma atualização normal.
Provavelmente menos do que no PHP 7 e 8, mas ainda não há uma resposta definitiva:
php do RHEL 6 / 7 como não afetados pela CVE-2026-109619 ("código vulnerável não presente")
e lista a CVE-2026-109618 como em investigação
(CSAF VEX).Este projeto aplica a mitigação oficial de qualquer forma: ele remove o próprio caminho de erro inseguro, não apenas a forma conhecida de alcançá-lo.
A partir do repositório yum assinado no GitHub Pages:
# EL7
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el7.repo
# EL6
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el6.repo
yum update 'php*' # confirm the signing key: fingerprint under "Signing key" below
service httpd restart # and php-fpm, if you use it
O repositório contém apenas os pacotes PHP deste projeto, e tanto os pacotes quanto os metadados do repositório
são assinados (gpgcheck=1, repo_gpgcheck=1). Os RPMs e os RPMs de código-fonte também estão anexados a cada
release, com um SHA256SUMS assinado; instale-os
com yum localinstall.
./tools/check-patched.sh
Ele lista cada pacote PHP 5 instalado como FIXED ou VULNERABLE, verifica se o PHP CLI executa o
código corrigido e avisa se httpd ou php-fpm foi iniciado antes da atualização e ainda executa o código antigo.
A correção segue o backport mínimo oficial, que prioriza a segurança em vez do tratamento de erros elegante:
memory_limit (ou um tamanho de alocação
transborda), o PHP imprime Fatal error: ... no stderr (o log de erros do servidor web) e o processo termina imediatamente.
O Apache / php-fpm iniciam um novo worker. As funções de shutdown não são executadas, e os arquivos temporários dos uploads dessa
requisição não são removidos — tmpwatch (EL6) e systemd-tmpfiles (EL7) os limpam de /tmp com o tempo.Content-Disposition e Content-Type de cada parte são mantidos
(os únicos que o PHP usa), e a nova diretiva php.ini max_multipart_body_parts limita o número de
partes (padrão -1 = max_input_vars + max_file_uploads).zend_mm_safe_error_ex) e não altera nenhuma API ou ABI existente, portanto
as extensões compiladas para o pacote do fornecedor continuam funcionando.Esta é uma mitigação mínima dos caminhos de ataque publicados, não uma atualização de segurança completa do PHP 5.
Compilado a partir dos RPMs de código-fonte do fornecedor (SHA-256 fixado em build/build.sh); a alteração do spec tem 8 linhas
(spec/*/php.spec.diff).
A suíte de testes do PHP (make test, executada durante a compilação do RPM) foi comparada com uma recompilação não modificada do
mesmo pacote do fornecedor. As únicas novas falhas são esperadas:
os testes de progresso de upload de sessão (recurso desabilitado) e tests/lang/bug45392.phpt (a mensagem de erro fatal
agora começa com uma linha vazia, como no patch oficial 7.4).
| testes | falhas: fornecedor | falhas: corrigido | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23 (8 progresso de upload + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56 (bug45392) |
As contagens exatas variam ligeiramente entre ambientes de compilação: nos runners do GitHub dois testes SPL de proprietário de arquivo
(DirectoryIterator_getOwner/getGroup_basic) também falham, e time_sleep_until_basic é sensível a timing.
Nenhum deles toca no código alterado pelo patch.
O patch do PHP 5.4 foi comparado com um port independente da mesma correção para o php-5.4.16 do Amazon Linux 2:
as mudanças centrais são idênticas. As diferenças estão listadas em docs/ALTERNATIVES.md.
Nenhum código de exploit foi escrito ou usado. Por favor, revise o patch em relação ao commit upstream você mesmo.
Consulte docs/ALTERNATIVES.md para o status do fornecedor, uma lista de projetos e uma comparação.