Smuggling av HTTP-förfrågningar
HTTP |
---|
Begär metoder |
Rubrikfält |
Svarsstatuskoder |
Säkerhetsåtkomstkontrollmetoder |
Säkerhetssårbarheter |
Första dokumentet 2005 av Linhart et al. , HTTP-förfrågningssmuggling är en säkerhetsexploatering på HTTP- protokollet som drar fördel av en inkonsekvens mellan tolkningen av Content-Length-
och/eller Transfer-Encoding-
huvuden mellan HTTP-serverimplementationer i en HTTP-proxyserverkedja . Överför-kodningshuvudet fungerar genom att definiera ett direktiv om hur man tolkar kroppen av HTTP-begäran , med det vanliga och nödvändiga direktivet för denna attack är Chunked transfer-kodning . När överföringskodningshuvudet finns, ska innehållslängdshuvudet utelämnas. På liknande sätt men med en annan syntax fungerar Content-Length-huvudet genom att ange storleken i byte av kroppen som ett värde i själva rubriken. Sårbarheter uppstår när båda dessa rubriker ingår i en skadlig HTTP-begäran, och kringgår säkerhetsfunktioner som är avsedda att förhindra skadliga HTTP-förfrågningar till servern genom att antingen front- end- eller back-end- servern tolkar begäran felaktigt. Smuggling av HTTP-förfrågningar tar vanligtvis formen av CL.TE, TE.CL eller TE.TE, även om det finns mer komplexa attacker med HRS.
Typer
CL.TE
I den här typen av HTTP-förfrågningssmuggling bearbetar gränssnittet begäran med Content-Length header medan backend bearbetar begäran med Transfer-Encoding header. Attacken skulle utföras med den första delen av begäran deklarerade en noll längd bit. När frontservern ser detta skulle den bara läsa den första delen av begäran och oavsiktligt skicka den andra delen till backend-servern. När den väl passerats till backend-servern, skulle den behandlas som nästa begäran och bearbetas och utföra angriparens dolda begäran.
TE.CL
I den här typen av HTTP-förfrågningssmuggling behandlar gränssnittet begäran med hjälp av Transfer-Encoding-huvudet medan backend bearbetar begäran med Content-Length-huvudet. I den här attacken skulle en hackare deklarera den giltiga längden på den första delen, som innehåller den skadliga begäran och sedan deklarera en andra bit med längden 0. När frontservern ser den andra delen med längden 0 tror den att begäran att vara komplett och skickar den vidare till backend-servern. Backend-servern bearbetar dock begäran med Content-Length-huvudet, och som ett resultat av detta förblir den skadliga begäran som lämnas i den första delen obearbetad tills de behandlas som i början av nästa begäran i sekvensen och utförs.
TE.TE
I den här typen av HTTP-förfrågningssmuggling behandlar både frontend och backend begäran med hjälp av Transfer-Encoding header, men rubriken kan fördunklas på ett sätt (till exempel genom icke-standardiserad blankstegsformatering eller dubbletter av rubriker) som gör att en av servrarna inte den andra ignorera det. Att dölja rubriken kan ta formen av att lägga till ett felaktigt tecken, såsom Transfer-Encoding: xchunked, eller ett ovanligt nytt radtecken mellan 'Transfer-Encoding' och ': chunked'. Om en av de främre servrarna fortfarande bearbetar dessa fördunklade HTTP-förfrågningar, kommer resten av attacken att likna hur CL.TE eller TE.CL attacker fungerar.
Förebyggande
Det bästa förebyggandet mot dessa attacker skulle helt klart vara om front- och backendservrar tolkade HTTP-förfrågningar på samma sätt. Detta är dock vanligtvis inte ett alternativ eftersom lastbalanserare som stöder backade servrar körs på olika plattformar, vilket innebär att du inte kan köra samma mjukvara på både front- och backend. Ett sätt att förhindra mot de flesta varianter av denna attack är att använda HTTP/2 eftersom det inte är sårbart för de flesta attacker från smuggling av förfrågningar, med en annan metod för att bestämma längden på en begäran. En annan metod för att undvika attacken är att frontend-servern normaliserar HTTP-förfrågningar innan de skickas till backend, vilket säkerställer att de tolkas på samma sätt. Att konfigurera en brandvägg för webbapplikationer är ett annat bra sätt att förhindra HRS-attacker eftersom många har teknik som identifierar attackförsök och antingen blockerar eller sanerar de misstänkta inkommande förfrågningarna.