Vulnerabilidades en GnuPG que permiten eludir la verificación y ejecutar su propio código

En la conferencia 39C3 (Chaos Communication Congress) que se lleva a cabo en Alemania, se revelaron detalles sobre 12 vulnerabilidades desconocidas y no corregidas (0-day) en la herramienta GnuPG (GNU Privacy Guard), que proporciona utilidades compatibles con los estándares OpenPGP y S/MIME para la encriptación de datos, la gestión de firmas electrónicas, la administración de claves y el acceso a repositorios públicos de claves. Las vulnerabilidades más peligrosas permiten eludir la verificación de la firma digital y logran la ejecución de código al procesar datos encriptados en formato ASCII (ASCII Armor). Se prometen publicar prototipos funcionales de exploits y parches más adelante. Los identificadores CVE aún no han sido asignados.

Las vulnerabilidades son causadas por errores en el código para procesar datos y analizar formatos, y no están relacionadas con fallas en los algoritmos criptográficos. Por ejemplo, un error en el analizador provoca un fallo al determinar los datos realmente firmados, creando condiciones en las que los datos verificados pueden no coincidir con los firmados, lo que permite al atacante reemplazar el texto claro sin acceso a la clave privada.

Problemas identificados:

  • Un error en el código del analizador de datos encriptados, que se distribuyen en formato ASCII-Armor (archivos de texto con el bloque «BEGIN/END PGP ARMORED FILE»), que provoca escritura en un área de memoria fuera de los límites del búfer. Este problema puede conducir a la ejecución de código al procesar datos especialmente formateados en gpg. La vulnerabilidad se manifiesta en la función armor_filter() y es causada por un incremento doble del contador «n» en el bucle «for» — a pesar de que se especifica «n++» dentro del bucle, el contador aumenta también en el cuerpo del bucle al escribir datos en el búfer «buf[n++]». Como resultado, se escribe un byte adicional fuera del búfer, y la variable de tamaño «ret_len» se establece en un valor que excede el real.
  • La posibilidad de crear o sobrescribir cualquier archivo, en la medida en que lo permitan los permisos de acceso actuales, debido a una manipulación incorrecta del contenido del campo «filename» en el paquete de datos. Esta vulnerabilidad puede ser utilizada para ejecutar código en el sistema al ejecutar los comandos «gpg --decrypt poc.enc» y «gpg poc.enc» para visualizar el archivo poc.enc enviado por el atacante. Se puede lograr la ejecución de código, por ejemplo, a través de la creación de archivos ~/ .bash_completion o ~/ .ssh/authorized_keys.
  • La posibilidad de sustituir el texto claro mostrado al usuario al especificar la opción «—decrypt» y la verificación utilizando firmas digitales proporcionadas por separado (Detached Signature, que se crean con la opción «—detach-sig» y se entregan en un archivo sig separado). El problema radica en que al enviar separadamente el mensaje y el archivo sig, un atacante que controle el tráfico intermedio (MITM) puede modificar el archivo sig de tal manera que la verificación siga siendo exitosa, pero al visualizar el mensaje desde el archivo sig utilizando la opción «—decrypt», se mostrará un contenido diferente. echo Plaintext > plaintext gpg —detach-sig plaintext # modificación plaintext.sig por parte del atacante añadiendo texto adicional gpg —verify plaintext.sig plaintext # verificado gpg —decrypt plaintext.sig # verificado, pero se muestra otro texto
  • La posibilidad de complementar un mensaje firmado con datos arbitrarios manteniendo la verificación de la firma como exitosa. El problema surge debido a un recorte de datos en el límite de 20000 caracteres al calcular el hash.
  • Verificación incorrecta de los códigos de cifrado autenticado (MDC — Modification Detection Codes), permitiendo manipular paquetes cifrados de tal forma que al ser descifrados, el contenido recibido sea procesado como otro tipo de paquete (por ejemplo, percibido como una clave pública destinada a la publicación).
  • La posibilidad de insertar datos adicionales en las firmas CS (Cleartext Signature), creadas utilizando el flag «—not-dash-escaped» o convertidas de firmas proporcionadas por separado (Detached Signature). Esta vulnerabilidad puede ser utilizada para crear una falsa impresión en el usuario sobre qué datos han sido realmente firmados. Por ejemplo, el usuario puede descargar de fuentes confiables una clave correcta para verificar la firma digital, pero un atacante durante un ataque MITM puede sustituir la imagen ISO que el usuario descarga y añadir un hash adicional a la firma de la imagen, de tal manera que la verificación de la imagen sustituida pase exitosamente si en el sistema se posee una clave de verificación correcta.
  • Inserción de datos adicionales en la representación ASCII de la firma CS (Cleartext Signature) a través de la inserción de un carácter con código nulo. Esta vulnerabilidad, por ejemplo, permite insertar texto arbitrario en el encabezado Hash.
  • Interpretación incorrecta del formato OpenPGP, lo que permite que el mensaje «One-Pass Signed Message» en formato ASCII sea procesado como un mensaje de «Cleartext Signature» tras un cambio específico en el encabezado. Esta vulnerabilidad permite reemplazar los datos firmados originales con contenido malicioso, manteniendo la apariencia de una verificación exitosa.
  • Falta de separación clara en la salida de información sobre el éxito de la verificación de la firma digital y el contenido del mensaje, lo que permite crear mensajes no firmados falsificados que, al ejecutar «gpg —decrypt», parecen auténticos.
  • Posibilidad de crear mensajes OpenPGP que serán procesados de manera diferente en gpg que en otras implementaciones de OpenPGP. El problema es causado por la forma en que se manejan las cadenas muy largas en la representación ASCII de los datos OpenPGP.
  • Generación de condiciones durante la verificación de la firma digital para revertir el algoritmo de verificación del hash a un SHA1 inseguro.
  • Posibilidad de sustituir claves secundarias (subkey) sin su autorización utilizando el componente privado de la clave principal. El ataque se lleva a cabo mediante la adición de un almacén de claves falso mediante la opción «—keyring».

Además, se han identificado dos vulnerabilidades en minisign, una herramienta simplificada para crear y verificar firmas digitales. Ambas vulnerabilidades (1, 2) permiten utilizar secuencias de control del terminal («\e[1E») o caracteres especiales («\r») en el campo de comentario para modificar la salida del programa, por ejemplo, para reemplazar la información sobre el resultado de la verificación.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster