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 uzbrukumā esošās vietnes iespējām, piemēram, uzbrūkot Trello tīmekļa lietojumprogrammai, varat aizstāt pieprasījuma sākumu (aizvietot datus, piemēram, “PUT /1/members/1234... x=x&csrf =1234&lietotājvārds=testzzz&bio=cake”) un nosūtiet ziņojumu, iekļaujot trešās puses lietotāja sākotnējo pieprasījumu un tajā norādīto autentifikācijas sīkfailu. Uzbrukumam sais-app.com izrādījās, ka atbildē ir iespējams aizstāt JavaScript kodu, aizstājot to vienā no pieprasījuma parametriem. Uzbrukumam vietnei redhat.com tika izmantots iekšējais apdarinātājs, lai novirzītu uz uzbrucēja vietni (pieprasījums šādā formā: “POST /search?dest=../assets/idx?redir=//[e-pasts aizsargāts]/ 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

Pievieno komentāru