Uzbrukums priekšgala-back-end sistēmām, kas ļauj mums iesaistīties trešo pušu pieprasījumos

Atklāts informācija par jaunu uzbrukumu vietnēm, kurās tiek izmantots priekšgala un aizmugures modelis, piemēram, vietnēm, kas darbojas caur satura piegādes tīkliem, slodzes līdzsvarotājiem vai starpniekserveriem. Uzbrukums ļauj, nosūtot noteiktus pieprasījumus, iekļauties citu pieprasījumu saturā, kas apstrādāti tajā pašā pavedienā starp priekšgalu un aizmugursistēmu. Piedāvātā metode tika veiksmīgi izmantota, lai organizētu uzbrukumu, kas ļāva pārtvert pakalpojuma PayPal lietotāju autentifikācijas parametrus, kas pētniekiem maksāja aptuveni 40 tūkstošus dolāru programmas ietvaros, lai informētu par neaizlāgotu ievainojamību esamību. Uzbrukums attiecas arī uz vietnēm, kas izmanto Akamai satura piegādes tīklu.

Problēmas būtība ir tāda, ka frontends un backends bieži nodrošina atšķirīgu HTTP protokola atbalsta līmeni, bet tajā pašā laikā iekapsulē dažādu lietotāju pieprasījumus kopējā kanālā. Lai savienotu frontend saņemšanas pieprasījumus un aizmugures apstrādes pieprasījumus, tiek izveidots ilgstošs TCP savienojums, caur kuru tiek pārsūtīti lietotāju pieprasījumi, kas tiek pārraidīti pa ķēdi viens pēc otra, atdalīti ar HTTP protokola palīdzību. Lai atdalītu pieprasījumus, galvenes "Content-Length" (nosaka pieprasījumu kopējo datu apjomu) un "Pārsūtīšanas kodējums: gabalos"(ļauj pārsūtīt datus pa daļām, norādot dažāda izmēra blokus formātā "{size}\r\n{block}\r\n{izmērs}\r\n{bloks}\r\n0").

Problēma rodas, ja priekšgals atbalsta tikai “Content-Length”, bet ignorē “Transfer-Encoding: chunked” (piemēram, Akamai CDN to izdarīja) vai otrādi. Ja abās pusēs tiek atbalstīta Transfer-Encoding: chunked, HTTP galvenes parsētāju ieviešanas līdzekļus var izmantot uzbrukumam (piemēram, kad priekšgals ignorē tādas rindas kā "Transfer-Encoding: xchunked", "Transfer-Encoding: chunked ”, "Transfer-Encoding" :[tab]chunked", "X: X[\n]Transfer-Encoding: chunked", "Transfer-Encoding[\n]: chunked" vai "Transfer-Encoding : chunked" un aizmugursistēma tos veiksmīgi apstrādā).

Šādā gadījumā uzbrucējs var nosūtīt pieprasījumu, kurā ir gan galvenes "Content-Length", gan "Transfer-Encoding: chunked", taču izmērs sadaļā "Content-Length" neatbilst gabalos sadalītās ķēdes lielumam, kas ir mazāka par faktisko vērtību. Ja priekšgals apstrādā un pārsūta pieprasījumu saskaņā ar "Content-Length" un aizmugursistēma gaida, līdz bloks tiks pabeigts, pamatojoties uz "Transfer-Encoding: chunked", datu beigas, pamatojoties uz "Transfer-Encoding: chunked" jānosaka agrāk, un atlikušā pieprasījuma aste uzbrucējs būs nākamā pieprasījuma sākumā, t.i. uzbrucējs varēs pievienot patvaļīgus datus kāda cita pārsūtītā pieprasījuma sākumam.

Uzbrukums priekšgala-back-end sistēmām, kas ļauj mums iesaistīties trešo pušu pieprasījumos

Lai noteiktu problēmu izmantotajā priekšgala un aizmugursistēmas kombinācijā, varat nosūtīt šādu pieprasījumu, izmantojot priekšgalu:

POST /par HTTP/1.1
Saimnieks: example.com
Pārsūtīšanas kodējums: gabalos
Saturs-Garums: 4

1
Z
Q

Problēma rodas, ja aizmugursistēma nekavējoties neapstrādā pieprasījumu un gaida, kad tiks saņemts galīgais gabalos sadalīto datu nulles ierobežojošais bloks. Lai iegūtu pilnīgāku pārbaudi sagatavots īpaša utilīta, kas arī pārbauda iespējamās metodes, kā priekšgalā paslēpt galveni “Transfer-Encoding: chunked”.

Reāla uzbrukuma veikšana ir atkarīga no uzbrukuma skartās vietnes iespējām, piemēram, uzbrūkot Trello tīmekļa lietojumprogrammai, var aizstāt pieprasījuma sākumu (aizstāt datus, piemēram, "PUT /1/members/1234… x=x&csrf=1234&username=testzzz&bio=cake") un nosūtīt ziņojumu, kurā iekļauts trešās puses lietotāja sākotnējais pieprasījums un tajā norādītās autentifikācijas sīkdatnes. Lai uzbruktu saas-app.com, atbildē bija iespējams aizstāt JavaScript kodu, aizstājot to vienā no pieprasījuma parametriem. Lai uzbruktu redhat.com, tika izmantots iekšējs apstrādātājs, lai novirzītu uz uzbrucēja vietni (tika aizstāts ar pieprasījumu, piemēram, "POST /search?dest=../assets/idx?redir=//redhat.com@evil.net/ HTTP/1.1").

Metodes izmantošana satura piegādes tīkliem ļāva vienkārši aizstāt pieprasīto vietni, aizstājot galveni “Host:”. Uzbrukumu var izmantot arī, lai saindētu satura kešatmiņas sistēmu saturu un iegūtu kešatmiņā saglabātos konfidenciālos datus. Metodes virsotne bija uzbrukuma organizēšana PayPal, kas ļāva pārtvert paroles, ko lietotāji sūtīja autentifikācijas laikā (iframe pieprasījums tika pārveidots, lai izpildītu JavaScript lapas paypal.com/us/gifts kontekstā, lai kura CSP (satura drošības politika) netika piemērota).

Interesanti, ka 2005. gadā bija ieteikts būtībā līdzīgs pieprasījumu viltošanas paņēmiens, kas ļauj viltot datus kešatmiņas starpniekserveros (Tomcat, squid, mod_proxy) vai apiet ugunsmūra bloķēšanu, norādot vairākus “GET” vai “POST” pieprasījumus vienas HTTP sesijas laikā.

Avots: opennet.ru

Iegādājieties uzticamu mitināšanu vietnēm ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa vietņu mitināšanu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster