Zneužitelnost FB sociálních pluginů

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: .cCuMiNn.
Datum: 11.4.2011
Hodnocení/Hlasovalo: 1.56/32

Pokud jste již někdy přišli do styku se sociálními pluginy (Like buttony, Commenty, apd.) od Facebooku při jejich vkládání do obsahu webové stránky, pak jste si mohli všimnout, že Facebook se vydal cestou "nejmenšího odporu" pro tvůrce webů.

Ti, pokud chtějí na své stránky umístit některé z prvků umožnící interakci s Facebookem, jednoduše do HTML kódu svých webových stránek vloží plovoucí rám (iframe). Obsah rámu pak obsahuje samotný prvek Facebooku, kterým může být tlačítko "To se mi líbí", komentáře nebo jiné prvky. O vše ostatní se již stará sám Facebook.

Ne vždy je vkládání pluginů skutečně takto jednoduché. Zájemce o problematiku odkáži na článek fb:like (facebook Like Button) a jak na něj, kde je možné získat potřebné informace. V rámci tohoto článku si ovšem plně vystačíme pouze s rámy.

Řešení, ke kterému se Facebook s použitím prvku <iframe> uchýlil, má ale jednu nevýhodu. Jeho obsah nemůže kvůli Same Origin Policy přistupovat k obsahu webové stránky mimo tento rám a nemá proto k dispozici infromaci o tom, ve které webové stránce je vlastně načten.

No a zde vyvstává otázka: Néní této skutečnosti možné nějakým způsobem zneužít? Co kdybychom kód pro vložení rámu uložili na jiné stránky, než kterým byl původně prvek určen?

Začneme příkladem s Like buttonem. Pokud na toto tlačítko narazíte na některé webové stránce, jste nejspíš přesvědčeni o tom, že po jeho stisku nasdílíte odkaz na aktuální stránku na svou zeď. Když se však podíváte na HTML kód prvku iframe uvidíte, že ve skutečnosti nasdílíte odkaz, který je uveden v odkazu v proměnné href.


<iframe src="http://www.facebook.com/plugins/like.php?href=www.soom.cz&layout=standard&show_faces=false&width=450&action=like&font&colorscheme=light&height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:35px;" allowTransparency="true"></iframe>


Pokud tedy hodnotu této proměnné přepíšeme odkazem, který se nám více hodí, například pro hlasování v soutěži, a toto tlačítko pak umístíme na svůj (nebo skrz XSS na cizí) web, snadno tak můžeme navýšit počty hlasů z unikátních účtů. A co třeba umístit nic netušícímu uživateli na jeho zeď odkaz na porno? Není nic jednoduššího, viz. toto PoC tlačítko:



U Like buttonů celá věc ale zdaleka nekončí. Rádi byste někomu řádně zaspamovali komentáře? Proč ne. Situace je víceméně stejná. Stačí z cílových stránek zkopírovat HTML kód prvku <iframe>, který tyto komentáře na stránku vkládá.


<iframe src="http://www.facebook.com/plugins/comments.php?api_key=113869198637480&channel_url=http%3A%2F%2Fstatic.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%3Fversion%3D0%23cb%3Df110dfcaf5c68be%26origin%3Dhttp%253A%252F%252Fdevelopers.facebook.com%252Ff21892ff6409b12%26relation%3Dparent.parent%26transport%3Dpostmessage&href=example.com&locale=en_US&numposts=2&sdk=joey&width=500" class="fb_ltr" style="border: medium none; overflow: hidden; height: 927px; width: 500px;" name="f290ff731871446" id="f38e2adc367eafc" scrolling="no"></iframe>


Když pak tento kód umístíte na jinou webovou stránku, kde rozpoutáte řádný flamevar, nebudou jednotliví přispěvatelé šetřit sprostými slovy, protože si budou myslet, že se nachází na stránkách nějakého idiota. Ve skutečnosti ale všechny příspěvky budou směřovat a budou zobrazeny na úplně jiném webu, aniž by to pisatelé jednotlivých příspěvků tušili. Například níže vložené komentáře patří ve skutečnosti k webu: http://developers.facebook.com/docs/reference/plugins/comments/.




Tímto článkem vás v žádném případě nechci nabádat k páchání podobné záškodnické činnosti. Pouze jsem jím chtěl upozornit na jisté slabiny, kterými social pluginy od Facebooku trpí.