Napad na sisteme front-end-back-end, ki nam omogoča, da se zataknemo v zahteve tretjih oseb

Razkrito podrobnosti o novem napadu na spletna mesta, ki uporabljajo model front-end-back-end, na primer tista, ki tečejo prek omrežij za dostavo vsebine, uravnavalcev obremenitve ali posrednikov. Napad omogoča, da se s pošiljanjem določenih zahtev zagozdi v vsebino drugih zahtev, obdelanih v isti niti med sprednjim in zadnjim delom. Predlagana metoda je bila uspešno uporabljena za organizacijo napada, ki je omogočil prestrezanje parametrov avtentikacije uporabnikov storitve PayPal, ki je raziskovalcem plačala približno 40 tisoč dolarjev v okviru programa za obveščanje o prisotnosti nepopravljenih ranljivosti. Napad je uporaben tudi za spletna mesta, ki uporabljajo omrežje za dostavo vsebin Akamai.

Bistvo težave je v tem, da frontendi in backendi pogosto zagotavljajo različne ravni podpore za protokol HTTP, hkrati pa zapakirajo zahteve različnih uporabnikov v skupni kanal. Za povezavo frontend sprejemanja zahtev in backend obdelave zahtev je vzpostavljena dolgoživeča povezava TCP, preko katere se prenašajo uporabniške zahteve, ki se prenašajo po verigi druga za drugo, ločene s protokolom HTTP. Za ločevanje zahtev, glave "Content-Length" (določa skupno velikost podatkov v zahtevi) in "Kodiranje prenosa: razdeljeno na koščke"(omogoča prenos podatkov v delih, pri čemer določa bloke različnih velikosti v formatu "{size}\r\n{block}\r\n{size}\r\n{block}\r\n0").

Težava nastane, če vmesnik podpira samo »Content-Length«, vendar ignorira »Transfer-Encoding: chunked« (to je na primer naredil Akamai CDN) ali obratno. Če je Transfer-Encoding: chunked podprt na obeh straneh, se lahko izvedbene funkcije razčlenjevalnikov glav HTTP uporabijo za napad (na primer, ko sprednji del ignorira vrstice, kot sta »Transfer-Encoding: xchunked«, »Transfer-Encoding: chunked« ”, “Transfer-Encoding” :[tab]chunked”, "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" ali "Transfer-Encoding : chunked" in zaledje jih uspešno obdela).

V tem primeru lahko napadalec pošlje zahtevo, ki vsebuje obe glavi "Content-Length" in "Transfer-Encoding: chunked", vendar velikost v "Content-Length" ne ustreza velikosti verige chunked, kar je manjša od dejanske vrednosti. Če sprednji del obdela in posreduje zahtevo glede na »Content-Length« in zaledni del počaka, da se blok zaključi na podlagi »Transfer-Encoding: chunked«, bo konec podatkov na podlagi »Transfer-Encoding: chunked« določiti prej, preostali del zahteve pa bo napadalec na začetku naslednje zahteve, tj. napadalec bo lahko priložil poljubne podatke na začetek zahteve nekoga drugega, ki bo naslednji poslana.

Napad na sisteme front-end-back-end, ki nam omogoča, da se zataknemo v zahteve tretjih oseb

Če želite ugotoviti težavo v uporabljeni kombinaciji frontend-backend, lahko prek frontenda pošljete takšno zahtevo:

POST /o HTTP/1.1
Gostitelj: example.com
Kodiranje prenosa: razdeljeno na koščke
Dolžina vsebine: 4

1
Z
Q

Težava je prisotna, če zaledje ne obdela takoj zahteve in počaka na prihod končnega ničelnega omejevalnega bloka razdeljenih podatkov. Za popolnejši pregled pripravljeno poseben pripomoček, ki preizkuša tudi možne metode za skrivanje glave »Transfer-Encoding: chunked« pred sprednjim delom.

Izvedba pravega napada je odvisna od zmožnosti napadenega mesta, na primer, ko napadate spletno aplikacijo Trello, lahko zamenjate začetek zahteve (nadomestni podatki, kot je »PUT /1/members/1234... x=x&csrf =1234&uporabniško ime=testzzz&bio=cake”) in pošljete sporočilo, vključno z izvirno zahtevo tretje osebe in v njej navedenim piškotkom za preverjanje pristnosti. Pri napadu na saas-app.com se je izkazalo, da je možno zamenjati JavaScript kodo v odgovoru tako, da jo zamenjamo v enem od parametrov zahteve. Za napad na redhat.com je bil uporabljen notranji upravljalnik za preusmeritev na napadalčevo spletno stran (zahteva v obliki »POST /search?dest=../assets/idx?redir=//[e-pošta zaščitena]/ HTTP/1.1").

Uporaba metode za omrežja za dostavo vsebine je omogočila preprosto zamenjavo zahtevanega mesta z zamenjavo glave »Host:«. Napad se lahko uporabi tudi za zastrupitev vsebine sistemov za predpomnjenje vsebine in pridobivanje predpomnjenih zaupnih podatkov. Vrhunec metode je bila organizacija napada na PayPal, ki je omogočila prestrezanje gesel, ki so jih uporabniki poslali med avtentikacijo (zahteva iframe je bila spremenjena tako, da izvaja JavaScript v kontekstu strani paypal.com/us/gifts, za kateri CSP (Politika varnosti vsebine) ni bil uporabljen).

Zanimivo, leta 2005 je bilo predlagano v bistvu podobna tehnika ponarejanja zahtev, ki vam omogoča ponarejanje podatkov v predpomnjenju proxyjev (Tomcat, squid, mod_proxy) ali zaobiti blokiranje požarnega zidu z določitvijo več zahtev »GET« ali »POST« znotraj ene HTTP seje.

Vir: opennet.ru

Dodaj komentar