PT-2026-7872 · Unknown · Frankenphp
Abdrrahimdahmani
·
Publicado
2026-02-12
·
Atualizado
2026-03-03
·
CVE-2026-24895
CVSS v3.1
9.8
Crítica
| Vetor | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
Nome do Software Vulnerável e Versões Afetadas
Versões do FrankenPHP anteriores à 1.11.2
Descrição
A lógica de divisão de caminho CGI do FrankenPHP manipula inadequadamente caracteres Unicode durante a conversão de caixa. A lógica calcula o índice de divisão para encontrar
.php em uma cópia do caminho da requisição em minúsculas, mas aplica esse índice de byte ao caminho original. Como strings.ToLower() em Go pode aumentar o comprimento em bytes de certos caracteres UTF-8, o índice calculado pode não se alinhar com a posição correta na string original. Isso resulta em um SCRIPT NAME e SCRIPT FILENAME incorretos, potencialmente fazendo com que o FrankenPHP execute um arquivo diferente daquele pretendido pela URI. A vulnerabilidade reside na função splitPos() e no seu uso dentro de splitCgiPath(). O problema é que o índice retornado representa um offset de byte dentro do caminho em minúsculas, mas este índice é usado para fatiar o caminho original. Esta lógica depende da suposição de que o comprimento do caminho em minúsculas é igual ao comprimento do caminho original, o que é falso para certos caracteres Unicode. Por exemplo, o caractere Ⱥ (U+023A) requer 2 bytes em UTF-8, mas seu equivalente em minúsculas ⱥ (U+2C65) requer 3 bytes. Se o caminho contiver tais caracteres antes da extensão .php, o índice calculado no caminho em minúsculas será maior que a posição correspondente no caminho original. Quando aplicado ao caminho original, a divisão ocorre no offset de byte errado. Isso pode fazer com que o servidor trate uma porção maior do caminho como o nome do script, efetivamente permitindo que um atacante manipule o SCRIPT FILENAME. Esta é uma questão de bypass de limite de segurança e confusão de caminho que pode levar à Execução Remota de Código (RCE) em configurações onde os usuários podem fazer upload de arquivos para um caminho acessível. A vulnerabilidade pode ser explorada elaborando uma requisição com caracteres Unicode específicos para forçar o FrankenPHP a calcular o SCRIPT FILENAME como terminando em um arquivo com uma extensão segura (ex: payload.txt), enquanto a requisição parece conter .php para a lógica interna do roteador. A função vulnerável é splitPos(), que é usada por splitCgiPath(). Os parâmetros vulneráveis são as variáveis path e split usadas dentro dessas funções.Recomendações
Versões anteriores à 1.11.2 devem ser atualizadas para a versão 1.11.2 ou posterior.
Exploit
Correção
RCE
Encontrou algum problema na descrição? Tem algo a acrescentar? Fique à vontade para nos escrever 👾
Identificadores relacionados
Produtos afetados
Frankenphp