Natagpuan nila ang isang bagong bersyon ng pag-atake ng HTTP Request Smuggling

Los mga web system kung saan ang frontend ay tumatanggap ng mga koneksyon sa pamamagitan ng HTTP / 2 at ipinapasa ang mga ito sa backend sa pamamagitan ng HTTP / 1.1 hay napakita sa isang bagong bersyon ng pag-atake na "HTTP Request Smuggling", Pinapayagan nito sa pamamagitan ng pagpapadala ng mga espesyal na idinisenyong mga kahilingan ng kliyente, upang hatiin ang nilalaman ng mga kahilingan ng iba pang mga gumagamit na naproseso sa parehong daloy sa pagitan ng frontend at ng backend.

Ang pag-atake maaaring magamit upang mag-iniksyon ng nakakahamak na JavaScript code sa isang sesyon na may isang lehitimong site, i-bypass ang mga system ng paghihigpit sa pag-access at hadlangan ang mga parameter ng pagpapatotoo.

Ang may-akda ng pag-aaral ipinakita ang posibilidad ng paglusob sa mga system ng Netflix, Verizon, Bitbucket, Netlify CDN at Atlassian, at nakatanggap ng $ 56.000 sa mga programang gantimpala para sa pagkilala sa mga kahinaan. Ang problema ay nakumpirma rin sa mga produkto ng F5 Networks.

Ang problema bahagyang nakakaapekto sa mod_proxy sa Apache http server (CVE-2021-33193), mga pag-aayos na inaasahan sa bersyon 2.4.49 (naabisuhan ang mga developer sa problema noong unang bahagi ng Mayo at binigyan ng 3 buwan upang ayusin ito). Sa nginx, ang kakayahang sabay na tukuyin ang mga "Head-Length" at "Transfer-Encoding" na mga header ay na-block sa nakaraang bersyon (1.21.1).

Ang prinsipyo ng pagtatrabaho ng bagong pamamaraan ng pagtutugma ng mga kahilingan sa trapiko ay katulad ng kahinaan na natuklasan ng parehong mananaliksik dalawang taon na ang nakalilipas, ngunit ito ay limitado sa mga interface na tumatanggap ng mga kahilingan sa paglipas ng HTTP / 1.1.

Ang klasikong pag-atake na "HTTP Request Smuggling" ay batay sa katotohanan na ang mga front at backend ay binibigyang kahulugan ang paggamit ng mga header ng HTTP na "Haba ng Nilalaman" (tinutukoy ang kabuuang sukat ng data sa kahilingan) at "Transfer-Encoding: chunked" (pinapayagan maglipat ka ng data sa mga chunks) ...

Halimbawa, kung sinusuportahan lamang ng interface ang "Haba ng Nilalaman" ngunit hindi pinapansin ang "Transfer-Encoding: Fragmented", maaaring magpadala ang isang umaatake ng isang kahilingan na naglalaman ng mga header na "Haba ng Nilalaman" at "Transfer-Encoding: Fragmented", ngunit ang laki tl Ang "Haba ng nilalaman" ay hindi tumutugma sa laki ng chunked string. Sa kasong ito, iproseso at ire-redirect ng frontend ang kahilingan ayon sa "Haba ng nilalaman", at maghihintay ang backend para makumpleto ang block batay sa "Transfer encoding: chunked".

Hindi tulad ng tekstuwal na HTTP / 1.1 na protocol, na na-parse sa antas ng linya, Ang HTTP / 2 ay isang binary na protokol at nagmamanipula ng mga bloke data ng isang paunang natukoy na laki. Gayunpaman, HTTP / 2 gumamit ng mga pseudo-header na tumutugma sa normal na mga header ng HTTP. Kapag nakikipag-ugnay sa backend gamit ang HTTP / 1.1 na protocol, isinalin ng frontend ang mga pseudo-header na ito sa mga katulad na HTTP / 1.1 HTTP header. Ang problema ay ang backend ay gumagawa ng mga desisyon tungkol sa pagtatasa ng paghahatid batay sa mga header ng HTTP na itinakda ng frontend, nang hindi alam ang mga parameter ng orihinal na kahilingan.

Kahit na sa anyo ng mga pseudo-header, ang mga halaga "Haba ng nilalaman" at "transfer-encoding" maaari silang mai-stream, kahit na hindi sila ginagamit sa HTTP / 2, dahil ang laki ng lahat ng data ay natutukoy sa isang hiwalay na larangan. Gayunpaman, kapag nagko-convert ng isang kahilingan sa HTTP / 2 sa HTTP / 1.1, ang mga header na ito ay dumaan at maaaring malito sa backend.

Mayroong dalawang pangunahing mga pagpipilian sa pag-atake: H2.TE at H2.CL, kung saan niloko ang backend ng isang maling pag-encode ng transfer o isang halaga ng haba ng nilalaman na hindi tumutugma sa aktwal na laki ng hiniling na katawan na natanggap ng frontend sa pamamagitan ng HTTP / 2 Protocol.

Bilang isang halimbawa ng pag-atake ng H2.CL, isang maling laki ang tinukoy sa pseudo-header haba ng nilalaman kapag nagsumite ng isang kahilingan HTTP / 2 sa Netflix. Ang hiling na ito ay humahantong sa pagdaragdag ng isang header Haba ng Nilalaman ng HTTP katulad kapag ina-access ang backend sa pamamagitan ng HTTP / 1.1, ngunit dahil ang laki sa Haba-Nilalaman ay mas mababa kaysa sa aktwal, isang bahagi ng data sa pila ang naproseso bilang simula ng susunod na kahilingan.

Ang Mga Tool sa Pag-atake ay naidagdag na sa Burp's Toolkit at magagamit bilang isang Turbo Intruder extension. Mga proxy ng web, load balancer, web accelerator, system ng paghahatid ng nilalaman, at iba pang mga pagsasaayos kung saan ang mga kahilingan ay nai-redirect sa isang frontend-backend scheme na madaling kapitan ng problema.

Fuente: https://portswigger.net


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.