Hyökkäys front-end-back-end-järjestelmiä vastaan, jonka avulla voimme kiilautua kolmannen osapuolen pyyntöihin

Paljastettu tiedot uudesta hyökkäyksestä sivustoihin, jotka käyttävät käyttöliittymän taustamallia, kuten sisällönjakeluverkkojen, kuormituksen tasaajien tai välityspalvelinten kautta kulkeviin sivustoihin. Hyökkäys sallii tiettyjä pyyntöjä lähettämällä kiilautua muiden pyyntöjen sisältöön, jotka käsitellään samassa säikeessä käyttöliittymän ja taustajärjestelmän välillä. Ehdotettua menetelmää käytettiin onnistuneesti organisoimaan hyökkäys, joka mahdollisti PayPal-palvelun käyttäjien todennusparametrien sieppaamisen, mikä maksoi tutkijoille noin 40 tuhatta dollaria osana ohjelmaa tiedottaakseen korjaamattomien haavoittuvuuksien esiintymisestä. Hyökkäys koskee myös Akamai-sisällönjakeluverkkoa käyttäviä sivustoja.

Ongelman ydin on, että käyttöliittymät ja taustajärjestelmät tarjoavat usein eri tasoisen tuen HTTP-protokollalle, mutta samalla kapseloivat eri käyttäjien pyynnöt yhteiseen kanavaan. Etupään vastaanottopyyntöjen ja taustaprosessointipyyntöjen yhdistämiseksi muodostetaan pitkäikäinen TCP-yhteys, jonka kautta käyttäjäpyynnöt välitetään, välitetään ketjua pitkin peräkkäin HTTP-protokollan avulla erotettuina. Pyyntöjen erottamiseksi otsikot "Content-Length" (määrittää pyynnön tietojen kokonaiskoon) ja "Siirtokoodaus: paloiteltu"(sallii tietojen siirtämisen osissa määrittämällä erikokoisia lohkoja muodossa "{koko}\r\n{lohko}\r\n{koko}\r\n{lohko}\r\n0").

Ongelma ilmenee, jos käyttöliittymä tukee vain "Content-Length" -toimintoa, mutta jättää huomiotta "Transfer-Encoding: chunked" (esimerkiksi Akamai CDN teki tämän) tai päinvastoin. Jos Transfer-Encoding: chunked on tuettu molemmilta puolilta, HTTP-otsikon jäsentimien toteutusominaisuuksia voidaan käyttää hyökkäykseen (esimerkiksi kun käyttöliittymä jättää huomioimatta rivit, kuten "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked" ”, "Transfer-Coding" :[tab]chunked", "X: X[\n]Transfer-Coding: chunked", "Transfer-Coding[\n]: chunked" tai "Transfer-Encoding : chunked" ja taustaohjelma käsittelee ne onnistuneesti).

Tässä tapauksessa hyökkääjä voi lähettää pyynnön, joka sisältää sekä "Content-Length"- että "Transfer-Encoding: chunked"-otsikot, mutta "Content-Length"-kohdassa oleva koko ei vastaa paloitetun ketjun kokoa. on pienempi kuin todellinen arvo. Jos käyttöliittymä käsittelee ja välittää pyynnön "Content-Length" -määritelmän mukaisesti ja backend odottaa lohkon valmistumista "Transfer-Encoding: chunked" perusteella, "Transfer-Encoding: chunked" -perusteisen datan loppu tulee määritetään aikaisemmin ja pyynnön loppuosa hyökkääjä on seuraavan pyynnön alussa, ts. hyökkääjä voi liittää mielivaltaisia ​​tietoja jonkun toisen seuraavaksi lähetettävän pyynnön alkuun.

Hyökkäys front-end-back-end-järjestelmiä vastaan, jonka avulla voimme kiilautua kolmannen osapuolen pyyntöihin

Voit määrittää ongelman käytetyssä käyttöliittymän ja taustan yhdistelmässä lähettämällä seuraavanlaisen pyynnön käyttöliittymän kautta:

POST /about HTTP/1.1
Isäntä: example.com
Siirtokoodaus: paloiteltu
Content-Length: 4

1
Z
Q

Ongelma ilmenee, jos taustajärjestelmä ei käsittele pyyntöä välittömästi ja odottaa viimeisen nollarajauslohkon saapumista. Tarkempaa tarkistusta varten valmistetut erityinen apuohjelma, joka testaa myös mahdollisia menetelmiä "Transfer-Encoding: chunked" -otsikon piilottamiseen käyttöliittymästä.

Todellisen hyökkäyksen toteuttaminen riippuu hyökkäyksen kohteena olevan sivuston ominaisuuksista, esimerkiksi Trello-verkkosovellusta vastaan ​​hyökätessäsi voit korvata pyynnön alun (korvaa data, kuten “PUT /1/members/1234... x=x&csrf =1234&käyttäjänimi=testzzz&bio=cake”) ja lähetä viesti, joka sisältää kolmannen osapuolen käyttäjän alkuperäisen pyynnön ja siinä määritellyn todennusevästeen. Saas-app.com-sivuston hyökkäyksessä osoittautui mahdolliseksi korvata JavaScript-koodi korvaamalla se yhdessä pyyntöparametreista. Redhat.com-hyökkäystä varten sisäistä käsittelijää käytettiin ohjaamaan hyökkääjän verkkosivustolle (pyyntö muodossa "POST /search?dest=../assets/idx?redir=//[sähköposti suojattu]/ HTTP/1.1").

Sisällönjakeluverkkojen menetelmän käyttö mahdollisti yksinkertaisesti pyydetyn sivuston korvaamisen korvaamalla "Host:"-otsikon. Hyökkäystä voidaan käyttää myös sisällön välimuistijärjestelmien sisällön myrkytykseen ja välimuistissa olevien luottamuksellisten tietojen poimimiseen. Menetelmän huippu oli PayPaliin kohdistuvan hyökkäyksen järjestäminen, joka mahdollisti käyttäjien todennuksen aikana lähettämien salasanojen sieppaamisen (iframe-pyyntöä muutettiin suorittamaan JavaScriptiä paypal.com/us/gifts-sivun yhteydessä, jota CSP:tä (Content Security Policy) ei sovellettu).

Mielenkiintoista, että vuonna 2005 oli ehdotettu olennaisesti samanlainen pyyntöhuijaustekniikka, jonka avulla voit huijata tietoja välimuistipalvelimissa (Tomcat, squid, mod_proxy) tai ohittaa palomuurieston määrittämällä useita GET- tai POST-pyyntöjä yhden HTTP-istunnon aikana.

Lähde: opennet.ru

Lisää kommentti