Vulnerabilidade en cdnjs que permitiu a execución de código nos servidores de Cloudflare

Identificouse unha vulnerabilidade crítica na rede de entrega de contido cdnjs de Cloudflare, que está deseñada para acelerar a entrega de bibliotecas JavaScript, permitindo a execución de código arbitrario nos servidores CDN. O perigo do problema vese agravado polo feito de que preto do 12.7% de todos os sitios en Internet usan o servizo para descargar bibliotecas de JavaScript, e o compromiso da infraestrutura fai posible substituír as bibliotecas proporcionadas por calquera destes sitios.

O servizo cdnjs descarga paquetes de Git ou dun repositorio de NPM, despois de que permite que calquera sitio utilice a rede de entrega de contido Cloudflare de xeito gratuíto para acelerar a carga das bibliotecas JavaScript. Ao estudar o código dos compoñentes cdnjs publicados en GitHub, revelouse que para desempaquetar paquetes NPM nos arquivos tgz, utilízase o módulo estándar archive/tar na linguaxe Go, que produce unha lista de ficheiros tal e como están, sen normalizar os camiños. . No caso de que o script desempaquete o contido baseándose na lista indicada, a presenza no arquivo de ficheiros como "../../../../../../../tmp/test" pode levar a sobrescribir ficheiros arbitrarios no sistema, na medida en que os dereitos de acceso o permitan.

Suxeriuse que un atacante podería solicitar engadir a súa biblioteca a cdnjs e cargar un arquivo especialmente deseñado que contén ficheiros con caracteres "../" no camiño ao repositorio de NPM. Nos servidores cdnjs realízase periodicamente unha operación de "actualización automática", durante a cal o controlador descarga novas versións da biblioteca proposta e desempaqueta os contidos. Usando ficheiros con rutas "../", un atacante pode sobrescribir ficheiros con scripts de servizo e executar o seu código no servidor no que se realizou o desempaquetado.

No caso de descargar actualizacións de Git, descubriuse que o controlador que descargaba as actualizacións non tiña en conta as ligazóns simbólicas ao copiar ficheiros de Git. Esta característica permitiu organizar a lectura de calquera ficheiro do servidor engadindo ligazóns simbólicas a Git.

Decidiuse iniciar experimentos cunha demostración de hackeo de cdnjs para recibir un premio en HackerOne probando a hipótese sobre a lectura de ficheiros. Engadiuse unha ligazón simbólica test.js ao repositorio Git da biblioteca JavaScript servida a través de CDN, que apunta ao ficheiro /proc/self/maps. Despois de publicar unha nova versión da biblioteca, o controlador de actualización procesou este repositorio e publicou o ficheiro especificado en cdnjs (creouse test.js como ligazón simbólica e cando se solicitou este ficheiro, devolvéronse o contido de /proc/self/maps). ).

Substituíndo unha ligazón simbólica ao ficheiro /proc/self/environ, o autor do estudo observou que os datos proporcionados contiñan os valores das variables de ambiente GITHUB_REPO_API_KEY e WORKERS_KV_API_TOKEN. A primeira variable almacenaba a clave API para o acceso de escritura ao repositorio robocdnjs en GitHub. A segunda variable almacenaba o token no almacenamento KV en cdnjs. Usando a información recibida, o atacante podería facer cambios en cdnjs e comprometer completamente a infraestrutura.

Fonte: opennet.ru

Engadir un comentario