Осебпазирӣ дар 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 ташкил карда шавад.

Қарор дода шуд, ки таҷрибаҳо бо намоиши ҳакерии cdnjs барои дарёфти ҷоиза дар 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

Илова Эзоҳ