Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2022-2274 — OpenSSL-src Corrupción de Memoria Heap con Operación de Clave Privada RSA : CVE-2022-2274 | Kitploit
Herramientas/GitHubGitHub/desmondsanctity/cve-2022-2274
Forensia de MemoriaAnálisis de VulnerabilidadesExplotaciónCriptografíaAnálisis de BinariosAprendizaje y Educación
GitHubdesmondsanctity/cve-2022-2274

CVE-2022-2274

OpenSSL-src Corrupción de Memoria Heap con Operación de Clave Privada RSA : CVE-2022-2274

Ver Repositorio
125hace 3 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Corrupción de Memoria Heap en OpenSSL-src con Operación de Clave Privada RSA : CVE-2022-2274

Resumen

OpenSSL-src-rust es un código fuente y lógica para compilar OpenSSL desde el código fuente escrito en Rust y empaquetado como una crate. Actualmente hay dos ramas mantenidas, que corresponden a las dos versiones de OpenSSL mantenidas: main que compila OpenSSL 3.0 y release/111 que compila OpenSSL 1.1.1.

El lanzamiento de OpenSSL 3.0.4 introdujo un grave error en la implementación de RSA para CPUs X86_64 que soportan las instrucciones AVX512IFMA. Este problema hace que la implementación RSA con claves privadas de 2048 bits sea incorrecta en dichas máquinas y se producirá corrupción de memoria durante el cálculo. Como consecuencia de la corrupción de memoria, un atacante podría desencadenar una ejecución remota de código en la máquina que realiza el cálculo. Los servidores SSL/TLS u otros servidores que usan claves privadas RSA de 2048 bits que se ejecutan en máquinas que soportan instrucciones AVX512IFMA de la arquitectura X86_64 se ven afectados por este problema.

Esta vulnerabilidad hizo que la compilación de OpenSSL versión 3.0 usando openssl-src-rust fallara y se bloqueara en el proceso en la máquina que soporta instrucciones AVX512IFMA de la arquitectura X86_64.

Producto

openssl-src(Rust)

Versión Probada

>= 300.0.8, < 300.0.9

Detalles

Problema: Corrupción de memoria heap en openssl-src 300.0.8 con operación de clave privada RSA (GHSA-735f-pg76-fxc4)

Los procesos para reproducir el error o el bloqueo son los siguientes:

Build OpenSSL-3.0.4 on a CPU with AVX512 (this demonstration uses a Core i7-1065G7) with:

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

Run a test:

make V=1 TESTS=test_exp test

The sanitizer complains:

==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

El descubridor del problema propuso que commits anteriores commits al código de OpenSSL podrían haber introducido el error. El commit fue para arreglar BN_mod_exp_consttime para que no produzca un resultado no reducido. La función bn_reduce_once_in_place causó la corrupción de memoria heap.

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);

Esto se solucionó con una actualización encontrada en este commit que indicaba que bn_reduce_once_in_place espera el número de BN_ULONG, pero factor_size es el tamaño en bits del módulo. Esta actualización se incluyó en OpenSSL 3.0.5 lanzado el 12 de octubre de 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);

Impacto

Un atacante podría explotar teóricamente esta vulnerabilidad enviando una transmisión a través de una red (por ejemplo, una red TCP/IP). Una explotación exitosa podría resultar en:

Descargar herramienta