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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2022-2274 — OpenSSL-src Повреждение памяти в куче при операции с закрытым ключом RSA : CVE-2022-2274 | Kitploit
Инструменты/GitHubGitHub/desmondsanctity/cve-2022-2274
Криминалистика памятиАнализ уязвимостейЭксплуатацияКриптографияАнализ Бинарных ФайловОбучение и Образование
GitHubdesmondsanctity/cve-2022-2274

CVE-2022-2274

OpenSSL-src Повреждение памяти в куче при операции с закрытым ключом RSA : CVE-2022-2274

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

Популярное

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

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

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

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

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

OpenSSL-src: повреждение кучи в памяти при операции с закрытым ключом RSA : CVE-2022-2274

Сводка

OpenSSL-src-rust — это исходный код и логика для сборки OpenSSL из исходников, написанные на языке Rust и упакованные в виде крейта. В настоящее время поддерживаются две ветки, соответствующие двум поддерживаемым версиям OpenSSL: main, собирающая OpenSSL 3.0, и release/111, собирающая OpenSSL 1.1.1.

Релиз OpenSSL 3.0.4 содержит серьёзную ошибку в реализации RSA для процессоров X86_64, поддерживающих инструкции AVX512IFMA. Эта проблема делает реализацию RSA с 2048-битными закрытыми ключами некорректной на таких машинах, и во время вычислений происходит повреждение памяти. Вследствие повреждения памяти злоумышленник может вызвать удалённое выполнение кода на машине, выполняющей вычисления. SSL/TLS-серверы или другие серверы, использующие 2048‑битные закрытые ключи RSA и работающие на машинах с поддержкой инструкций AVX512IFMA архитектуры X86_64, подвержены этой проблеме.

Эта уязвимость приводила к тому, что сборка OpenSSL версии 3.0 с помощью openssl-src-rust завершалась с ошибкой и падением на машинах, поддерживающих инструкции AVX512IFMA архитектуры X86_64.

Продукт

openssl-src(Rust)

Протестированная версия

>= 300.0.8, < 300.0.9

Подробности

Проблема: повреждение кучи в памяти в openssl-src 300.0.8 при операции с закрытым ключом RSA (GHSA-735f-pg76-fxc4)

Процесс воспроизведения ошибки или падения:

Соберите OpenSSL-3.0.4 на процессоре с AVX512 (в этой демонстрации используется Core i7-1065G7) с:

CFLAGS="-O3 -g -fsanitize=address" ./config
make

Запустите тест:

make V=1 TESTS=test_exp test

Санитайзер сообщает:

==481618==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60c000089400 at pc 0x7f01e32a9509 bp 0x7fff643ec100 sp 0x7fff643ec0f8
READ of size 8 at 0x60c000089400 thread T0
    #0 0x7f01e32a9508 in bn_select_words crypto/bn/rsaz_exp.h:64
    #1 0x7f01e32a9508 in bn_reduce_once_in_place crypto/bn/rsaz_exp.h:74
    #2 0x7f01e32a9508 in ossl_rsaz_mod_exp_avx512_x2 crypto/bn/rsaz_exp_x2.c:223
    #3 0x7f01e3287dc8 in BN_mod_exp_mont_consttime_x2 crypto/bn/bn_exp.c:1448
    #4 0x4042c3 in test_mod_exp_x2 test/exptest.c:260
    #5 0x40611a in run_tests test/testutil/driver.c:370
    #6 0x4039ba in main test/testutil/main.c:30
    #7 0x7f01e2c29319 in __libc_start_call_main (/usr/lib/libc.so.6+0x29319)
    #8 0x7f01e2c293e4 in __libc_start_main_impl (/usr/lib/libc.so.6+0x293e4)
    #9 0x403c40 in _start (/home/xry111/sources/lfs/openssl-3.0.4/test/exptest+0x403c40)

0x60c000089400 is located 0 bytes to the right of 128-byte region [0x60c000089380,0x60c000089400)
allocated by thread T0 here:
    #0 0x7f01e3ae5107 in __interceptor_malloc ../../../../libsanitizer/asan/asan_malloc_linux.cpp:69
    #1 0x7f01e34aa7a8 in CRYPTO_zalloc crypto/mem.c:197

SUMMARY: AddressSanitizer: heap-buffer-overflow crypto/bn/rsaz_exp.h:64 in bn_select_words
Shadow bytes around the buggy address:
  0x0c1880009230: 00 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa
  0x0c1880009240: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c1880009250: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c1880009260: 00 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa
  0x0c1880009270: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c1880009280:[fa]fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c1880009290: 00 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa
  0x0c18800092a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c18800092b0: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c18800092c0: 00 00 00 00 00 00 00 00 fa fa fa fa fa fa fa fa
  0x0c18800092d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==481618==ABORTING

Обнаружитель проблемы предположил, что предыдущие коммиты в коде OpenSSL могли внести эту ошибку. Коммит был направлен на исправление BN_mod_exp_consttime, чтобы он не возвращал несведённый результат. Функция bn_reduce_once_in_place вызывала повреждение кучи в памяти.

crypto/bn/rsaz_exp_x2.c

@@ -220,6 +220,9 @@ int ossl_rsaz_mod_exp_avx512_x2(BN_ULONG *res1,
    from_words52(res1, factor_size, rr1_red);
    from_words52(res2, factor_size, rr2_red);

    bn_reduce_once_in_place(res1, /*carry=*/0, m1, storage, factor_size);
    bn_reduce_once_in_place(res2, /*carry=*/0, m2, storage, factor_size);

Это было исправлено обновлением, представленным в этом коммите, в котором указано, что bn_reduce_once_in_place ожидает количество BN_ULONG, но factor_size — это размер модуля в битах. Это обновление было включено в OpenSSL 3.0.5, выпущенный 12 октября 2022 года.

crypto/bn/rsaz_exp_x2.c

@@ -257,6 +257,9 @@ int ossl_rsaz_mod_exp_avx512_x2(BN_ULONG *res1,
    from_words52(res1, factor_size, rr1_red);
    from_words52(res2, factor_size, rr2_red);

    /* bn_reduce_once_in_place expects number of BN_ULONG, not bit size */
    factor_size /= sizeof(BN_ULONG) * 8;

    bn_reduce_once_in_place(res1, /*carry=*/0, m1, storage, factor_size);
    bn_reduce_once_in_place(res2, /*carry=*/0, m2, storage, factor_size);

Воздействие

Теоретически, злоумышленник может использовать эту уязвимость, отправив данные по сети (например, через TCP/IP). Успешная эксплуатация может привести к:

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