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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-0778 — Эксплойт для доказательства концепции уязвимости CVE-2022-0778, связанной с отказом в обслуживании в функции BN_mod_sqrt() библиотеки OpenSSL, с лабораторной средой на основе Docker для тестирования и анализа. | Kitploit
Инструменты/GitHubGitHub/jeongjunsoo/cve-2022-0778
Анализ уязвимостейЭксплуатацияКриптографияОбучение и ОбразованиеЛаборатории и Практика
GitHubjeongjunsoo/cve-2022-0778

CVE-2022-0778

Эксплойт для доказательства концепции уязвимости CVE-2022-0778, связанной с отказом в обслуживании в функции BN_mod_sqrt() библиотеки OpenSSL, с лабораторной средой на основе Docker для тестирования и анализа.

Репозиторий
12 лет назадЕщё не проверено

Популярное

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

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

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

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

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

CVE-2022-0778

Участники

  • 정준수(@jeongjunsoo)

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

  • Уязвимость CVE-2022-0778 затрагивает функцию BN_mod_sqrt(), вычисляющую квадратный корень по модулю простого числа в OpenSSL.

  • Когда эта функция обрабатывает сертификаты, основанные не на простом числе, а злонамеренно изменённые, незапатченные серверы могут быть подвержены DoS-атаке.


Целевые версии

  • OpenSSL 1.0.2
  • OpenSSL 1.1.1
  • OpenSSL 3.0

До патча

root@kitploit:~
i = 1;
if (!BN_mod_sqr(t, b, p, ctx))
    goto end;
while (!BN_is_one(t)) {
    i++;
    if (i == e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    if (!BN_mod_mul(t, t, t, p, ctx))
        goto end;
}

  • Согласно этому алгоритму, когда значение i достигает значения e, цикл должен завершиться.
  • Однако при определённых входных данных можно сделать так, что и i, и e будут равны 1, и тогда цикл не завершится, возникнет бесконечный цикл.
  • Это приводит к отказу в обслуживании.

  • После патча

    root@kitploit:~
    for (i = 1; i < e; i++) {
        if (i == 1) {
            if (!BN_mod_sqr(t, b, p, ctx))
                goto end;
        } else {
            if (!BN_mod_mul(t, t, t, p, ctx))
                goto end;
        }
        if (BN_is_one(t))
            break;
    }
    /* If not found, a is not a square or p is not prime. */
    if (i >= e) {
        ERR_raise(ERR_LIB_BN, BN_R_NOT_A_SQUARE);
        goto end;
    }
    
    
    • Исходный оператор while был заменён на for.
    • Соответственно, цикл автоматически завершается, когда значение i достигает e.
    • Данный патч устраняет риск бесконечного цикла.

    Настройка окружения и запуск

    • Настройка Ubuntu

    • docker compose up -d Запуск тестового окружения

    • docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345

    • docker compose exec curl top Проверка состояния процессов

    • docker compose exec curl bash Запуск bash

    • curl -k https://172.17.0.1:12345 Отправка HTTPS запроса на порт 12345


    Выполнение

    • Для практики подготовьте три окна терминала (A, B, C).

    • В терминале A выполните команду docker run -it --rm -p 12345:12345 yywing/cve-2022-0778 --addr 0.0.0.0:12345 для запуска Docker образа.

    • Затем в терминале B выполните команду docker compose exec curl top, чтобы просмотреть состояние текущих процессов.

    • Наконец, в терминале C введите docker compose exec curl bash, затем отправьте HTTPS запрос на порт 12345 командой curl -k https://172.17.0.1:12345.

    Результат

    • В результате выполнения команды top в терминале B видно, что процесс curl использует почти 100% ресурсов CPU. Это произошло из-за попадания в бесконечный цикл.

    Заключение

    • Данная уязвимость возникла из-за отсутствия проверки, является ли число простым.
    • Для предотвращения проблемы бесконечного цикла патч заменил оператор while на for.

    Ссылки

    • https://github.com/drago-96/CVE-2022-0778

    • https://hackyboiz.github.io/2022/03/19/syru/cve-2022-0778/

    • https://github.com/yywing/cve-2022-0778/

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