XSS iekš nekur.lv & svaigs.lv?
Posted on June 10th, 2007 in Internets |
Nevienam laikam nav noslēpums, ka nu jau pēdējos pāris gadus liela uzmanība interneta projektu izstrādē ir jāpievērš tieši dažāda veida drošības pasākumiem, īpaši jau dažādu XSS uzbrukumu formā. Līdz ar dažādu satura sidikācijas servisu uzplaukumiem tagad paveras pavisam jaunas iespējas darboties arī cilvēkiem ar noslieci uz XSS izvritībām. Tad nu es te tagad tā padomāju - pavisam nesen pie mums Latvijas internetā ir uzradušies divi jauni satura sindikācijas servisi (nekur.lv un svaigs.lv), kas apkopo jaunāko Latvijas blogos. Arī mana bloga ieraksti tur parādās.
Lai gan neesmu pamēģinājis šādas mahinācijas veikt, tomēr man ir diezgan lielas aizdomas, ka šie projekti varētu būt salīdzinoši ļoti viegli ievainojami. Viss, kas mums ir jāizdara, ir jāpanāk, ka mūsu bloga ieraksti parādās attiecīgajos servisos. Lai arī šis process nav automātisks, tomēr abi servisi ir ieinteresēti lielākā satura plūsmā, tāpēc pēc vairāku sakarīgu rakstu uzrakstīšanas varētu būt salīdzinoši vienkārši tikt viņos iekšā. Ko darīt tālāk? Vienkārši - rakstam kaut kādu sliktu JavaScript kodu sava bloga ierakstā, vai arī nomainām RSS barotni pret kādu sliktu saturu. Ko mēs varētu izmēģināt? Mēs varētu vienkārši iekļaut kaut kādu nekaitīgu javascript koda fragmentu šajā ierakstā un paskatīties, kas notiks, kad šis ieraksts parādīsies katrā no servisiem.
Tad nu mazliet padomāju un lai mahinācijas neviens īsti nemanītu, ievietoju šādu vienkāršu javascript kodu:
<script>
try{
console.info(document.domain);
}catch(e){}
</script>
Kods ir pilnīgi nekaitīgs, FireBug konsolē (ja tā ir pieejama) izdrukājot vien pavisam vienkāršu testa tekstu - attiecīgās lapas domēnu. Ja nu ir dikti liela vēlme taisīt ziepes, tad te varētu sarakstīt arī stipri kaitīgāku kodu.
Tad nu tagad pagaidīšu, kad abos servisos šis ieraksts parādīsies un tad izdarīsim secinājumus.
Papildināts: nekur.lv veiksmīgi izgāja šo triviālo testu, <script></script> birkas vienkārši tika izgrieztas. Tas gan neizslēdz iespējas, ka nav citu veidu, kā tur iemānīt dažādus XSS skriptus vai izmantot dažādas CSRF mahinācijas.
Papildināts #2: svaigs.lv izrādījās ievainojams. Patiesībā tests bija ārkārtīgi vienkāršs, netika pielietota neviena no neskaitāmām XSS iebarošanas viltībām, tik vien kā tīrs JavaScript kods atklāti ierkastīts <script> birkās. Cerams, ka kļūdas pavisam drīz tiks novērstas, citādi te ļaundariem paveras ļoti plašas iespējas manipulācijām, gan vienkārši veicot kaut kādas lietotāju pārsūtīšanas (redirect) darbības, lai zagtu trafiku, gan arī visādas citas manipulācijas.
Patiesībā, gaidot rezultātus jau domāju, ko rakstīšu pie secinājumiem, ja abas lapas izies šo testu un nevarēju izdomāt. Tā nu veiksmīgi tiku cauri no neliela aplauziena, jo aizdomas izrādījās patiesas. Tad nu varu vien novēlēt labu veiksmi esošajiem un topošajiem projektu autoriem cīņā ar XSS un mācīties no šīs vienkāršās norādes uz potenciālajām problēmām. Un jā, cerams, ka mani par šādu joku no šiem servisiem tagad neizmetīs :).
Papildināts #3: Izrādās, ka pavisam nesen arī citi ir veikuši mahinācijas svaigs.lv, tiesa tikai ar CSS līdzekļiem un pēc visa spriežot tīri nejaušības pēc.
8 Responses
Gh, h4×0rZ.
Vajadzetu redirektu uz tavu lapu uzlikt pagaidaam:P
Nu mērķis nebija kaut ko baigi lauzt vai zagt. Mērķis bija parādīt, ka par drošību ir jādomā arī satura sindikācijas kontekstā. Parasti visur tiek rakstīts, ka nedrīkst uzticēties lietotāju iesūtītajiem datiem, teiksim pievienojot komentārus vai iesūtot gatavus rakstus. Vienkārši te ir tas pats princips ar to atšķirību, ka šajā gadījumā servisa uzturētājs pats pie sevis ievelk jau gatavus datus un var gadīties aizmirst, ka arī jau gatavos datos var būt visādi brīnumi. Turklāt, ja izmanto triviālo viltību ar document.domain JavaScript vērtību, tad patiesībā mahinācijas var panākt pat nekādi neietekmējot savu lapu.
Vienkārši nekur.lv izmanto labāku skriptu. Savukārt svaigs,lv dēļ agrākās lēnas lapas ielādes migrējis no Simplepie uz tumblr.com, kurš ir lēts sūds radīts blogošanai, nevis RSS apstrādei.
Tā kā aicinājums savest šo kārtībā ir jāprasa http://www.tumblr.com/ veidotājiem.
Nu es taču nevarēju paredzēt, ka iekš CSS viņiem Heading1 būs TIK milzīgs. :)
Pavisam noteikti par aizsardzību pret XSS ir domāts jau no pašiem pirmssākumiem. Esmu pats vienu reizi tā pa nopietnam uzrāvies uz šo un vairs nevēlos :) Ja ir vēlme, var eksperimentēt un mēģināt pielietot jebkuru no zināmajām XSS metodēm. Nevajadzētu strādāt.
Es jums vienu priekšā pateikšu:
Izgriezi :)
Te: http://paste.php.lv/5650/nonum