Toat? povestea începe de aici: https://rstforums.com/forum/91225-stored-xss-mail-yahoo-com.rst Acum câteva s?pt?mâni am g?sit o vulnerabilitate de tip Cross site scripting (stored) în Yahoo Mail. Pe scurt, vulnerabilitatea se reproducea în felul urm?tor: aveai nevoie de dou? conturi: contul atacatorului ?i contul victimei. Pe contul atacatorului, setai numele care s? apar? atunci când trimi?i un email orice vector XSS de forma "><vector> ( "> era obligatoriu pentru a ie?i din atributul "title"). Trimiteai un nou mail c?tre adresa ta(a atacatorului) ?i c?tre victima. În?ial, pe contul victimei nu se întamplase nimic, codul Javascript ap?rea ca text. M-am gândit s? r?spund la mail-ul primit. Revenind la inbox, am observat c? vectorul nu mai ap?rea ca text, ci era interpretat ca fiind cod. Îns? supriza cea mai mare a fost când am descoperit c? vectorul nu se executa doar pe contul victimei, ci ?i pe contul atacatorului. Atunci mi-am pus întrebarea fireasc? cum pot face s? se execute codul Javascript far? interc?iunea victimei. Analizând informa?iile ob?iunute deja, ?i anume c? vectorul se executa doar atunci când raspundeam la mesaj m-am gândit s? folosesc 3 conturi în loc de 2. Am trimis mail de pe contul atacatorului, de aceast? dat? ad?ugând pe lista destinatarilor un al doilea cont al meu. Am dat "Reply all" iar dup? ce r?spunsul a ajuns pe contul victimei, codul Javascript s-a executat (?i se executa de fiecare dat? când vitima efectua o ac?iune (cum ar fi citirea mesajului, stergerea altor mesaje etc)). Am raportat vulnerabilitatea iar ce de la Yahoo au spus c? este duplicat?. Dup? câteva zile, am verificat dac? vulnerabilitatea mai func?ioneaz?. Func?iona, îns? codul JS nu se mai executa pentru fiecare ac?iune a victimei, ci doar atunci când victima se loga sau când d?dea refresh la pagina. Am încercat s? refac to?i pa?ii pentru a vedea ce au schimbat. De aceast? dat?, când încercam s? trimit mesajul de pe contul atacatorului (care avea setat numele "><img src=x onerror=alert(1)>) primeam un email prin care eram anun?at c? emailul nu a putut fi trimis datorit? numelui meu. Dup? câteva încerc?ri am observat c? problema nu era tagul HTML(cum m? a?teptam), ci caractere libere din interiorul s?u. Am înlocuit toate space-urile cu / iar vectorul a devenit "><img/src="x"/onerror=alert(1)> . Am trimis emailul ?i totul func?iona cum trebuie. Imediat am raportat vulnerabilitatea. Cei de la Yahoo m-au întrebat dac? înc? functioneaz?, pentru c? ei tocmai au rezolvat-o (bun? treab? ). Le-am dat din nou pa?ii necesari pentru a reproduce vulnerabilitatea ?i mi-au spus c? e valid?. Video PoC #1 :
Video PoC #2 :
?i asa...Yahoo plateste pentru o vulnerabilitate de 2, 3, cine stie poate de 5 ori.