PT-2026-7872 · Unknown · Frankenphp

Abdrrahimdahmani

·

Publicado

2026-02-12

·

Atualizado

2026-03-03

·

CVE-2026-24895

CVSS v3.1

9.8

Crítica

VetorAV: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 👾

Enumeração de Fraquezas

Identificadores relacionados

CVE-2026-24895
GHSA-G966-83W7-6W38
GO-2026-4486
SUSE-SU-2026:0757-1

Produtos afetados

Frankenphp