CZ Podcast 75 Errata

Před pár dny jsem konečně zjistil, kolik lidí slyšelo CZ Podcast o bezpečnosti webových aplikací, ve kterém jsem byl hostem. To číslo samozřejmě znám úplně přesně a dokonce všechny tři posluchače znám i jménem. Byl jsem to totiž já, Ondřej Mirtes a Jakub Vrána. Poslední tři jmenovaní mě zároveň upozornili na několik faktických chyb a nepřesností. Důvody, proč k těm chybám a nepřesnostem došlo nejsou podstatné, ale omlouvám se za ně. Rád bych tedy v tomto článku tyto tiskové chyby opravil. Continue reading

ASP.NET Web Pages aneb jak Microsoft nechává vyniknout PHP

Když Microsoft před časem uvedl ASP.NET Web Pages, nebylo žádným tajemstvím, že se jedná o přímou alternativu k “hrůzám” typu PHP nebo klasickému ASP (ty hrůzy píšu záměrně v uvozovkách, tak jen PHPko vidí řada .NET vývojářů). Web Pages jdou, podobně jako jeho předobrazy, na tvorbu stránek přímočaře – žádné abstrakce nad HTML/HTTP jako u Web Forms, žádné patterny, routy apod. jako v případě MVC, prostě se kód začne vykonávat seshora dolů a jen se občas provede nějaká ta dynamická instrukce. Continue reading

Bezpečnost je míra, ne vlastnost

Chtěl bych se s vámi podělit o jeden příběh, který se nedávno odehrál. A poněvadž nebyl vyroben kdesi v Hollywoodu, ale napsal ho sám vývojářův život, tak není moc veselý. Na jeho konci se totiž místo závěrečných titulků rolujících po plátně za zvuku dojemných melodií objeví přístupové údaje k databázi jedné české a mnou oblíbené webové služby na sdílení obrázků.

Na sklonku minulého roku se kdesi na blíže neurčeném místě setkali dva vývojáři a začali se o tomto příběhu otevřeně bavit. V dnešní době z každé nevýznamné schůzky existuje záznam a tak i toto setkání kdosi nahrával a mě se po několika krabicích lahodného vína podařilo mého dobře informovaného známého přesvědčit k tomu, aby mi záznam tohoto on-line rozhovoru dvou vývojářů přenechal a já vám tedy teď jeho přepis nabízím. Omluvte gramatické chyby a chybějící diakritiku, z důvodu autentičnosti přepis neprošel jazykovou korekturou.

Začátek záznamu je bohužel nesrozumitelný a je přehlušen zvukem houkaček projíždějících policejních vozů, ale dá se vydedukovat, že jeden ze dvou protagonistů příběhu svého kamaráda upozorňuje na to, že ne zcela legálně získal přístup k databázi uvedené aplikace a zkušeně mu doporučuje, co má v následujících okamžicích podniknout.

spaze, 9.11.2011 23:47:14:
a zmen si heslo do db

spaze, 23:47:17:
a na mail

spaze, 23:47:21:

DB_USER
string(5) "jirka"

DB_PASS
string(14) "d2d5d95h1f5ds9"

Medhi, 10.11.2011 2:33:31:
a jak jste zjistili přístup do db, v čem spočívala ta díra?

spaze, 2:34:34:
vyvolas ladenku [1], mas login do db v konstantach a ladenka vypisuje konstanty

Medhi, 2:35:38:
ono to na nette [2] neběží, měl jsem tam nette jenom kvůli formulářům a nechápu, proč se laděnka zobrazovala na production, asi to nerozpoznala [3]

V tomto místě je záznam opět nesrozumitelný, lze jen vyvodit, že Medhi nabízí za danou informaci úplatek v podobě dodávky kvalitního kubánského nápoje destilovaného ze šťávy z cukrové třtiny. Poté záznam končí.

David Grudl, duchovní otec Nette [2], se v komentářích k jednomu z předchozích článků, ve kterém popisuji možnost napadnutí webových aplikací pomocí metody Mass Assignment, vyjádřil k bezpečnosti Nette takto:

David Grudl (28. 3. 2012 | 20:22) napsal:
Ačkoliv se kvůli své lenosti také snažím dělat v Nette vše co nejjednodušší, nikdy to nesmí jít na úkor bezpečnosti. Mass Assignment se proto Nette vůbec netýká. Z Nettích formulářů vždy dostanete jen ta data, která jste explicitně specifikovali. Totéž platí pro parametry předávané přes $_GET. A nelze to ani žádnou direktivou změnit, to je by design.

Tenkrát samozřejmě ještě nemohl tušit, že světlo světa spatří výše uvedený záznam, ve kterém je právě svatá trojice NetteNettí formuláře a Laděnka označena jako pachatel všeho zla. Zda Medhi použil uvedené nástroje špatným způsobem nebo zda je vina opravdu na těchto nástrojích samotných se už bohužel nedozvíme. Nicméně pro učinění závěru z tohoto příběhu to ani vědět nemusíme.

