Vundebleco en cdnjs, kiuj permesis kodon en Cloudflare-serviloj

Kritika vundebleco estis identigita en la cdnjs-enhava liveroreto de Cloudflare, kiu estas dizajnita por akceli la liveron de JavaScript-bibliotekoj, permesante arbitran kodekzekuton sur CDN-serviloj. La danĝero de la problemo estas pligravigita de la fakto, ke ĉirkaŭ 12.7% de ĉiuj retejoj en Interreto uzas la servon por elŝuti JavaScript-bibliotekojn, kaj kompromiso de la infrastrukturo ebligas anstataŭigi la bibliotekojn provizitajn de iu el ĉi tiuj retejoj.

La servo cdnjs elŝutas pakaĵojn el Git aŭ NPM-deponejo, post kio ĝi permesas al iu ajn retejo uzi la Cloudflare-enhavan liveran reton senpage por akceli la ŝarĝon de JavaScript-bibliotekoj. Studante la kodon de la cdnjs-komponentoj publikigitaj sur GitHub, estis rivelita, ke por malpaki NPM-pakaĵojn en tgz-arkivoj, la norma arkivo/tar-modulo en la Go-lingvo estas uzata, kiu produktas liston de dosieroj kiel estas, sen normaligo de la vojoj. . En la kazo kiam la skripto malpakas la enhavon surbaze de la donita listo, la ĉeesto en la arkivo de dosieroj kiel "../../../../../../../tmp/test" povas konduki al anstataŭigo de arbitraj dosieroj en la sistemo, kiom permesas alirrajtojn.

Oni sugestis, ke atakanto povus peti aldoni sian bibliotekon al cdnjs kaj alŝuti speciale desegnitan arkivon enhavantan dosierojn kun "../" signoj en la vojo al la NPM-deponejo. Sur cdnjs-serviloj, periode efektiviĝas operacio "aŭtomata ĝisdatigo", dum kiu la prizorganto elŝutas novajn versiojn de la proponita biblioteko kaj malpakigas la enhavon. Uzante dosierojn kun vojoj "../", atakanto povas anstataŭigi dosierojn kun servaj skriptoj kaj ekzekuti ilian kodon sur la servilo sur kiu la malpakaĵo estis farita.

En la kazo de elŝuto de ĝisdatigoj de Git, oni malkovris, ke la prizorganto elŝutanta la ĝisdatigojn ne konsideris simbolajn ligilojn dum kopiado de dosieroj de Git. Ĉi tiu funkcio ebligis organizi la legadon de iuj dosieroj de la servilo aldonante simbolajn ligilojn al Git.

Estis decidite komenci eksperimentojn kun pruvo de hakado de cdnjs por ricevi premion ĉe HackerOne testante la hipotezon pri dosierlegado. Simbola ligilo test.js estis aldonita al la Git-deponejo de la JavaScript-biblioteko servita per CDN, montrante la /proc/self/maps-dosieron. Post publikigado de nova versio de la biblioteko, la ĝisdatiga prizorganto prilaboris ĉi tiun deponejon kaj publikigis la specifitan dosieron en cdnjs (test.js estis kreita kiel simbola ligilo kaj kiam ĉi tiu dosiero estis petita, la enhavo de /proc/self/maps estis resendita. ).

Anstataŭigante simbolan ligon al la dosiero /proc/self/environ, la aŭtoro de la studo rimarkis, ke la donitaj datumoj enhavas la valorojn de la mediaj variabloj GITHUB_REPO_API_KEY kaj WORKERS_KV_API_TOKEN. La unua variablo stokis la API-ŝlosilon por skribaliro al la robocdnjs-deponejo sur GitHub. La dua variablo stokis la ĵetonon al la KV-stokado en cdnjs. Uzante la ricevitajn informojn, la atakanto povus fari ŝanĝojn al cdnjs kaj tute kompromiti la infrastrukturon.

fonto: opennet.ru

Aldoni komenton