Solucionado un fallo que afectaba al 13% de Internet

Cloudflare es el servicio de CDN más utilizado en Internet. Una CDN permite redistribuir la carga de una web o servicio, acercándose más al usuario final, y replicando el contenido original de una página web. Por ello, un fallo o una vulnerabilidad en este sistema puede ser muy peligroso, y la compañía ha anunciado que ha parcheado uno de ellos.

La vulnerabilidad estaba presente en el sistema gratuito y de código abierto CDNJS. Este sistema es utilizado por millones de páginas web (el 12,7% del total), y cuenta con 4.000 bibliotecas de JavaScript y CSS accesibles públicamente en GitHub, siendo el segundo mayor CDN de JavaScript del mundo.

 

El fallo ha sido descubierto por un investigador de seguridad llamado Ryotak. La vulnerabilidad consiste en que, básicamente, es posible subir archivos con contenido malicioso al GitHub del proyecto de manera que quienes utilicen el código estén implementando directamente el malware.

Un fallo permitía meter exploits en archivos de GitHub

Mientras investigaba posibles ataques en la web de cdnjs.com, RyotaK se dio cuenta de que, para todas las bibliotecas que todavía no estaban en CDNJS, podía sugerir una nueva biblioteca a través de GitHub. Así, estudió los scripts presentes en cdnjs/bot-ansible y cdnjs/tools, incluyendo un script de autoupdate que facilitaba la obtención automatizada de bibliotecas.

Los scripts actualizan automáticamente el servidor de CDNJS con nuevas versiones lanzados por los autores en los correspondientes registros de NPM (Node Package Manager). Así, por cada biblioteca publicada en el GitHub, su nueva versión se descargaría desde el registro de NPM enlazado.

Por ello, RyotaK comprobó qué pasaría si una biblioteca publicada en el CDNJS tuviera su correspondiente versión en el NPM con un exploit de directory transversal. Al ser publicados en formato TGZ (.tar.gz), los archivos pueden manipularse para que contengan exploits. Para ello, publicó una biblioteca llamada «hey-sven», y luego empezó a lanzar versiones nuevas en el registro de NPM.

En la versión nueva, sin embargo, incluía unos scripts para hacer el ataque de directory transversal mediante exploits escondidos en los archivos, lo cual se conoce como ZIP Slip. Una vez los servidores CDNJS procesan los archivos, los contenidos del script pasan a ejecutarse en el servidor.

Cloudflare parcheó el fallo en cuestión de minutos

No obstante, el investigador no quería sobrescribir accidentalmente un script existente, por lo que primero utilizó una vulnerabilidad de enlace simbólico para leer el contenido del archivo que iba a sobrescribir. Con ello, consiguió finalmente obtener información sensible como la clave de la API y el token en scripts servidos por el CDN. Con GITHUB_REPO_API_KEY puede obtener permisos de escritura en cualquier biblioteca, y con el WORKERS_KV_API_TOKEN puede modificar las que hay almacenadas en la caché de los workers.

Por ello, el investigador reportó la vulnerabilidad a Cloudflare en abril de este año, y la compañía aplicó la solución al fallo en cuestión de horas. Sin embargo, en las semanas posteriores tuvieron que aplicar soluciones más específicas para cada repositorio. El investigador celebró la rápida respuesta de Cloudflare a la vulnerabilidad, y trabajó conjuntamente con él para solucionarla.