Vulnerabilitat en cdnjs que permetia l'execució de codi als servidors Cloudflare

S'ha identificat una vulnerabilitat crítica a la xarxa de lliurament de contingut cdnjs de Cloudflare, que està dissenyada per accelerar el lliurament de biblioteques JavaScript, permetent l'execució de codi arbitrari als servidors CDN. El perill del problema s'agreuja pel fet que al voltant del 12.7% de tots els llocs d'Internet utilitzen el servei per descarregar biblioteques JavaScript, i el compromís de la infraestructura fa possible substituir les biblioteques proporcionades per qualsevol d'aquests llocs.

El servei cdnjs descarrega paquets de Git o d'un repositori NPM, i després permet que qualsevol lloc utilitzi la xarxa de lliurament de contingut Cloudflare de forma gratuïta per accelerar la càrrega de biblioteques JavaScript. En estudiar el codi dels components cdnjs publicats a GitHub, es va revelar que per desempaquetar paquets NPM als arxius tgz, s'utilitza el mòdul estàndard archive/tar en l'idioma Go, que produeix una llista de fitxers tal qual, sense normalitzar els camins. . En el cas que l'script desempaqueta el contingut basant-se en la llista donada, la presència a l'arxiu de fitxers com "../../../../../../../tmp/test" pot conduir a sobreescriure fitxers arbitraris al sistema, sempre que els drets d'accés ho permetin.

Es va suggerir que un atacant podria sol·licitar afegir la seva biblioteca a cdnjs i carregar un arxiu especialment dissenyat que contingués fitxers amb caràcters "../" al camí del repositori NPM. Als servidors cdnjs, es realitza periòdicament una operació d'"actualització automàtica", durant la qual el gestor descarrega noves versions de la biblioteca proposada i desempaqueta el contingut. Utilitzant fitxers amb camins "../", un atacant pot sobreescriure fitxers amb scripts de servei i executar el seu codi al servidor on s'ha realitzat el desempaquetat.

En el cas de descarregar actualitzacions de Git, es va descobrir que el gestor que descarregava les actualitzacions no tenia en compte els enllaços simbòlics a l'hora de copiar fitxers de Git. Aquesta característica va permetre organitzar la lectura de qualsevol fitxer del servidor afegint enllaços simbòlics a Git.

Es va decidir iniciar experiments amb una demostració de pirateria cdnjs per rebre un premi a HackerOne provant la hipòtesi sobre la lectura de fitxers. S'ha afegit un enllaç simbòlic test.js al repositori Git de la biblioteca de JavaScript que es serveix mitjançant CDN, que apunta al fitxer /proc/self/maps. Després de publicar una nova versió de la biblioteca, el gestor d'actualitzacions va processar aquest repositori i va publicar el fitxer especificat a cdnjs (es va crear test.js com a enllaç simbòlic i quan es va sol·licitar aquest fitxer, es va retornar el contingut de /proc/self/maps). ).

Substituint un enllaç simbòlic al fitxer /proc/self/environ, l'autor de l'estudi va notar que les dades donades contenien els valors de les variables d'entorn GITHUB_REPO_API_KEY i WORKERS_KV_API_TOKEN. La primera variable va emmagatzemar la clau de l'API per a l'accés d'escriptura al repositori robocdnjs a GitHub. La segona variable va emmagatzemar el testimoni a l'emmagatzematge KV en cdnjs. Utilitzant la informació rebuda, l'atacant podria fer canvis a cdnjs i comprometre completament la infraestructura.

Font: opennet.ru

Afegeix comentari