torsdag 14 maj 2009

HTTP Parameter Pollution (HPP)

Luca Carettoni och Stefano Di Paola presenteradee sin nya attackteknik http parameter pollution. De har gjort en enkel men förstås elak sak -- multipla URL-parametrar. Tänk dig t ex www.sajt.se/?query=12&query=34, dvs parametern query två gånger. Vad händer då? Det visar sig vara odefinierat i standarden och därför ge olika beteenden på olika webbservrar och/eller applikationer.

Odefinierat beteende = buggigt beteende
Genom att testa en massa större webbapplikationer har de hittat ett antal intressanta hanteringar av multipla parametrar. En del applikationer tar sökparameter A och letar i databasen och sökparameter B och presenterar på webbsidan. I stil med ...

www.sajt.se/?search=Kalle&search=Stina

Din sökning på 'Kalle' gav följande träffar:
Stina Andersson
Stina af Grepe
Kristina Gunnarsson

Man kan ju undra vilken av de två parametrarna som validerades? Andra applikationer kastar undantag med informativa felmeddelanden. Ytterligare andra väljer någon av parametrarna såsom Google Search Appliance som tar den sista förekomsten.

Det blir riktigt intressant när olika parametervärden har olika accessrättigheter. Om vi tänker oss att alla användare ska få se viss data men bara administratörer ska få ändra den -- vad händer då vid följande parametersättning:

www.sajt.se/?action=view&attribute=name&action=edit

Att man överhuvudtaget kan ha fler än en förekomst av en parameter syns t ex i Javas API:
  • javax.servlet.ServletRequest.getParameter() returnerar någon förekomst av parametern
  • javax.servlet.ServletRequest.getParameterValues() returnerar en array av alla förekomster
Nästa nivå -- Web Application Firewall Bypass
OK, om olika ramverk hanterar multipla förekomster av parametrar olika så borde vi väl kunna utnyttja den funktionaliteten till något? Japp. T ex för att ta oss förbi applikationsbrandväggar som filtrerar indata.

ModSecurity säger stopp vid följande SQL-injektion i en parameter:
www.sajt.se/surfa.aspx?page=select 1,2,3 from table where id=1

Men en ASP-server kommer tolka följande parametersättning ...

www.sajt.se/surfa.aspx?page=select 1&page=2,3 from table where id=1

... som en kommaseparerad lista av parametervärden och alltså ersätta &page= med ett kommatecken. Resultatet? Jo ...

www.sajt.se/surfa.aspx?page=select 1,2,3 from table where id=1

Inga kommentarer: