Vulnerabilidade no cdnjs que permitiu a execução de código nos servidores Cloudflare.

Uma vulnerabilidade crítica foi identificada na rede de entrega de conteúdo cdnjs fornecida pela Cloudflare, destinada a acelerar a entrega de bibliotecas JavaScript, permitindo a execução de código arbitrário nos servidores CDN. O perigo do problema é agravado pelo fato de que cerca de 12,7% de todos os sites na internet utilizam o serviço para carregar bibliotecas JavaScript, e a comprometimento da infraestrutura permite a substituição das bibliotecas entregues por qualquer um desses sites.

O serviço cdnjs carrega pacotes do Git ou do repositório NPM e, em seguida, permite que qualquer site utilize gratuitamente a rede de entrega de conteúdo da Cloudflare para acelerar o carregamento de bibliotecas JavaScript. Ao analisar o código dos componentes do cdnjs publicados no GitHub, foi descoberto que, para descompactar pacotes NPM em arquivos tgz, é utilizado o módulo padrão archive/tar na linguagem Go, que fornece a lista de arquivos como estão, sem normalizar os caminhos. No caso de o script descompactar o conteúdo com base na lista fornecida, a presença de arquivos no formato "..\/..\/..\/..\/..\/..\/..\/tmp\/test" pode levar à sobrescrita de arquivos arbitrários no sistema, conforme permitido pelas permissões de acesso.

Foi sugerido que um atacante pode solicitar a adição de sua biblioteca no cdnjs e carregar um arquivo zip especialmente formatado no repositório NPM, contendo arquivos com o símbolo "..\/" nos caminhos. Nos servidores do cdnjs, é realizada periodicamente uma operação de "autoupdate", durante a qual o manipulador carrega novas versões da biblioteca proposta e descompacta o conteúdo. Com arquivos que têm caminhos "..\/", o atacante pode conseguir sobrescrever arquivos com scripts do serviço e executar seu código no servidor que foi realizada a descompressão.

No caso de carregar atualizações do Git, foi observado que o manipulador de atualizações não levava em consideração os links simbólicos ao copiar arquivos do Git. Essa peculiaridade permitia a leitura de quaisquer arquivos com servidor por meio da adição de links simbólicos no Git.

Experimentos com a demonstração da exploração do cdnjs para obter uma recompensa no HackerOne começaram com a verificação de uma hipótese sobre a leitura de arquivos. Foi adicionada uma ligação simbólica test.js ao repositório Git da biblioteca JavaScript entregue via CDN, apontando para o arquivo /proc/self/maps. Após a publicação da nova versão da biblioteca, o manipulador de atualizações processou este repositório e publicou o arquivo especificado no cdnjs (test.js foi criado como uma ligação simbólica e, ao solicitar este arquivo, o conteúdo de /proc/self/maps era retornado).

Substituindo a ligação simbólica pelo arquivo /proc/self/environ, o autor do estudo notou que os dados retornados continham os valores das variáveis de ambiente GITHUB_REPO_API_KEY e WORKERS_KV_API_TOKEN. A primeira variável armazenava a chave da API para acesso com permissão de gravação ao repositório robocdnjs no GitHub. Na segunda variável, estava o token para o armazenamento KV no cdnjs. Com as informações obtidas, o invasor poderia fazer alterações no cdnjs e comprometer completamente a infraestrutura.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster