curl logotipo

Instalando la última versión de curl

Download PDF

Actualizado el sábado 10 de septiembre de 2022.

En nuestra publicación en Twitter denotamos la noticia que recibimos por el boletín de noticias por correo electrónico del señor Daniel Stenberg, creador y mantenedor, desde 1998, de la poderosa herramienta curl.

Allí él explica que la empresa Microsoft®, de manera increíble e inconsulta, decidió publicar como una vulnerabilidad (ejecución remota de código o RCE) un error que permite enviar información sin cifrar con curl en algunos protocolos. A mí en particular me preocupa en protocolo SMB ya que usamos ese software para nuestros clientes.

curl CVE-2021-22947
curl CVE-2021-22947

De manera pública en Twitter hicimos saber que esto está mal porque:

  • Enviar información sin cifrar es peligroso, sí, pero ¿Es la única posibilidad de que se envíen credenciales que puedan ser interceptadas y utilizadas para ejecutar código remoto? ¿Qué posibilidad hay de eso?
  • Además, esa falla fue corregida en septiembre de 2021, así que si tenemos instalada la última versión de curl, pues listo, sin problema alguno.
curl 7.79.0 with Daniel Stenberg

El asunto está que al momento de escribir estas líneas es la versión 7.81.0 y en Ubuntu 20.4 apenas van por la versión 7.74, vulnerabilidad incluida comentada. ¿Por qué ese retraso? Pues porque se debe compilar y comprobar que las nuevas versiones de curl vengan «limpias», para evitar que «desequilibren» a Ubuntu… Pero obvio que no se dieron cuenta de la falla, reconocida públicamente y corregida ya. O sea, que quedamos en las mismas.

Ubuntu 20.04 con curl 7.68 instalado desde repositorios de DigitalOcean
Ubuntu 20.04 con curl 7.68 instalado desde repositorios de DigitalOcean

Ahora que criticar es sumamente fácil, pero poner manos a la obra ya es distinto: debemos ver nuestras propias fallas primero antes de poder abrir la boca. Es así que escribimos esta guía para tener siempre la última versión instalada de curl, veamos.


Agradecimiento al ingeniero Elías R.M. quien me mostró el camino a seguir para instalar software sobre diferentes distribuciones GNU/Linux, a continuación coloco la conversación hecha en Twitter a propósito de instalar paquetes de Debian en Archi Linux.

Actualizado el domingo 16 de enero de 2022.


Leer el hilo de respuestas. De todos modos coloco acá la explicación completa a continuación.

Está muy bien el intento, pero lo que hace en el vídeo no es instalar un paquete deb en arch. Tan solo lo extrae y tiene la suerte de que el paquete que usa es simple y se puede ejecutar «tal cual». Con paquetes más complejos la cosa se complica y mucho. [continua]

https://twitter.com/eliasrm87/status/1482080204608712718

No es buena idea «soltar» archivos en el sistema, pues pueden crear conflictos con los archivos genuinos, que son gestionados por el gestor de paquetes, y corromper la instalación del sistema. Lo ideal es convertir el paquete deb en un pkg de arch e instalarlo usando Pacman.

https://twitter.com/eliasrm87/status/1482081565106659339

Y ya mejor no entramos en el terreno de las dependencias, pues Debian compila sus binarios enlazados con las versiones de las librerías que usa Debian, en Arch no vas a tener las mismas versiones, y muchas veces son incompatibles. Así que el programa no funcionará.

https://twitter.com/eliasrm87/status/1482082136207368197

Precisamente por esa razón existen paquetes como Flatpak, Appimage, Snap, etc. Que no solo empaquetan el binario de la app, sino las librerías con las el binario fue enlazado cuando se compiló.

https://twitter.com/eliasrm87/status/1482082846722473987

Tabla de contenido:

Instalando con Snap

Ubuntu, Snap y curl

Con Snap me sorprende lo fácil que es actualizar a la última versión:

$ sudo snap install curl --edge
sudo snap install curl --edge
sudo snap install curl –edge

Debian, Snap y curl

Debian viene sin Snap preinstalado, existe un snap del año 2013 que estoy sin idea alguna sobre qué hace. Para instalar Snap en Debian ejecute:

$ sudo apt update
$ sudo apt --assume-yes install snapd
$ sudo snap install core

Y luego instale curl:

$ sudo snap install curl --edge

Por alguna extraña razón han de cerrar sesión o desconectarse para luego consultar la versión instalada de curl. Aparte de eso, «que no es mal de morirse», sin problema alguno.

Probado en Debian 9, Debian 10 y Debian 11.

Debian 9 snap y curl
Debian 9 snap y curl
Debian 10 snap y curl
Debian 10 snap y curl
Debian 11 snap y curl
Debian 11 snap y curl
Digitalocean Sammy green heart balloon
Digitalocean Sammy green heart balloon

Compilando curl

Actualizado el jueves 20 de enero de 2022.

Coloco acá la manera que mejor pude utilizar pero esto de compilar, aparte por supuesto que se deben tener dotes de programador, es también contar con una distribución GNU/Linux que pueda ofrecer los paquetes actualizados.

Ya lo relaté en el caso de instalar Pandora FMS sobre Debian 10 en lo que respecta a los repositorios por defecto y los que debemos agregar para que se pueda compilar una aplicación cualquiera.

