domingo, 16 de abril de 2023

CVE-2023-24623 - Hackeando una librería anti-SSRF de Go

¡Hola a todos! Hoy vuelvo con una entrada relacionada con la revisión de una librería, en este caso de paranoidhttp v0.2.0, en Go. La vulnerabilidad encontrada, a la que han asignado el CVE-2023-24623, se trata de un bypass de la protección anti-SSRF que ofrece la librería usando una dirección IPv6.

Cuando escribí la última publicación, estuve buscando alguna librería que estuviese escrita en otro lenguaje que no fuese python para revisarla también y practicar, y encontré paranoidhttp, una librería con el mismo propósito, pero en Go.

Empecé a revisar el código y lo primero que hice fue revisar las IPs y hostnames bloqueados por defecto, buscando algún rango que tuviese que estar bloqueado pero que no apareciese.

Los rangos definidos por defecto eran todos de IPv4 y en los comentarios del código aparecía que la librería no soportaba IPv6, pero había una función que hacía una conversión con IP.To4() que pasaría una IPv6 válida a v4. 

Como parecía que introduciendo una IPv6 iba a pasar los filtros e iba a ser soportada por el cliente HTTP, monté a modo de PoC un programa en Go que usase la librería tal como indicaba en el README del repositorio y que hiciese una petición a http://[::]:80, ya que había abierto un servicio HTTP en todas las interfaces que escuchaba en ese puerto para ver si llegaba alguna petición.

Como veis, en la parte superior de la imagen está el código en Go que usa paranoidhttp para realizar la petición a http://[::]:80 y abajo aparece la petición recibida en 127.0.0.1.

Como podéis ver, las capturas las hice en enero, cuando reporté la vulnerabilidad, pero he ido dejando lo de escribir la entrada todo este tiempo 😆

Cuando descubrí la vulnerabilidad me puse en contacto por twitter con el desarrollador de la librería y estuvo agradecido por el aviso ya que algunos de sus amigos la usaban para sitios en producción, por lo que sacó una actualización a los días y me avisó cuando todos actualizaron para que reportase a MITRE e hiciese una publicación si quería.

Espero que os haya gustado la explicación del proceso de encontrar la vulnerabilidad aunque haya sido muy sencillo y corto. Muchas gracias por leerme una vez más y nos vemos en la próxima.

No hay comentarios:

Publicar un comentario