Použití jakéhokoliv nástroje, ať už je to webový framework nebo bouchač z reálného světa s východním přízvukem automaticky nezaručí bezpečnost vašich webových aplikací, nezávisle na tom, co tvrdí autor daného nástroje. Nebo váš nejlepší kamarád. Nebo váš šéf. Vždy se naučte, jak daný nástroj pracuje, jaké má omezení, jaké vlastnosti a kdy je vhodné jej použít a kdy ne. Vše pečlivě otestujte a hlavně věřte pouze svému úsudku a svojí hlavě. Tedy pokud nějakou máte.

Bezpečnost totiž není vlastnost, ale pouze míra, kterou byste neměli nikdy snižovat.


1Laděnka je slangový výraz používaný ve vývojářském podsvětí k označení nástroje pro odhalování organizovaného zločinu v podobě chyb ve zdrojových kódech, často bývá spojován se skupinou známou pod jménem Nette.

2 Skupina Nette disponuje souborem nástrojů, které se využívají především pro rychlejší a pohodlnější psaní webových aplikací, v odborné literatuře se pro takový soubor nástrojů používá pojem framework.

3 Důvod, proč se tomu tak stalo naleznete na GitHubu v sekci Nette Issues: Debugger: wrong development mode detection.

WebExpo 2012 Call for Papers

Networ/king?Necelou minutu před deadline jsem odeslal přihlášku svých dvou příspěvků na WebExpo 2012. Potvrzující e-mail, který přišel zpět má čas 23:59:53 a samotného by mě zajímalo, kolik lidí přihlášku odeslalo po mě. Díky patří organizátorům WebExpa i Jeanne Trojan, za to, že mě zcela nezištně dokopali k tomu, abych aspoň jedno téma přihlásil. (Mimochodem, počet zlevněných vstupenek na WebExpo se blíží k nule, takže pokud doma nemáte miliony pod podlahou, tak neváhejte!)

Jaká témata jsem vybral pro tento rok? A jakým způsobem jsem je přihlásil? A co o mě ještě nevíte? Klid, klid, všechno vám to hezky povím. Přihláška řečníka na WebExpo obsahovala několik otázek na tělo řečníka a pak několik otázek na tělo příspěvku. Pro úplnost a jako odkaz budoucím generacím uvedu všechny své odpovědi. Třeba někdo z mých čtenářů vlastně ani neví, čím se zabývám. A vy ostatní mi snad prominete trochu nezvykle odlehčené téma. Continue reading

FPD aneb Full Path Disclosure

FPD je jedna z přibližně 17576 třípísmenných zkratek používaných na Internetu a jedna z mála, kde písmeno F neznamená, hmm, třeba friend. Význam zkratky, o kterém bych vám rád povyprávěl je však důležitý pro bezpečnost webových aplikací. FPD totiž v oblasti webové bezpečnosti znamená Full Path Disclosure, do češtiny přeloženo například jako odhalení, nebo raději lépe prozrazení úplné cesty. Cestou je myšlena cesta k souboru, k právě spuštěnému skriptu, ne cesta domů z vašeho oblíbeného baru.
Full Path Disclosure na rapidog.com
Pokud něco podobného uvidíte na vlastním webu, pak váš web neodolá útoku Full Path Disclosure a plnou cestu vyzradí. A to by rozhodně neměl. Už vidím, jak se vaše dlaň blíží k vašemu obličeji a jak si říkáte, že cestu ke svým souborům přece znáte a jak nechápavě kroutíte hlavou. Zobrazená informace je totiž důležitá nejen pro vás, ale i pro zlé hochy, kteří chtějí na váš web nějakým způsobem zaútočit Continue reading

Mass Assignment v PHP

Počátkem března se Rails komunitou prohnal hurikán jménem @homakov. Škod naštěstí nenapáchal mnoho, jenom se lehce otřel o GitHub a odnesl střechu a plot. Mohl si vzít cokoliv, ale asi by to neunesl (a to asi ani psychicky).

O co přesně šlo? V seznamu návrhových vzorů, které Ruby on Rails implementují najdeme i Active Record, s nímž nám Rails ulehčují práci pomocí přístupu, který se volá Mass Assignment – hromadné přiřazení. Díky standardnímu nastavení Rails bylo možné nastavit jakýkoliv atribut, ne jenom ty povolené – whitelistované. A toho právě Egor Homakov využil. Nechci zde opakovat detaily, ty jsou dobře rozebrány v článku o hacku GitHubu na Zdrojáku, ale přijde mi, že článek trochu nešťastně naznačuje, že nic podobného by se v PHP stát nemohlo. Jasně, že mohlo, úplně v pohodě, zkusím naznačit jak. Continue reading