
Prova de conceito de exploit para CVE-2026-37748, uma vulnerabilidade de upload de arquivo sem restrições no Visitor Management System 1.0 que leva à execução remota de código por meio do upload de webshell em PHP.
| Campo | Informação |
|---|
| ID CVE | CVE-2026-37748 |
| Tipo | Upload de Arquivo Irrestrito → Execução Remota de Código |
| Severidade | Alta (CVSSv3: 7.2) |
| Fornecedor | sanjay1313 |
| Produto | Sistema de Gestão de Visitantes |
| Versão | 1.0 |
| Descobridor | Varad AP Mene |
| Data | 2026-04-16 |
| CWE | CWE-434 |
Existe uma vulnerabilidade crítica de Upload de Arquivo Irrestrito no Sistema de Gestão de Visitantes 1.0 da sanjay1313. A função move_uploaded_file() em vms/php/admin_user_insert.php e vms/php/update_1.php é chamada sem qualquer validação de tipo MIME, extensão de arquivo ou conteúdo. Um administrador autenticado pode enviar um webshell PHP através do campo de upload de imagem e alcançar Execução Remota de Código no servidor acessando o arquivo enviado diretamente via URL.
ID CVE: CVE-2026-37748 CWE: CWE-434 — Upload Irrestrito de Arquivo com Tipo Perigoso CVSSv3: 7.2 Alta (AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H)
O Sistema de Gestão de Visitantes 1.0 é uma aplicação web PHP/MySQL da sanjay1313 no GitHub usada para gerir registos de visitantes em organizações.
URL do Fornecedor: https://github.com/sanjay1313/Visitor-Management-System
vms/php/admin_user_insert.php vms/php/update_1.php
$image = $_FILES['image']['name'];
$tmp = $_FILES['image']['tmp_name'];
move_uploaded_file($tmp, "../images/" . $image);
Sem validação de extensão de arquivo, tipo MIME ou conteúdo.
Passo 1 — Criar arquivo webshell shell.php:
Passo 2 — Iniciar sessão no painel de administração: http://target/vms/ Nome de utilizador: admin Palavra-passe: admin
Passo 3 — Enviar shell.php como imagem de perfil: Navegar para Utilizadores Administradores → Adicionar Novo Administrador Enviar shell.php como foto de perfil
Passo 4 — Executar comandos: http://target/vms/images/shell.php?cmd=id http://target/vms/images/shell.php?cmd=whoami
// 1. Validar extensão do arquivo
$allowed = ['jpg', 'jpeg', 'png', 'gif'];
$ext = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
if (!in_array($ext, $allowed)) {
die("Tipo de arquivo inválido");
}
// 2. Validar tipo MIME
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $_FILES['image']['tmp_name']);
$allowed_mime = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($mime, $allowed_mime)) {
die("Tipo MIME inválido");
}
// 3. Renomear arquivo no servidor
$new_name = uniqid() . '.' . $ext;
move_uploaded_file($_FILES['image']['tmp_name'], "../images/" . $new_name);
| Data | Evento |
|---|---|
| 2026-03-15 | Vulnerabilidade descoberta |
| 2026-03-15 | Reportada à MITRE |
| 2026-04-02 | CVE-2026-37748 atribuído |
| 2026-04-16 | Divulgação pública |
| 2026-04-16 | MITRE notificada sobre a publicação |
| 2026-04-17 | Fornecedor notificado via GitHub Issues |
Varad Arachana Prashant Mene