Pagkahuyang sa mga cdnj nga nagtugot sa pagpatuman sa code sa mga server sa Cloudflare

Usa ka kritikal nga kahuyangan ang giila sa cdnjs content delivery network sa Cloudflare, nga gidesinyo sa pagpadali sa paghatod sa JavaScript library, nga nagtugot sa arbitraryong pagpatuman sa code sa CDN servers. Ang kapeligrohan sa problema gipasamot sa kamatuoran nga mga 12.7% sa tanan nga mga site sa Internet naggamit sa serbisyo sa pag-download sa mga librarya sa JavaScript, ug ang pagkompromiso sa imprastraktura nagpaposible sa pag-ilis sa mga librarya nga gihatag sa bisan asa niini nga mga site.

Ang serbisyo sa cdnjs nag-download sa mga pakete gikan sa Git o usa ka NPM repository, pagkahuman gitugotan ang bisan unsang site nga magamit ang network sa paghatud sa sulud sa Cloudflare nga libre aron mapadali ang pagkarga sa mga librarya sa JavaScript. Kung gitun-an ang code sa mga sangkap sa cdnjs nga gipatik sa GitHub, gipadayag nga aron ma-unpack ang mga pakete sa NPM sa mga archive sa tgz, gigamit ang standard nga module sa archive / tar sa Go nga sinultian, nga naghimo usa ka lista sa mga file kung unsa, nga wala’y pag-normalize sa agianan. Sa kaso kung ang script nag-unpack sa mga sulud base sa gihatag nga lista, ang presensya sa archive sa mga file sama sa "../../../../../../../tmp/test" mahimo modala ngadto sa overwriting arbitraryong mga file sa sistema, kutob sa gitugot sa mga katungod sa pag-access.

Gisugyot nga ang usa ka tig-atake mahimong mag-aplay aron idugang ang iyang librarya sa mga cdnjs ug mag-upload sa usa ka espesyal nga gidisenyo nga archive nga adunay mga file nga adunay "../" nga mga karakter sa agianan padulong sa repositoryo sa NPM. Sa mga server sa cdnjs, usa ka "autoupdate" nga operasyon matag karon ug unya, diin ang handler nag-download sa mga bag-ong bersyon sa gisugyot nga librarya ug gibuksan ang mga sulud. Gamit ang mga file nga adunay mga agianan "../", ang usa ka tig-atake mahimong mag-overwrite sa mga file nga adunay mga script sa serbisyo ug ipatuman ang ilang code sa server diin gihimo ang pag-unpack.

Sa kaso sa pag-download sa mga update gikan sa Git, nadiskobrehan nga ang handler nga nag-download sa mga update wala magtagad sa simbolikong mga link sa dihang nagkopya sa mga file gikan sa Git. Kini nga bahin nagpaposible sa pag-organisar sa pagbasa sa bisan unsang mga file gikan sa server pinaagi sa pagdugang simbolikong mga link sa Git.

Nadesisyonan nga sugdan ang mga eksperimento sa usa ka demonstrasyon sa pag-hack sa mga cdnj aron makadawat ug premyo sa HackerOne pinaagi sa pagsulay sa pangagpas bahin sa pagbasa sa file. Usa ka simbolikong link nga test.js ang gidugang sa Git repository sa JavaScript library nga giserbisyuhan pinaagi sa CDN, nagtudlo sa /proc/self/maps file. Human sa pagpatik ug bag-ong bersyon sa librarya, giproseso sa tigdumala sa update kini nga tipiganan ug gipatik ang espesipikong payl sa cdnjs (test.js gimugna isip simbolo nga sumpay ug sa dihang gihangyo kini nga file, ang mga sulod sa /proc/self/maps gibalik. ).

Ang pag-ilis sa simbolikong sumpay sa file /proc/self/environ, ang tagsulat sa pagtuon nakamatikod nga ang gihatag nga datos naglangkob sa mga bili sa environment variables GITHUB_REPO_API_KEY ug WORKERS_KV_API_TOKEN. Ang una nga variable nagtipig sa yawe sa API alang sa pag-access sa pagsulat sa robocdnjs repository sa GitHub. Ang ikaduha nga variable nagtipig sa token sa KV storage sa cdnjs. Gamit ang impormasyon nga nadawat, ang tig-atake makahimo og mga kausaban sa cdnjs ug hingpit nga makompromiso ang imprastraktura.

Source: opennet.ru

Idugang sa usa ka comment