
Exploit em Python para CVE-2026-109618: abusa da corrupção de heap em session.upload_progress do PHP para sobrescrever zend_call_function e obter execução remota de comandos.
██████╗ ██╗ ██╗██████╗ ██████╗ ███████╗██╗ ██╗███████╗██╗ ██╗ ██╔══██╗ ██║ ██║██╔══██╗╚════██╗██╔════╝██║ ██║██╔════╝██║ ██║ ██████╔╝ ███████║██████╔╝ █████╔╝███████╗███████║█████╗ ██║ ██║ ██╔═══╝ ██╔══██║██╔═══╝ ██╔═══╝ ╚════██║██╔══██║██╔══╝ ██║ ██║ ██║ ██║ ██║██║ ███████╗███████║██║ ██║███████╗███████╗███████╗ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚══════╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
Exploit de Execução Remota de Código via Progresso de Upload de Sessão do PHP (CVE-2026-109618)
CVE-2026-109618 é uma vulnerabilidade crítica de corrupção de memória e lógica no motor do PHP relacionada ao rastreamento do progresso de upload de arquivos via sessões (session.upload_progress).
A falha está na forma como o ponteiro externo post_bytes_processed é armazenado em cache durante a primeira fase da requisição (FILE_START) e não é atualizado corretamente nos eventos de upload subsequentes. Ao combinar uma condição de corrida, a liberação destrutiva de árvores Hash (HashTable.pDestructor = zval_ptr_dtor) e um heap spray controlado usando estruturas preenchidas (tabelas naturais empacotadas t[]), é possível sobrescrever ponteiros de função internos do motor (como zend_call_function) para redirecionar o fluxo de execução para system() com comandos arbitrários.
A ferramenta requer a biblioteca rich para renderizar a interface do console, banners e painéis interativos.
git clone [https://github.com/Ghxstsec/php2shell-poc.git](https://github.com/Ghxstsec/php2shell-poc.git)
cd php2shell-poc
Instale as dependências necessárias
pip install -r requirements.txt
(Ou simplesmente: pip install rich)
🚀 Uso e Exemplos
Execute o script com os parâmetros apropriados para o sistema alvo:
python3 php2shell.py -u "[https://target-domain.com/path/index.php](https://target-domain.com/path/index.php)" -c "uname -a; id"
Opções de Linha de Comando Parâmetro Descrição Valor Padrão -u, --url URL completa do endpoint PHP vulnerável Obrigatório -c, --command Comando a executar no sistema operacional uname -a; id; echo JACKALPOC --sid Identificador de sessão personalizado (PHPSESSID) a1b2c3d4e5f6a7b8c9d0e1f2a3 --stall Duração da paralisação em segundos 1.35 --dtor Endereço de memória vazado de zval_ptr_dtor (hex/int) 0 --call Endereço de memória explícito para zend_call_function Calculado via offset --dry Modo de simulação: gera e salva o payload binário em disco False 🛠️ Detalhes Técnicos
Heap Spraying: Utiliza um bloco de 149 elementos (tabela natural empacotada com bins de 320 bytes) para garantir a reutilização do bloco de memória liberado.
Suporte a SAPI: Projetado para ambientes avaliados sob arquiteturas CGI/FastCGI e servidores front-end compatíveis (como LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Permite despejar o fluxo exato de bytes do payload multipart gerado para análise forense ou depuração usando a flag --dry.
🛠️ Detalhes Técnicos
Versões Afetadas: PHP 5.4 até PHP 8.x (Patches lançados pelos mantenedores do PHP para 8.2, 8.3, 8.4 e 8.5).
Heap Spraying: Utiliza um bloco de 149 elementos (tabela natural empacotada com bins de 320 bytes) para garantir a reutilização do bloco de memória liberado.
Suporte a SAPI: Projetado para ambientes avaliados sob arquiteturas CGI/FastCGI e servidores front-end compatíveis (como LiteSpeed LSAPI / Apache / Nginx).
Dry Run: Permite despejar o fluxo exato de bytes do payload multipart gerado para análise forense ou depuração usando a flag --dry.
📦 Arquivo requirements.txt
rich>=13.0.0
urllib3>=1.26.0
⚠️ Aviso Legal (Isenção de Responsabilidade)
Este software foi criado exclusivamente para fins educacionais, pesquisa de segurança e uso em auditorias autorizadas (Pentesting). O autor (Ghxstsec) não assume qualquer responsabilidade pelo uso indevido ou danos causados pelo uso inadequado deste script em sistemas não autorizados.