La biblioteca de cifrado GnuPG es vulnerable durante el descifrado ¡parchea ya!

Actualidadcifradovulnerabilidad

El experto en ciberseguridad Tavis Ormandy del Project Zero de Google acaba de descubrir una vulnerabilidad peligrosa en el software de cifrado libgcrypt del GNU Privacy Guard.

La biblioteca libgcrypt, es un conjunto de herramientas de código abierto que cualquiera puede utilizar, pero probablemente sea más conocida como la biblioteca de cifrado utilizada por el propio software GnuPG, ampliamente implementado en GNU Privacy Guard (ese es el paquete que se utiliza al ejecutar el comando gpg o gpg2 ).

GnuPG se incluye y se utiliza en muchas distribuciones de Linux:

gpg es la versión solo para OpenPGP de GNU Privacy Guard (GnuPG). Es una herramienta que proporciona servicios de firma y cifrado digital utilizando el estándar OpenPGP. gpg ofrece una gestión de claves completa y todas las comodidades que se puede esperar de una implementación decente de OpenPGP.

En teoría, esta vulnerabilidad podría conducir a lo que se conoce como RCE, abreviatura de ejecución remota de código, porque el error puede desencadenarse simplemente enviando a libgcrypt un bloque de datos maliciosos para descifrar.

En otras palabras, un programa que usó libgcrypt para descifrar y verificar la integridad de los datos enviados desde fuera de la red, irónicamente algo que podría hacer para ver si se debe confiar en los datos en primer lugar, podría ser engañado para ejecutar un fragmento arbitrario de código escondido dentro de esos datos.

Ormandy no ha creado de prueba de concepto de RCE que funcione para este error, porque no lo necesitaba en esta ocasión.

Como señaló en su informe del error:

Hay un desbordamiento del búfer de la pila en libgcrypt debido a una suposición incorrecta en el código de administración del búfer de bloque. Simplemente descifrar algunos datos puede desbordar un búfer de pila con datos controlados por el atacante, no se valida ninguna verificación o firma antes de que ocurra la vulnerabilidad.

[…]

Creo que esto se puede explotar fácilmente, el búfer desbordado está inmediatamente adyacente a un puntero de función que se llama inmediatamente después del desbordamiento.

Solo mostrar que podía provocar un bloqueo fue suficiente para probar su punto, y Ormandy pudo hacerlo a través del programa gpg, que se basa en la biblioteca libgcrypt para sus funciones criptográficas.

En la terminología de programación de C, el puntero de función es un término de la jerga para “una dirección de memoria almacenada que le dice al software a dónde ir a continuación”.

Un error del que se puede abusar para desbordar un búfer de memoria designado y, por lo tanto, modificar un puntero de función cercano afectará casi inevitablemente el comportamiento futuro del programa en ejecución y desviará su ejecución, lo que generalmente hará que se bloquee.

Sin embargo, a base de prueba y error, los atacantes pueden descubrir cómo alterar el flujo de ejecución del programa defectuoso para que, en lugar de fallar incontrolablemente, el código sea engañado para ejecutar instrucciones de código de máquina proporcionadas por los propios atacantes.

Los datos maliciosos  que desvían a un programa con errores para tratar algunos de ellos como código a ejecutar se conocen como shellcode, una palabra que significa “código de programa malicioso que se infiltra bajo el disfraz de datos inofensivos”.

Piense en el puntero de función como una carta de OPORTUNIDAD en el juego Monopoly que te indica que avances hasta SALIDA, y cobras 200 $. Imagina que recoges la carta y te estás preparando felizmente para hacer el movimiento especificado, pero que cuando muestras la carta al resto de jugadores, inexplicablemente ha sido intercambiada por otra. Para tu asombro, ahora dice Ve directamente a la cárcel y no Avanza hasta salida y cobra 200 $, y eso es lo que sucede.

Irónicamente, tal vez, los sistemas operativos, los productos y los equipos de administradores de sistemas que no actualizan rápido pueden verse no afectados por este error.

La vulnerabilidad se introdujo en la versión 1.9.0 de la biblioteca, que solo salió a la luz el 19 de enero de 2021, menos de dos semanas antes de que Ormandy presentara su informe de error.

Pero la buena noticia para aquellos de nosotros que obtuvimos la 1.9.0 es que el equipo de GNU Privacy Guard solucionó este error casi de inmediato, lanzando la versión 1.9.1.

Si tu distribución de Linux se ha actualizado a 1.9.0 en las últimas dos semanas, es probable que también te hayas actualizado a 1.9.1, consulte el registro de cambios de tu distribución para obtener más detalles.

Nuestra distribución, por ejemplo, tiene esta entrada reciente:

[Slackware-current] ChangeLog for x86_64 

   Fri Jan 29 20:26:57 UTC 2021
   n/libgcrypt-1.9.1-x86_64-1.txz: Upgraded.
          This update fixes a serious security issue present only in libgcrypt-1.9.0.
          Everyone should be sure to update this package as soon as possible.
          For more information, see:
          https://lists.gnupg.org/pipermail/gnupg-announce/2021q1/000456.html
          (* Security fix *)

 

La segunda buena noticia es que libgcrypt no se utiliza tanto como otras bibliotecas criptográficas de código abierto como OpenSSL y LibreSSL, por lo que menos programas de terceros dependen de él.

La tercera buena noticia es que la mayoría del software de terceros que usa libgcrypt parece usar la biblioteca compartida (lo que Windows llamaría una DLL) que proporciona su distribución, en lugar de compilar una copia del código libgcrypt en el propio producto.

En otras palabras, incluso si ha afectado el software en tu ordenador, simplemente actualizar la copia central de libgcrypt en los directorios del sistema de tu distribución puede ser suficiente para neutralizar el error.

Sin embargo, es casi seguro que el sistema Linux promedio incluya numerosas aplicaciones que se ven potencialmente afectadas por este error.

Una lista breve, aunque incompleta, de software en nuestro propio sistema que utiliza libgcrypt incluye: Akonadi, Audacity, FFmpeg, Geeqie, la propia suite GPG, numerosas herramientas de KDE, Qemu, RPM Package Manager y Wireshark. (La mayoría de estos se basan en la biblioteca compartida libgcrypt y, por lo tanto, ahora pueden considerarse implícitamente parcheados en nuestro ordenador).

Comprueba tu versión

Suponiendo que tienes instaladas las herramientas GPG, incluidas gpg2 y libgcrypt, intenta esto:

$ gpg2 --version
gpg (GnuPG) 2.2.27
libgcrypt 1.9.1        <--- SHARED LIBRARY VERSION IS SHOWN HERE
Copyright (C) 2021 Free Software Foundation, Inc.
License GNU GPL-3.0-or-later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/yourname/.gnupg
Supported algorithms:
Pubkey: RSA, [...]
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES [...]
Hash: SHA1, RIPEMD160, SHA256 [...]
Compression: Uncompressed, ZIP, ZLIB [...]
$

 

Leave a Reply

Your email address will not be published.