Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-17544 — Exploit para CVE-2026-17544: escrita OOB (fora dos limites) do bcmath do PHP convertida em RCE somente em memória, contornando disable_functions e open_basedir com um resolvedor sem offsets em tempo de execução. | Kitploit
Ferramentas/GitHubGitHub/r2qa/cve-2026-17544
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebPós-ExploraçãoRed TeamingDesenvolvimento de PayloadsExploração de Binários
GitHubr2qa/cve-2026-17544

CVE-2026-17544

Exploit para CVE-2026-17544: escrita OOB (fora dos limites) do bcmath do PHP convertida em RCE somente em memória, contornando disable_functions e open_basedir com um resolvedor sem offsets em tempo de execução.

Ver Repositório
há 5 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-17544 — Escrita fora dos limites no bcmath do PHP → RCE universal somente em memória

Uma prova de conceito armada para CVE-2026-17544, uma escrita fora dos limites na extensão bcmath reescrita do PHP (bc_str2num). Isso transforma a falha publicamente conhecida de somente DoS em uma primitiva completa e universal de execução remota de código somente em memória que contorna disable_functions e open_basedir ao mesmo tempo.

Somente uso autorizado para pesquisa / educação. Execute isto apenas contra sistemas seus ou nos quais você tenha autorização explícita para testar.

imagem

TL;DR

  • Bug: bc_str2num trunca uma parte fracionária ao usar um scale manual, remove novamente os zeros à direita, mas não atualiza fractional_end. O buffer é dimensionado para o comprimento após o novo corte, enquanto a cópia usa o comprimento anterior ao corte → escrita zero controlada fora dos limites no heap Zend MM.
  • Exploit: a escrita zero OOB zera o refcount de um zend_string vizinho (comprimento preservado) → use-after-free por dessincronização de refcount → leitura/escrita relativa com string gigante → leitura arbitrária absoluta à prova de falhas → resolução de símbolos em tempo de execução → uma chamada de função nativa totalmente somente com dados.
  • Payload: constrói um zend_class_entry falso + function_table inline + zend_function{ handler = zif_shell_exec } falsa e então a chama como um método. A saída do comando é retornada como uma string e entregue na resposta/stdout.
  • Sem offsets codificados. O endereço base, .data e o símbolo alvo são todos resolvidos em tempo de execução por varredura de memória — portanto, um único arquivo funciona em diferentes builds e distribuições.

Modelo de ameaça — leia isto primeiro

Esta é uma primitiva de escape de sandbox / pós-exploração, não um RCE apenas com entrada remota.

CenárioResultado
O atacante já consegue executar PHP (webshell, desserialização, sink de eval), mas está limitado por disable_functions + open_basedir✅ RCE nativo (este PoC)

Uma única chamada bcmath com entrada do atacante fornece uma escrita zero OOB cega, sem retorno. O RCE completo exige execução arbitrária de PHP para preparar o heap, construir as primitivas de leitura/escrita e executar o resolvedor — nada disso pode ser expresso como um argumento de função. Portanto, o teto realista para exposição apenas com entrada é um ataque remoto de negação de serviço; a execução de código exige um contexto existente de execução de PHP, do qual este PoC então libera o sandbox.


Versões afetadas

O bug existe somente no bcmath reescrito (linha PHP 8.4 / 8.5):

Verificado de ponta a ponta (uid=0, saída capturada) em PHP 8.4.23 e PHP 8.5.8, amd64, com o mesmo arquivo não modificado — o layout das structs Zend é idêntico entre 8.4 / 8.5.


Requisitos / premissas

  • Linux amd64.
  • Um binário PHP 8.4/8.5 na faixa vulnerável com bcmath habilitado.
  • Mapeamento binário contíguo (toda distribuição padrão / build de produção). A varredura de base em tempo de execução desce página por página de .text até o cabeçalho ELF; isso é seguro em qualquer binário com mapeamento contíguo. Apenas builds artificiais -z separate-code com lacunas não mapeadas de 2 MB não podem ser resolvidos automaticamente por uma varredura cega (não vistos em produção).
  • Para entrega via web, é necessário isolamento de requisições para que um exit() por requisição não derrube o servidor: php-fpm, Apache mod_php ou o servidor embutido com PHP_CLI_SERVER_WORKERS>0.

Uso

CLI

root@kitploit:~
php exploit.php "id; uname -a"

Web (pós-exploração, dentro de um contexto PHP em sandbox)

Implante como, ex.: shell.php, depois:

root@kitploit:~
GET  /shell.php?cmd=id
POST cmd=id

A saída do comando é capturada via zif_shell_exec e gravada no corpo da resposta.


Como funciona (detalhado)

  1. Gatilho + preparação (groom). Espalhe strings de tamanho fixo, abra um buraco e execute o bccomp() vulnerável para que a escrita zero OOB atinja apenas o refcount de um zend_string vizinho (comprimento preservado).
  2. UAF por dessincronização de refcount. A string vítima é liberada prematuramente enquanto uma referência ainda permanece pendente.
  3. String gigante. O slot liberado é reocupado por um objeto; o campo de comprimento da string pendente se torna um valor enorme → leitura/escrita relativa sobre o heap.
  4. Leitura absoluta. Um zend_reference falso (via indireção) fornece uma leitura arbitrária absoluta à prova de falhas que nunca toca o cabeçalho com refcount do alvo.
  5. Resolução. A partir de um ponteiro .text vazado: desça em passos de página até a magic ELF (base), analise os cabeçalhos de programa para encontrar .data e então varra .data em busca do zend_function_entry de shell_exec cujo handler aponte para .text.
  6. Chamada somente com dados. Construa um zend_class_entry falso, uma inline com um único bucket (hash correto, cadeia de colisão terminada) e uma falsa cujo handler seja ; corrompa o ponteiro de classe do objeto de sondagem e invoque o método. A saída é retornada e exibida.

Arquivos

  • exploit.php — o exploit universal somente em memória (CLI + web).

Créditos

  • Prova de conceito pública original de DoS: boreas37/cve-2026-17544-poc.
  • Técnicas de divulgação de memória / chamada somente com dados inspiradas em pesquisas anteriores de exploração de PHP.

Isenção de responsabilidade

Fornecido para pesquisa e educação em segurança. O autor não é responsável pelo uso indevido. Não implante contra sistemas nos quais você não está autorizado a testar.

Baixar ferramenta
A aplicação apenas chama uma função bcmath com entrada bruta do usuário, ex.: bccomp($_POST['v'])❌ Apenas DoS / crash
Ramo do PHPVulnerável
7.x, 8.0 – 8.3Não (libbcmath antigo, bc_str2num diferente)
8.4.0 – 8.4.23Sim
8.5.0 – 8.5.8Sim
≥ 8.4.24 / ≥ 8.5.9Corrigido
function_table
zend_string
zend_internal_function
zif_shell_exec