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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-44338-Lab — Лаборатория на базе Docker, демонстрирующая обход аутентификации CVE-2026-44338 в устаревшем Flask API PraisonAI. Включает уязвимые и исправленные сервисы с PoC-скриптом для локального исследования безопасности. | Kitploit
Инструменты/GitHubGitHub/rootdirective-sec/cve-2026-44338-lab
Анализ уязвимостейЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияОбучение и ОбразованиеЛаборатории и Практика
GitHubrootdirective-sec/cve-2026-44338-lab

CVE-2026-44338-Lab

Лаборатория на базе Docker, демонстрирующая обход аутентификации CVE-2026-44338 в устаревшем Flask API PraisonAI. Включает уязвимые и исправленные сервисы с PoC-скриптом для локального исследования безопасности.

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

Популярное

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

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

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

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

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

CVE-2026-44338 Лаборатория обхода аутентификации PraisonAI

Локальная Docker-лаборатория для CVE-2026-44338 — обхода аутентификации в устаревшем Flask API сервере PraisonAI.

Данная лаборатория демонстрирует состояние неаутентифицированного доступа на устаревших маршрутах API. Она намеренно использует безопасное воспроизведение на уровне маршрутов вместо полного развёртывания PraisonAI, чтобы доказательство оставалось сфокусированным на ошибке аутентификации и не вызывало реальных рабочих процессов агентов или внешних вызовов LLM.

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

CVE-2026-44338 затрагивает версии PraisonAI >= 2.5.6 и <= 4.6.33.

В уязвимом устаревшем API сервере аутентификация была отключена по умолчанию. В результате неаутентифицированный вызывающий, имеющий доступ к API серверу, мог получить доступ к /agents и маршруту рабочего процесса /chat без токена-носителя.

Проблема была исправлена в PraisonAI 4.6.34 путём изменения поведения по умолчанию на требование аутентификации, если она не отключена явно.

Первопричина

В уязвимой версии устаревший API сервер использовал небезопасные настройки аутентификации по умолчанию:

root@kitploit:~
AUTH_ENABLED = False
AUTH_TOKEN = None

def check_auth():
    if not AUTH_ENABLED:
        return True

Поскольку check_auth() возвращал True, когда аутентификация была отключена, защищённые маршруты оставались открытыми.

Затронутые маршруты включали:

  • GET /agents
  • POST /chat

Исправленная версия изменяет стандартное положение так, что аутентификация включена, если не отключена явно через конфигурацию.

Детали исправления на уровне исходного кода

Основная проблема не была сложным примитивом эксплуатации. Она возникла из-за небезопасных настроек по умолчанию в устаревшем Flask API сервере.

Уязвимое поведение в v4.6.33

В v4.6.33 аутентификация была отключена по умолчанию:

root@kitploit:~
AUTH_ENABLED = False
AUTH_TOKEN = None

Затем проверка аутентификации давала сбой:

root@kitploit:~
def check_auth():
    if not AUTH_ENABLED:
        return True

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

Уязвимый поток был:

root@kitploit:~
AUTH_ENABLED = False
        ↓
check_auth() возвращает True
        ↓
GET /agents разрешён
POST /chat разрешён
        ↓
неаутентифицированный вызывающий может получить доступ к метаданным агента и достичь маршрута запуска рабочего процесса

Важная часть: /chat был не просто конечной точкой статуса. Он принимал сообщение пользователя и затем вызывал исполнитель рабочего процесса PraisonAI, используя agents.yaml.

Исправленное поведение в v4.6.34

В v4.6.34 поведение по умолчанию было изменено на требование аутентификации, если оператор явно её не отключает:

root@kitploit:~
AUTH_ENABLED = os.environ.get("PRAISONAI_API_AUTH", "enabled").strip().lower() != "disabled"
AUTH_TOKEN = os.environ.get("PRAISONAI_API_TOKEN") or None

Исправленная версия также улучшает обработку токенов:

  • аутентификация включена по умолчанию
  • отключение аутентификации требует явного выбора конфигурации
  • если токен не предоставлен, пока аутентификация включена, сервер генерирует случайный токен
  • сравнение токенов использует secrets.compare_digest()
  • API сервер по умолчанию привязывается к 127.0.0.1, а не открывается на всех интерфейсах

Исправленный поток:

root@kitploit:~
AUTH_ENABLED = True по умолчанию
        ↓
запрос должен содержать действительный Bearer токен
        ↓
отсутствие или неверный токен возвращает 401
        ↓
/agents и /chat больше недоступны анонимно

Эта лаборатория отражает ту разницу на уровне исходного кода:

root@kitploit:~
vuln    -> аутентификация отключена по умолчанию, неаутентифицированные запросы возвращают 200
patched -> аутентификация требуется по умолчанию, неаутентифицированные запросы возвращают 401

Дизайн лаборатории

Лаборатория содержит два локальных сервиса:

СервисURLПоведение
vulnhttp://127.0.0.1:8081Воспроизводит уязвимое поведение с открытым доступом
patchedhttp://127.0.0.1:8082Требует аутентификации через bearer-токен

Оба сервиса привязаны только к 127.0.0.1.

Маршрут /chat использует фиктивный исполнитель вместо реального рабочего процесса PraisonAI. Это предоставляет наблюдаемое доказательство того, что неаутентифицированный запрос достигает пути запуска рабочего процесса, не вызывая внешних побочных эффектов.

Структура репозитория

root@kitploit:~
.
├── docker-compose.yml
├── vuln
│   ├── Dockerfile
│   └── start_server.py
├── patched
│   ├── Dockerfile
│   └── start_server.py
├── poc
│   └── poc.py
└── .gitignore
└── README.md

Запуск

root@kitploit:~
docker compose up --build -d
python3 poc/poc.py

Ожидаемый результат

Уязвимый сервис разрешает неаутентифицированный доступ:

root@kitploit:~
=== vuln ===
[unauthenticated] GET /agents
status: 200

[unauthenticated] POST /chat
status: 200

verdict: LIKELY_VULNERABLE

Исправленный сервис блокирует неаутентифицированный доступ:

root@kitploit:~
=== patched ===
[unauthenticated] GET /agents
status: 401

[unauthenticated] POST /chat
status: 401

verdict: NOT_VULNERABLE_OR_PROTECTED

Итоговая ожидаемая сводка:

root@kitploit:~
vuln:    LIKELY_VULNERABLE
patched: NOT_VULNERABLE_OR_PROTECTED

Ручная проверка

Проверьте уязвимый маршрут:

root@kitploit:~
curl -i http://127.0.0.1:8081/agents

Ожидаемый уязвимый ответ:

root@kitploit:~
HTTP/1.1 200 OK

Проверьте исправленный маршрут:

root@kitploit:~
curl -i http://127.0.0.1:8082/agents

Ожидаемый исправленный ответ:

root@kitploit:~
HTTP/1.1 401 UNAUTHORIZED

Журналы сервера должны чётко показать разницу:

root@kitploit:~
vuln:    "GET /agents HTTP/1.1" 200
patched: "GET /agents HTTP/1.1" 401

Очистка

root@kitploit:~
docker compose down -v

Замечания по безопасности

Эта лаборатория предназначена только для локального исследования безопасности.

PoC не выполняет:

  • команды оболочки
  • использует реальные ключи API
  • вызывает внешних LLM-провайдеров
  • сканирует внешние сети
  • запускает реальные рабочие процессы агентов PraisonAI

Ссылки

  • GitHub Advisory: GHSA-6rmh-7xcm-cpxj https://github.com/MervinPraison/PraisonAI/security/advisories/GHSA-6rmh-7xcm-cpxj

  • NVD: CVE-2026-44338 https://nvd.nist.gov/vuln/detail/CVE-2026-44338

  • OSV: GHSA-6rmh-7xcm-cpxj https://osv.dev/vulnerability/GHSA-6rmh-7xcm-cpxj

  • Уязвимый исходник: PraisonAI v4.6.33 src/praisonai/api_server.py https://raw.githubusercontent.com/MervinPraison/PraisonAI/v4.6.33/src/praisonai/api_server.py

  • Исправленный исходник: PraisonAI v4.6.34 src/praisonai/api_server.py https://raw.githubusercontent.com/MervinPraison/PraisonAI/v4.6.34/src/praisonai/api_server.py

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