Préambule
Pour inaugurer le blog de SecureMyData, je vous ai préparé un petit case-study pour modifier un Tweet qui ne nous appartient pas.
Pour ne pas nuire aux personnalités dont j’ai modifié les tweets, j’ai choisi de mettre une petite image et un lien redirigeant vers médecins sans frontières.La démarche était purement technique et curieuse.
Comptes ciblés
Avant de vous décrire comment j’ai procédé, voici les comptes dont j’ai modifié les tweets :
- Kev Adams : un humoriste français
- Norman : un youtubeur avec presque 10 millions d’abonnés sur YouTube
- Omar et Fred : deux humoristes et comédiens
- Russell Brand : un humoriste anglais (12 millions d’abonnés sur Twitter)
- SoundCloud : un site de streaming audio bien connu
- Stephen Fry : un écrivain, acteur et réalisateur britannique (qui possède aussi 12 millions d’abonnés)
- Jason Thompson : un joueur de NBA
- Nicolas Bedos : un humoriste et acteur français
Résultat
Vote For Me !!! Thanxxx http://t.co/bpsiJab
— Kev Adams (@kevadamsss) 30 juillet 2011
C’est marrant ce truc http://t.co/9r91eyO
— Norman 🐑 (@NormanDesVideos) 18 août 2011
Petit cadeau : Saviez-vous que Leila Bekhti & Fred Testot chantent sur la BO d’ #ItinéraireBis ? Ecoutez : http://t.co/SJMs7Dq
— omaretfred (@omar_fred) 3 août 2011
Have a listen to this ol’ clap-trap http://t.co/Oc3Gb7Y
— Russell Brand (@rustyrockets) 24 août 2011
RT @rustyrockets Have a listen to this ol’ clap-trap http://t.co/E8fxI0o
— SoundCloud (@SoundCloud) 25 août 2011
Having a BBQ? Support 2 brilliant male cancer charities. Sign up now! http://t.co/WPYaYQQ Raising funds for meat and two veg. # BBQWC
— Stephen Fry (@stephenfry) 8 juin 2011
http://t.co/KSdpzJ4 Code is: JTF
— Jason Thompson (@jtthekid) 18 août 2011
“@FHDR: RT @NicolasBedos1: Le blog de Nicolas Bedos : http://t.co/PyX69Pa / w0of! tiens comment ça va ? Et toi mon vieux ?
— Nicolas Bedos (@NicolasBedos1) 16 juillet 2011
Démarche de recherche
Récupération des tweets
Tout d’abord, j’ai utilisé un logiciel russe nommé Zennoposter pour récupérer tous les tweets avec un lien sur le compte de plusieurs centaines de personnalités (l’API Twitter ne laissant pas passer ce genre de requêtes).
Avec Zennoposter, j’ai réalisé un « template » qui effectuait cette opération. En voilà un aperçu.
Zennoposter me renvoie donc un fichier avec tout les tweets : voici le fichier pour les curieux.
Récupération des liens
Une fois ce fichier en ma possession, j’ai extrait tous les liens des tweets. C’est facile. Twitter raccourciy les URL avec un format tel que t.co/XXXX .
grep -E -o 'http://t.co[^"]+' tweets.txt >> urls.txt
Avec cette commande, on extrait tous les liens simplement dans un fichier urls.txt (encore une fois il est accessible aux curieux).
Filtre des liens
Une fois ces urls extraites, il fallait que je teste leurs disponibilités. Pour ne pas spammer les services whois, j’ai tenté de faire un CURL sur les URL et j’ai regardé si le serveur répondait.
Pour ceci, j’ai développé un petit script en PHP
<?php $content = file_get_contents('urls.txt'); $urls = explode("\n",$content); foreach($urls as $key => $url) { $url = trim($url); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); curl_setopt($ch,CURLOPT_TIMEOUT,30); $a = curl_exec($ch); if(!empty(curl_error($ch))) { file_put_contents('test.txt',$url . ' => ' . curl_error($ch)."\n",FILE_APPEND); } echo "$key => $url \n"; }
Ce script PHP resortait un fichier de logs appelait test.txt que voici.
Ensuite j’ai identifié que les lignes contenant « Could not resolve host: » était intéressante. J’ai donc juste récupéré les domaines de ces lignes à l’aide d’une commande UNIX.
sed '/host/!d' test.txt | awk -F"host: " '{print $2}' >> sort.txt && cat sort.txt | sort | uniq >> uniq.txt
Une fois ces domaines extraits, j’ai regardé les domaines disponibles et j’ai racheté ceux présents sur un tweet que je souhaitais modifier.
J’ai donc racheté 7 noms de domaine.
Mise en place des domaines
Ensuite, pour que la modification ait lieu, il m’a fallu insérer des Twitter Card sur mes domaines : c’est un bout de code HTML qui indique à Twitter ce qu’il doit afficher.
<meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@MSF"> <meta name="twitter:title" content="Médecins sans frontieres"> <meta name="twitter:description" content="Faites un don"> <meta name="twitter:image" content="https://jamaity.org/wp-content/uploads/2015/12/logo_medecins_sans_frontieres.jpg">
Et j’ai aussi forcé la redirection vers le site de médecins sans frontières.
<meta http-equiv="refresh" content="0; URL=http://www.msf.fr/"> <script> document.location.href = "http://www.msf.fr/"; </script>
Une fois ceci effectué, j’ai scanné mes noms de domaines sur l’outil de validation des Twitter Card et la modification est apparu sur le tweet.
Conclusion
La conclusion sera très simple. Elle démontre que personne n’est à l’abri d’une faille de sécurité. Que ce soit le site ou l’utilisateur, il persistera toujours une faille quelque part.