Cloudflare серверлерінде кодты орындауға мүмкіндік беретін cdnjs осалдығы

Cloudflare cdnjs мазмұнды жеткізу желісінде маңызды осалдық анықталды, ол CDN серверлерінде еркін кодты орындауға мүмкіндік беретін JavaScript кітапханаларын жеткізуді жылдамдатуға арналған. Мәселенің қауіптілігі Интернеттегі барлық сайттардың шамамен 12.7% JavaScript кітапханаларын жүктеп алу қызметін пайдаланатындығымен және инфрақұрылымның бұзылуы осы сайттардың кез келгені ұсынған кітапханаларды ауыстыруға мүмкіндік беретінімен қиындатады.

cdnjs қызметі Git немесе NPM репозиторийінен пакеттерді жүктеп алады, содан кейін ол кез келген сайтқа JavaScript кітапханаларының жүктелуін жылдамдату үшін Cloudflare мазмұнды жеткізу желісін тегін пайдалануға мүмкіндік береді. GitHub сайтында жарияланған cdnjs компоненттерінің кодын зерделеу кезінде NPM пакеттерін tgz мұрағаттарынан шығару үшін жолдарды қалыпқа келтірмей файлдар тізімін сол күйінде жасайтын Go тіліндегі стандартты архив/tar модулі қолданылатыны анықталды. . Сценарий берілген тізім негізінде мазмұнды ашқан жағдайда, архивте «../../../../../../../tmp/test» сияқты файлдардың болуы мүмкін қол жеткізу құқықтарына қарай жүйедегі ерікті файлдарды қайта жазуға әкеледі.

Шабуыл жасаушы өз кітапханасын cdnj файлдарына қосуға және NPM репозиторийінің жолында «../» таңбалары бар файлдарды қамтитын арнайы әзірленген мұрағатты жүктеп салуға өтініш бере алады деп ұсынылды. cdnjs серверлерінде «автожаңарту» операциясы мерзімді түрде орындалады, оның барысында өңдеуші ұсынылған кітапхананың жаңа нұсқаларын жүктеп алып, мазмұнын ашады. «../» жолдары бар файлдарды пайдалану арқылы шабуылдаушы қызметтік сценарийлері бар файлдарды қайта жаза алады және олардың кодын орамнан шығару орындалған серверде орындай алады.

Git-тен жаңартуларды жүктеп алған жағдайда, жаңартуларды жүктеп алатын өңдеуші Git-тен файлдарды көшіру кезінде символдық сілтемелерді ескермейтіні анықталды. Бұл мүмкіндік Git-ке символдық сілтемелер қосу арқылы серверден кез келген файлдарды оқуды ұйымдастыруға мүмкіндік берді.

Файлды оқуға қатысты гипотезаны сынау арқылы HackerOne жүлдесін алу үшін cdnjs бұзуды көрсету арқылы эксперименттерді бастау туралы шешім қабылданды. CDN арқылы қызмет көрсетілетін JavaScript кітапханасының Git репозиторийіне test.js символдық сілтемесі /proc/self/maps файлына нұсқаумен қосылды. Кітапхананың жаңа нұсқасын жариялағаннан кейін жаңарту өңдеушісі осы репозиторийді өңдеп, көрсетілген файлды cdnjs ішінде жариялады (test.js символдық сілтеме ретінде жасалды және бұл файл сұралғанда, /proc/self/maps мазмұны қайтарылды. ).

/proc/self/environ файлына символдық сілтемені алмастыра отырып, зерттеу авторы берілген деректерде GITHUB_REPO_API_KEY және WORKERS_KV_API_TOKEN орта айнымалыларының мәндері бар екенін байқады. Бірінші айнымалы GitHub жүйесінде robocdnjs репозиторийіне жазу рұқсаты үшін API кілтін сақтады. Екінші айнымалы таңбалауышты KV жадына cdnjs ішінде сақтады. Алынған ақпаратты пайдалана отырып, шабуылдаушы cdnj файлдарына өзгерістер енгізіп, инфрақұрылымды толығымен бұза алады.

Ақпарат көзі: opennet.ru

пікір қалдыру