Ранливост во cdnjs што дозволува извршување на код на серверите Cloudflare

Идентификувана е критична ранливост во мрежата за испорака на содржини cdnjs на Cloudflare, која е дизајнирана да ја забрза испораката на библиотеките на JavaScript, овозможувајќи произволно извршување на кодот на серверите CDN. Опасноста од проблемот се влошува со фактот што околу 12.7% од сите страници на Интернет ја користат услугата за преземање библиотеки JavaScript, а компромисот на инфраструктурата овозможува да се заменат библиотеките обезбедени од која било од овие страници.

Услугата cdnjs презема пакети од Git или од складиштето на NPM, по што им дозволува на која било локација бесплатно да ја користи мрежата за испорака на содржина во Cloudflare за да го забрза вчитувањето на библиотеките на JavaScript. При проучувањето на кодот на компонентите на cdnjs објавени на GitHub, откриено е дека за отпакување NPM пакети во tgz архивите, се користи стандардниот модул архива/tar на јазикот Go, кој произведува листа на датотеки како што е, без нормализирање на патеките. . Во случај кога скриптата ја отпакува содржината врз основа на дадената листа, присуството во архивата на датотеки како „../../../../../../../tmp/test“ може да доведе до презапишување на произволни датотеки во системот, колку што дозволуваат правата за пристап.

Беше предложено дека напаѓачот може да аплицира за додавање на својата библиотека на cdnjs и да постави специјално дизајнирана архива што содржи датотеки со знаци „../“ на патеката до складиштето NPM. На cdnjs серверите периодично се врши операција „автоматско ажурирање“, при што управувачот презема нови верзии на предложената библиотека и ја отпакува содржината. Користејќи датотеки со патеки „../“, напаѓачот може да ги презапише датотеките со сервисни скрипти и да го изврши нивниот код на серверот на кој е извршено распакувањето.

Во случај на преземање ажурирања од Git, откриено е дека управувачот што ги преземал ажурирањата не ги земал предвид симболичните врски при копирање датотеки од Git. Оваа функција овозможи да се организира читање на која било датотека од серверот со додавање симболични врски до Git.

Беше одлучено да се започнат експерименти со демонстрација на хакирање cdnj за да се добие награда во HackerOne со тестирање на хипотезата за читање датотеки. Симболична врска test.js е додадена во складиштето Git на библиотеката JavaScript што се служи преку CDN, покажувајќи на датотеката /proc/self/maps. По објавувањето на новата верзија на библиотеката, управувачот со ажурирања го обработи ова складиште и ја објави наведената датотека во cdnjs (test.js беше создадена како симболична врска и кога беше побарана оваа датотека, содржината на /proc/self/maps беше вратена ).

Заменувајќи ја симболичната врска до датотеката /proc/self/environ, авторот на студијата забележал дека дадените податоци ги содржат вредностите на променливите на околината GITHUB_REPO_API_KEY и WORKERS_KV_API_TOKEN. Првата променлива го складираше клучот API за пристап до запишување до складиштето robocdnjs на GitHub. Втората променлива го складираше токенот во складиштето на KV во cdnjs. Користејќи ги добиените информации, напаѓачот може да направи промени во cdnjs и целосно да ја компромитира инфраструктурата.

Извор: opennet.ru

Додадете коментар