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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-26198-analysis — Глубокое погружение в критическую SQL-инъекцию в Python-ORM Ormar — воспроизведение, исправление и тесты | Kitploit
Инструменты/GitHubGitHub/sergicortesabadia/cve-2026-26198-analysis
Анализ уязвимостейАнализ КодаВеб-безопасностьСтатьи и ИсследованияОбучение и Образование
GitHubsergicortesabadia/cve-2026-26198-analysis

CVE-2026-26198-analysis

Глубокое погружение в критическую SQL-инъекцию в Python-ORM Ormar — воспроизведение, исправление и тесты

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

Популярное

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

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

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

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

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

CVE-2026-26198 — SQL-инъекция в Ormar ORM

Глубокий анализ критической (CVSS 9.8) уязвимости SQL-инъекции в Python async ORM, включая воспроизведение, анализ и исправление.

Уязвимость

Ormar — это популярный асинхронный мини-ORM для Python, часто используемый вместе с FastAPI и Starlette. Версии 0.9.9–0.22.0 содержат уязвимость SQL-инъекции в агрегатных методах min() и max().

Корневая причина — ошибка «частичной реализации»: в то время как sum() и avg() проверяют, что параметр столбца ссылается на реальное числовое поле, min() и max() полностью пропускают эту проверку и передают пользовательский ввод напрямую в sqlalchemy.text() — необработанный SQL-приёмник.

Атакующий может внедрить подзапрос в качестве параметра «столбца»:

root@kitploit:~
# Ожидаемое использование
await Item.objects.max("price")  # → SELECT max(price) FROM items

# Вектор атаки
await Item.objects.max("(SELECT password FROM users LIMIT 1)")
# → SELECT max((SELECT password FROM users LIMIT 1)) FROM items
# Возвращает пароль администратора!

Краткие факты

АтрибутЗначение
ID CVECVE-2026-26198
Оценка CVSS9.8 (критическая)
CWECWE-89: SQL-инъекция
Затронутоormar 0.9.9 – 0.22.0
Исправлено вormar 0.23.0
Опубликовано24 февраля 2026 г.
Нужна аутентификация?Нет — без аутентификации

Структура проекта

root@kitploit:~
├── README.md               ← Вы здесь
├── vulnerable_app.py       ← Минимальное FastAPI-приложение с уязвимым паттерном
├── exploit_demo.py         ← Безопасный PoC, демонстрирующий инъекцию в действии
├── patched_app.py          ← Исправленная версия с валидацией ввода
├── test_vulnerability.py   ← Тесты, доказывающие наличие уязвимости и работоспособность исправления
├── requirements.txt
└── analysis/
    └── root_cause.md       ← Подробный анализ ошибки на уровне кода

Запуск демонстрации

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-26198-analysis.git
cd CVE-2026-26198-analysis
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Запуск тестов (внешняя БД не требуется — используется SQLite)
python -m pytest test_vulnerability.py -v

# Запуск интерактивной демонстрации эксплойта
python exploit_demo.py

Исправление

Исправление проверяет, что параметр столбца соответствует реальному полю модели, прежде чем он попадёт в sqlalchemy.text(). Это реализовано через подход с белым списком: разрешены только имена столбцов, существующие в определениях полей модели.

Реализацию см. в patched_app.py, полный разбор — в analysis/root_cause.md.

Ключевые выводы

  1. ORM не являются автоматической защитой от SQL-инъекций. Если метод ORM принимает необработанную строку и передаёт её в текстовое выражение, это так же опасно, как написание необработанного SQL.
  2. Частичная валидация хуже, чем её отсутствие. Тот факт, что sum()/avg() были проверены, а min()/max() — нет, создал ложное чувство безопасности.
  3. Используйте белый список, а не чёрный. Исправление проверяет соответствие известным корректным именам столбцов, а не пытается фильтровать вредоносные паттерны.

Ссылки

  • Консультация GitHub (GHSA-xxh2-68g9-8jqr)
  • Запись NVD
  • Репозиторий Ormar

Лицензия

MIT

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