onsdag 24 september 2008

John om Parameter-injektion i Flash

Ursäkta om det finns otydligheter i detta inlägg. Måste springa till nästa föredrag! :)

Ayal Yogev och Adi Sharabani presenterade "Flash Parameter Injection". Med fler och fler mediaapplikationer som byggs på Flash så kändes det här intressant.

Flash-grunder
Flash inkluderas i HTML och stödjer ett skriptspråk "Action Script". Action Script har globala variabler som kan sättas och accessas utanför filmen/animationen. Variablerna används typiskt för att konfigurera Flash från HTML-sidan.

Grundproblemet
Problemet är att Flash-utvecklare ofta skriver kod i stil med "Om globalVariabel är definierad använd värdet. Annars använd det statiska (bra) värdet." Det öppnar upp för att injicera dåliga värden på globala Flash-variabler. Skälet till spridningen av denna dåliga kodstandard är copy-paste-programmering av Flash-utvecklare som aldrig har tänkt på vad det innebär.

Injektion av globala variabler
Globala variabler kan injicerars genom direkt access till Flash-filen
http://host/movie.swf?viktigVariabel=dåligtVärde
... eller i HTML
flashvars="viktigVariabel=dåligtVärde"

Många Flash-filer beroende av sin HTML
Flash-filer kan inte alltid laddas utan den ursprungliga HTML:en. T.ex. kan klick i Flash:en trigga JavaScript i sidan och om skripten inte finns där så funkar inte Flashen. Därför kan man behöva injicera Flashen och dess parametrar samtidigt in i sidan. De senare (parametrarna) med URL-kodade '&'-tecken, enkelfnuttar och så vidare. Detta går att göra DOM-baserat, dvs utan att servern ser något.

Shared local Flash objects (Flash cookies)
Flash har sina egna cookies. De används mycket som vanliga HTTP-kakor, t.ex. för att konfigurera Flash från en tidigare access till sidan ("kom ihåg mina inställningar").

Flash-kakor tillhör en domän precis som HTTP-kakor så man måste utföra en attack i två steg. Först ser man till att HTML-sidan laddar en annan sårbar Flash som man tvingar att spara en Flash-kaka. Den Flash-kakan kommer sen att användas av den ursprungliga Flash:en.

Motmedel
Sårbarheterna är antagligen väl spridda. Det här löser utvecklarna genom att aldrig ladda globala variabler om de inte ska vara dynamiska och genom att ha koll på teckenkodningen så att inte %26 plötsligt blir ett '&'.

Läs vidare om

Inga kommentarer: