Aktuálně: Tak nám hackli GitHub…

Krátce poté, co zde vyšel seriál Jdu hacknout váš server, máme další článek na stejné téma. Tentokrát ale „žhavě aktuální“ o tom, jak jeden ruský programátor hacknul github (a poukázal na chybu v Rails, která se projevuje i na dalších serverech). A přitom stačilo, aby tým vývojářů Rails naslouchal…

Vše začalo v pátek, kdy @homakov vytvořil issue request, ve kterém navrhoval změnit standardní nastavení Active Record v Rails tak, aby vyžadoval od programátorů whitelist na Mass Assignmentu.

Jedná se přesně o to, co se řeší v PHP už velice dlouho – kontrola dat, které dostává skript od uživatelů ve formuláři. V Active Recordu (= „Doctrine pro Ruby“) můžete nastavit všechny parametry jednou metodou. V podstatě jde o to, že v rámci Ruby on Rails většina programátorů dělá v controlleru:

# save user data
Users.find(params[:id]).update_attributes(params[:user])

Pokud v rámci modelu Users nemáte nastaveno attr_accesible, pak můžete nastavit jakýkoliv parametr modelu, včetně (například) administrator.

Homakov reportoval issue, pohádal se s vedoucími developery Rails, a ti se nechali slyšet, že výhody standardního nastavení (kdy attr_accessible není použito) vyvažují jakékoli nevýhody plynoucí z vynucení. Homakov byl přesvědčen, že problém má ve skutečnosti obludné rozměry, a začal si hrát s Githubem, který je nad Ruby on Rails postaven.

V rámci přesvědčování Rails dev týmu vytvořil issue I’m bender from future, který byl založen v roce 3012. Udělal to jednoduše – ve firebugu přidal <input type="hidden" name="created" /> a, ke svému vlastnímu překvapení, zjistil, že to funguje. Proof of concept zaslal Githubu v pátek, a GitHub chybu ihned opravil.

Rails tým reagoval slovy „good one.“

Homakov pokračoval v experimentech. Napsal komentář jménem DHH (jeden z hlavních vývojářů Rails.) To byla docela legrace.

Potom mohl vymazat obsah jakéhokoliv příspěvku. To už nebyla sranda, to bylo docela nebezpečné.

Pak zjistil, že může přiřadit svůj SSH klíč k jakémukoliv projektu. Jackpot.

Rails tým stále ignoroval Homakovův požadavek i informace o závažnosti problému. Nakonec se tedy rozhodl, že udělá push do master větve ruby on rails. Nic nerozbil, jenom přidal jeden soubor a problém poté reportoval Githubu.

O github mu nešlo – šlo mu o standardní politiku Rails, která vede k bezpečnostním dírám. Github vydal roztomilé prohlášení, kde se rozplývají nad tím, jak problém proaktivně zjistili, smazali dotyčný SSH klíč a suspendovali účet tomu, kdo na exploit přišel.

Dozvuky

Rails komunita se okamžitě rozdělila na dva tábory – jeden tleskal, druhý Homakova odsuzoval. Faktem je, že i když mohl přistupovat k jakýmkoliv repozitářům, jediné, co udělal, bylo, že commitoval do rails/master. Mohl se přitom dostat k repositories, která jsou private, mohl tímto způsobem dělat s celým githubem, co by se mu zlíbilo. Na druhou stranu problém „prachsprostě využil“ a neoznámil jej nejdříve Githubu. Osobně si myslím, že udělal správnou věc – kdyby ho oznámil, díra v Rails aplikacích leží dodnes.

Hodinu po zmíněném pushi do masteru upravil Rails tým generátory tak, že je standardní politika restriktivní. Veškeré argumenty, které celou dobu stavěli proti, najednou ignorovali.

Dosah celé věci je mnohem závažnější, i když není vidět na první pohled – takto způsobenou díru obsahuje Posterous, Scribd, Speakerdeck a řada dalších služeb. A jedná se i o firmy, které mají velké finanční zázemí a mají dobré vývojáře! Popadaných webů bude v tomto týdnu asi nemálo. Máme se na co těšit, zatím je to docela show.

Nejsmutnější na celé věci je, že o chybě se ví minimálně od května 2007. A o celých pět let později to využije devatenáctiletý mladík k tomu, aby dokázal Rails týmu, že se jedná o skutečný problém.

Oprava bezpečnostní díry

Nejsem Ruby developer, a tak vás odkážu na tento článek. V podstatě by mělo do všech modelů stačit doplnit parametr attr_accessible, jak je vysvětleno v dokumentaci. Pokud jste o něm nikdy neslyšeli, nechtěl bych teď být ve vaší kůži.

Další čtení

Věděli jste, že nám můžete zasílat zprávičky? (Jen pro přihlášené.)

Komentáře: 42

Přehled komentářů

stewe Re: Aktuálně: Tak nám hackli GitHub...
Mennion GitHub
Pavel Ptáček Re: GitHub
sidik Re: GitHub
Mennion Re: GitHub
www Re: GitHub
František Kučera Framework vs. aplikace
Pavel Ptáček Re: Framework vs. aplikace
František Kučera Re: Framework vs. aplikace
srigi Re: Framework vs. aplikace
sidik Re: Framework vs. aplikace
Mennion Re: Framework vs. aplikace
František Kučera Re: Framework vs. aplikace
Lol Phirae Re: Framework vs. aplikace
František Kučera Re: Framework vs. aplikace
Michal Re: Framework vs. aplikace
Pooky OU SHIT
blizz Re: Aktuálně: Tak nám hackli GitHub...
allstar Grails
Čelo dhh - controller
Karel Reakce GitHub
j Re: Reakce GitHub
Mennion Re: Reakce GitHub
mamlasek Re: Reakce GitHub
Me Ametéři
vks Re: Ametéři
from wiki Re: Ametéři
fuzzy Re: Ametéři
Me Re: Ametéři
fuzzy Re: Ametéři
David Grudl Re: Ametéři
Čelo Re: Ametéři
HKMaly Sequel
mat. Re: Sequel
HKMaly Re: Sequel
Oldis Ego je problem temer kazdeho kdo neco vytvori
Frantisek S. 3012
Pavel Ptáček Re: 3012
František Kučera Re: 3012
5o Zend Framework
Čelo Re: Zend Framework
Čelo Re: Zend Framework
Zdroj: https://www.zdrojak.cz/?p=3614