masse websystemer, hvor frontend accepterer forbindelser via HTTP / 2 og sender dem til backend via HTTP / 1.1 her blevet udsat for en ny version af angrebet "HTTP Request Smuggling", Det tillader ved at sende specialdesignede klientanmodninger at opdele indholdet i anmodninger fra andre brugere, der behandles i samme flow mellem frontend og backend.
Angrebet kan bruges til at injicere ondsindet JavaScript -kode i en session med et legitimt websted, omgå adgangsbegrænsningssystemer og opsnappe godkendelsesparametre.
Forfatteren af undersøgelsen demonstreret muligheden for at angribe Netflix, Verizon, Bitbucket, Netlify CDN og Atlassian -systemer, og modtog $ 56.000 i belønningsprogrammer for at identificere sårbarheder. Problemet er også blevet bekræftet i F5 Networks -produkter.
Problemet påvirker delvist mod_proxy på Apache http -server (CVE-2021-33193), rettelser forventes i version 2.4.49 (udviklere blev underrettet om problemet i begyndelsen af maj og fik 3 måneder til at løse det). I nginx blev muligheden for samtidig at specificere "Content-Length" og "Transfer-Encoding" headers blokeret i den tidligere version (1.21.1).
Princippet om drift af den nye metode af matchende anmodninger i trafikken ligner den sårbarhed, som den samme forsker opdagede for to år siden, men det er begrænset til grænseflader, der accepterer anmodninger via HTTP / 1.1.
Det klassiske "HTTP Request Smuggling" -angreb var baseret på det faktum, at frontends og backends tolker brugen af HTTP "Content-Length" -hoveder forskelligt (bestemmer den samlede størrelse af dataene i anmodningen) og "Transfer-Encoding: chunked" ( giver dig mulighed for at overføre data i bidder) ...
Hvis grænsefladen f.eks. Kun understøtter "Indholdslængde", men ignorerer "Overførselskodning: fragmenteret", kan en angriber sende en anmodning, der indeholder overskrifterne "Indholdslængde" og "Overførselskodning: fragmenteret", men størrelsen da "Indholdets længde" matcher ikke størrelsen på den stumpede streng. I dette tilfælde vil frontend behandle og omdirigere anmodningen i henhold til "Indholdslængde", og backend venter på, at blokken er fuldført baseret på "Overførselskodning: klumpet".
I modsætning til den tekstlige HTTP / 1.1 -protokol, der er analyseret på linjeniveau, HTTP / 2 er en binær protokol og manipulerer blokke data af en forudbestemt størrelse. Dog HTTP / 2 brug pseudohoveder som svarer til normale HTTP -headere. Når man interagerer med backend ved hjælp af HTTP / 1.1 -protokollen, frontenden oversætter disse pseudohoveder i lignende HTTP / 1.1 HTTP -overskrifter. Problemet er, at backend træffer beslutninger om analyse af transmissionen baseret på HTTP -headere, der er angivet af frontend, uden at kende parametrene for den oprindelige anmodning.
Selv i form af pseudohoveder, værdierne "Indholdslængde" og "overførselskodning" de kan streames, selvom de ikke bruges i HTTP / 2, da størrelsen af alle data bestemmes i et separat felt. Ved konvertering af en HTTP / 2 -anmodning til HTTP / 1.1 passerer disse overskrifter imidlertid og kan være forvirrende for backend.
Der er to hovedangrebsmuligheder: H2.TE og H2.CL, hvor backend narres af en forkert overførselskodning eller en indholdslængdeværdi, der ikke svarer til den faktiske størrelse af det anmodningslegeme, som frontend modtog via HTTP / 2 -protokollen.
Som et eksempel på H2.CL-angrebet er den forkerte størrelse angivet i pseudohovedet indholdslængde ved indsendelse af en anmodning HTTP / 2 til Netflix. Denne anmodning fører til tilføjelse af et overskrift HTTP-indholdslængde lignende ved adgang til backend via HTTP / 1.1, men da størrelsen i Content-Length er mindre end den faktiske, behandles en del af dataene i køen som begyndelsen på den næste anmodning.
Attack Tools er allerede tilføjet til Burps Toolkit og er tilgængelige som en Turbo Intruder -udvidelse. Webproxy, load balancers, webacceleratorer, indholdsleveringssystemer og andre konfigurationer, hvor anmodninger omdirigeres i en frontend-backend-ordning, er modtagelige for problemet.
kilde: https://portswigger.net