sudo apt-get install -V libtool
  • También revisé este apartado para el caso de las librerías de cifrado, por probar el mayor número de combinaciones e intentos.
  • A mí me entretiene y obsesiona el trabajo manual, pero siempre debemos tirar hacia la automatización. Tengo tiempo si usar las GitHub Actions si desean echen un ojo a las acciones que tienne curl para que vean cómo funcionan los procesos de prueba «subterráneos». Es interesante.
Por favor, lea también   GNU Wget

A pesar de todo esto dejo a continuación el método que sí funcionó.

Descargando el código fuente

Investigamos la sección de instalación de curl y conseguimos de manera muy clara sobre cómo descargar la última versión, de manera rápida:

  • Verificar si tenemos las herramientas de compilación.
  • Descargar el código fuente de curl.
  • Configurar y compilar.

Herramienta gcc

Instalamos mediante apt el comando gcc (colección de compiladores GNU):

$ sudo apt --assume-yes install gcc

Tranquilamente también podemos usar apt-get ya que se mantienen los alias para mantener la retrocompatibilidad. Como ejemplo colocamos capturas de pantalla en Ubuntu 16.04 (haga clic para ampliar):

sudo apt --assume-yes install gcc
sudo apt –assume-yes install gcc

Herramienta make

Instalamos mediante apt el comando make (gestión de dependencias):

$ sudo apt --assume-yes install make

Tranquilamente también podemos usar apt-get ya que se mantienen los alias para mantener la retrocompatibilidad. Como ejemplo colocamos capturas de pantalla en Ubuntu 16.04 (haga clic para ampliar):

sudo apt --assume-yes install make
sudo apt –assume-yes install make

Herramienta git

Instalamos mediante apt el comando git (control de versiones):

$ sudo apt --assume-yes install git

Tranquilamente también podemos usar apt-get ya que se mantienen los alias para mantener la retrocompatibilidad. Como ejemplo colocamos capturas de pantalla en Ubuntu 16.04 (haga clic para ampliar):

sudo apt --assume-yes install git
sudo apt –assume-yes install git

Descargando el código fuente de curl

Puede descargar desde GitHub con la siguiente dirección (en la sección de apéndice encontrará un guion para obtener el nombre exacto de la última versión):

https://github.com/curl/curl/releases/download/curl-7_81_0/curl-7.81.0.tar.gz

También puede descargar desde su propia página con curl (sintaxis larga):

$ curl --remote-name https://curl.se/download/curl-7.81.0.tar.gz

O con su sintaxis corta:

$ curl -O https://curl.se/download/curl-7.81.0.tar.gz

O con wget si la distro utilizada no tiene curl en sus repositorios:

$ curl -O https://curl.se/download/curl-7.81.0.tar.gz

Para descomprimir debe utilizar tar:

$ tar xzvf curl-7.81.0.tar.gz

Compilando e instalando curl

Lo primero que se debe hacer es entrar en la carpeta del código descomprimido:

$ cd curl-7.81.0

Ahora se aplica el fichero de configuración incluido por defecto, en mi caso opto por usar la librería OpenSSL para todo lo que es el cifrado de datos (que es la preocupación principal de este artículos):

$ sudo ./configure --with-openssl

Si aparece este error (este ejemplo es con Ubuntu 16.04):

--with-openssl was given but OpenSSL could not be detected
–with-openssl was given but OpenSSL could not be detected

Pues habrá que echar mano del cifrado con GNU tools:

$ sudo ./configure --with-gnutls

Y saldrá una pantalla similar a esta:

--with-gnutls
–with-gnutls
El sr. Daniel Stenberg aclara que es totalmente seguro el uso de GnuTLS.

Echamos mano del comando make:

$ sudo make

Y tardará algo de tiempo, poco menos de un minuto:

sudo make (curl compilation)
sudo make (curl compilation)

Ahora viene la instalación con:

$ sudo make install

En el caso de Ubuntu 16.04 y debido a la versión instalada previamente del repositorio de Ubuntu, obtendrá este mensaje de advertencia:

curl and libcurl versions do not match
curl and libcurl versions do not match

Investigando un poco sobre el mensaje de error anterior, observo que aparentemente no reviste mayor importancia sin embargo noto que si es llamado con sudo o sin él devuelve diferentes versiones, he allí el meollo del asunto:

Revisando la documentación me encuentro con que debemos colocar este parámetro:

export LD_LIBRARY_PATH=/usr/local/lib

Y repetir todo el proceso de compilación. Se puede utilizar make test para observar de manera detallada el proceso de compilación. Esta captura fue hecha en Ubuntu 18.04 y tardó 5 minutos en completar la tarea:

make test (curl compilation)
make test (curl compilation)

curl: symbol lookup error

Dado el caso de consultar la versión de curl y aparecer algún mensaje de error parecido a este:

curl: symbol lookup error: curl: undefined symbol

Deberemos ejecutar:

sudo ldconfig

Tomado de:

https://mysiar.github.io/devops/2020/04/23/curl-from-src.html

Apéndice

GitHub Gist

Fijándome en la manera que trabaja e instala Snap hice estas prácticas, todos los días se aprende algo nuevo.

<Eso es todo, por ahora>.

Windows Subsystem for Linux

Haciendo pruebas con VirtualBox y una máquina virtual con Windows 10, hemos instalado el WSL2 con Ubuntu 20.04 para ver si tenía curl instalado y pues sí, pero viene con la versión 7.68. Inmediatamente intentamos usar Snap para actualizar… pero fue modificado para mostrar un mensaje indicando que aún no tiene soporte (el Snap). Allí tenemos otro reto, el actualizar a curl a su última versión.

Download PDF