cdnjs:n haavoittuvuus, joka mahdollisti koodin suorittamisen Cloudflare-palvelimilla

Cloudflaren cdnjs-sisällönjakeluverkossa on havaittu kriittinen haavoittuvuus, joka on suunniteltu nopeuttamaan JavaScript-kirjastojen toimittamista, mikä mahdollistaa mielivaltaisen koodin suorittamisen CDN-palvelimilla. Ongelman vaaraa pahentaa se, että noin 12.7 % kaikista Internetin sivustoista käyttää palvelua JavaScript-kirjastojen lataamiseen, ja infrastruktuurin vaarantaminen mahdollistaa näiden sivustojen tarjoamien kirjastojen korvaamisen.

cdnjs-palvelu lataa paketteja Gitistä tai NPM-arkistosta, minkä jälkeen se sallii minkä tahansa sivuston käyttää Cloudflare-sisällönjakeluverkkoa ilmaiseksi JavaScript-kirjastojen lataamisen nopeuttamiseksi. GitHubissa julkaistujen cdnjs-komponenttien koodia tutkiessa paljastui, että NPM-pakettien purkamiseen tgz-arkistoissa käytetään Go-kielen vakioarkisto/tar-moduulia, joka tuottaa listan tiedostoista sellaisenaan ilman polun normalisointia. Siinä tapauksessa, että komentosarja purkaa sisällön annetun luettelon perusteella, tiedostojen, kuten "../../../../../../../tmp/test" läsnäolo arkistossa voi johtaa mielivaltaisten tiedostojen päällekirjoittamiseen järjestelmässä käyttöoikeuksien salliessa.

Ehdotettiin, että hyökkääjä voisi hakea lisäämään kirjastonsa cdnjs:ään ja lataamaan NPM-tietovaraston polussa erityisesti suunnitellun arkiston, joka sisältää tiedostoja, joissa on "../"-merkkejä. cdnjs-palvelimilla suoritetaan ajoittain "autoupdate"-toiminto, jonka aikana käsittelijä lataa ehdotetun kirjaston uudet versiot ja purkaa sisällön. Käyttämällä tiedostoja, joiden polut ovat "../", hyökkääjä voi korvata tiedostot palveluskripteillä ja suorittaa niiden koodin palvelimella, jolla pakkaus purettiin.

Päivityksiä ladattaessa Gitistä havaittiin, että päivityksiä lataava käsittelijä ei ottanut huomioon symbolisia linkkejä kopioidessaan tiedostoja Gitistä. Tämä ominaisuus mahdollisti kaikkien tiedostojen lukemisen järjestämisen palvelimelta lisäämällä symbolisia linkkejä Gitiin.

Päätettiin aloittaa kokeilut hakkeroinnin esittelyllä, jotta voit saada palkinnon HackerOne-tapahtumassa testaamalla tiedostojen lukemista koskevaa hypoteesia. CDN:n kautta palvelevan JavaScript-kirjaston Git-säilöön on lisätty symbolinen linkki test.js, joka osoittaa /proc/self/maps-tiedostoon. Kirjaston uuden version julkaisemisen jälkeen päivityskäsittelijä käsitteli tämän arkiston ja julkaisi määritetyn tiedoston cdnjs-muodossa (test.js luotiin symbolisena linkkinä ja kun tätä tiedostoa pyydettiin, /proc/self/maps-tiedoston sisältö palautettiin ).

Korvaamalla symbolisen linkin tiedostoon /proc/self/environ, tutkimuksen tekijä havaitsi, että annetut tiedot sisälsivät ympäristömuuttujien GITHUB_REPO_API_KEY ja WORKERS_KV_API_TOKEN arvot. Ensimmäinen muuttuja tallensi API-avaimen GitHubin robocdnjs-tietovarastoon kirjoittamista varten. Toinen muuttuja tallensi tunnuksen KV-muistiin cdnjs-muodossa. Saatujen tietojen avulla hyökkääjä voi tehdä muutoksia cdnjs:ään ja vaarantaa infrastruktuurin kokonaan.

Lähde: opennet.ru

Lisää kommentti