Cloudflare серверлеринде кодду аткарууга мүмкүндүк берген cdnjsдеги аялуу

Cloudflare'дин cdnjs мазмун жеткирүү тармагында олуттуу кемчилик аныкталды, ал JavaScript китепканаларын жеткирүүнү тездетүү үчүн иштелип чыккан жана CDN серверлеринде коддун ыктыярдуу аткарылышына мүмкүндүк берет. Интернеттеги бардык сайттардын болжол менен 12.7% JavaScript китепканаларын жүктөө кызматын колдонушу, ал эми инфраструктуранын бузулушу бул сайттардын каалаганы тарабынан берилген китепканаларды алмаштырууга мүмкүндүк бергендиги көйгөйдүн кооптуулугун күчөтөт.

cdnjs кызматы Gitтен же NPM репозиторийинен топтомдорду жүктөйт, андан кийин JavaScript китепканаларынын жүктөлүшүн тездетүү үчүн каалаган сайтка Cloudflare мазмун жеткирүү тармагын бекер колдонууга мүмкүндүк берет. GitHub сайтында жарыяланган cdnjs компоненттеринин кодун изилдеп жатканда, NPM пакеттерин tgz архивдеринде ачуу үчүн Go тилиндеги стандарттык архив/tar модулу колдонулганы аныкталды, ал файлдардын тизмесин ошол бойдон, жолду нормалдаштырбастан чыгарат. Скрипт берилген тизменин негизинде мазмунду ачкан учурда, архивде "../../../../../../../tmp/test" сыяктуу файлдардын болушу мүмкүн кирүү укуктарына жараша системадагы ыктыярдуу файлдарды кайра жазууга алып келет.

Чабуулчу өзүнүн китепканасын cdnjs'ге кошуу жана NPM репозиторийинин жолунда “../” символдору бар файлдарды камтыган атайын иштелип чыккан архивди жүктөө өтүнүчү менен кайрылышы мүмкүн деп сунушталган. cdnjs серверлеринде "автоматтык жаңыртуу" операциясы мезгил-мезгили менен аткарылып турат, анын жүрүшүндө иштеткич сунушталган китепкананын жаңы версияларын жүктөйт жана мазмунду ачат. “../” жолдору бар файлдарды колдонуу менен чабуулчу кызматтык скрипттери бар файлдарды кайра жаза алат жана алардын кодун таңгактан чыгаруу жасалган серверде аткара алат.

Gitтен жаңыртууларды жүктөө учурунда, жаңыртууларды жүктөөчү Gitтен файлдарды көчүрүүдө символикалык шилтемелерди эске албаганы аныкталган. Бул функция Gitге символдук шилтемелерди кошуу менен серверден каалаган файлдарды окууну уюштурууга мүмкүндүк берди.

Файлды окууга байланыштуу гипотезаны текшерүү аркылуу HackerOne сыйлыгын алуу үчүн cdnjлерди хакердик демонстрациялоо менен эксперименттерди баштоо чечими кабыл алынды. 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 ачкычын сактаган. Экинчи өзгөрмө токенди cdnjs менен KV сактагычына сактады. Алынган маалыматты колдонуп, чабуулчу cdnjsге өзгөртүүлөрдү киргизип, инфраструктураны толугу менен бузуп коюшу мүмкүн.

Source: opennet.ru

Комментарий кошуу