About Michal Špaček

Zajímá mě bezpečnost webových aplikací a baví mě předávat své zkušenosti na školeních, které pořádám. Na Twitteru mě najdete jako spazef0rze.

Zdálo se mi o WebExpo 2014

WebExpo logoHolky a kluci, co dělají tento rok WebExpo požádali garanty a vůbec všechny, aby se podělili o svůj průchod WebExpem. Už se podělil Riki Fridrich i Jirka Sekera, u mě byla touha podělit se dokonce tak silná, že se mi dneska v noci zdálo o tom, jak bude WebExpem prolítávat Špaček. Musím si to zapsat, abych ho náhodou nezapomněl a pak si 14. září večer neříkal “jakou přednášku jsem to vlastně chtěl vidět?” Ten sen vypadal tedy nějak takhle:

Hned po ránu vyrážím do CEVRO Institutu na Tomáše Hálu z ACTIVE24, který tam od 13h povídá o projektu Fénix, bezpečné VLAN, která v případě DoS útoku umožní vybraným službám spolu komunikovat, ať se děje, co se děje. Ale to nám, obyčejným uživatelům webových prohlížečů je stejně k ničemu, protože do takové sítě přístup mít nebudeme a tak se na ty služby v době útoku stejně nepřipojíme.

Po malé přestávce se nechtěně probouzím na přednášce Petra Chytila z AVAST Software, ten zrovna popisuje techniky, pomocí kterých dostávají informace o virech do našich antivirů. Petr také prozrazuje, že tahle vlna “exekutorských e-mailů” byla už určitě poslední, protože od příště tyhle zprávy budou našejejich antiviry blokovat ještě dříve, než je váš oblíbený exekutor odešle.

Traffic v CEVRO Institutu i nadále skenuje AVAST, od Jakuba Janečka se dozvídám o masivně škálovatelných službách, o úplně nejvíc Web Scale databázi MongoDB se ale bohužel nemluví, takže si nenápadně odskakuji na toaletu a už se nevracím. Zapomenutou bundu mi žádný dobrák nepřinese. Večer na party je dostatečný klid, takže si do sluchátek pouštím podcast, ve kterém se právě o technologiích používaných v AVASTu mluví a já začínám litovat, že jsem nezůstal do konce.

Na toaletu samozřejmě nejdu, to ještě pár dní vydržím, místo toho se vydávám do Světozoru. Cestou ovšem zabloudím, kolem Václaváku nejsem místní, a omylem se zjevuji na Startup Stage, kde slyším pár vět a v nich, jako jeden z mála posluchačů, rozumím jen jednomu jedinému slovíčku – hacking. Tomu ale zase nerozumí ostatní návštěvníci. V tu chvíli se o slovo opět hlásí potřeba a já si vzpomínám, že jsem vlastně chtěl jít na záchod. Po technické přestávce se tedy konečně dostávám do Světozoru, kde Daniel Bagge povídá o evoluci hrozeb starších než on. Daniel pracuje v Národním bezpečnostním úřadu a já už jsem párkrát slyšel mluvit jeho nejvyššího, takže správně tipuji, že tou hrozbou, o které bude přednáška, je právě jeho šéf. Podle fotky starší je, takže to sedí.

Ve Světozoru zůstávám na přednášku Pera Thorsheima. Per založil konferenci Passwords, která se koná dvakrát ročně, jednou v Las Vegas, podruhé kdesi za severním polárním kruhem. Každým rokem se na této konferenci sjíždějí odborníci, kteří svá hesla zapomněli a Per jim je vždy připomene. Jsem moc rád, že se Per ukáže v Praze, od mého posledního výletu do Las Vegas už pár dní uplynulo, takže jsem zase několik hesel stihl zapomenout.

Nejsem sám, kdo zapomíná hesla, takže Perova přednáška se protahuje až do brzkých ranních hodin do míst, kde točí Plzeň. Všechna nová hesla všech účastníků Perovo prodloužené přednášky si hned zapisuji a díky tomu nestíhám workshop Jana Pavla od 10h ráno, ale co už, kyberzločincem již podle některých jsem, takže to zas tak nevadí. Pokud vy nejste a chtěli byste být, neváhejte, ale doma to děti raději nezkoušejte.

Veřejným tajemstvím letošního WebExpa je skutečnost, že AVAST tentokrát v rámci sponzorství místo finančního příspěvku poslal organizátorům na účet asi dvacet spíkrů, takže mě nepřekvapuje, že nestíhám ani přednášku dalšího avasťáka, .NET vývojáře Michala Augustýna, tentokrát o Postgresu, od 10:20. Jestli tam někdo půjdete, tak se hlavně neptejte, proč Michal nezvolil MSSQL, jinak se ostatní posluchači neprobudí ani na oběd, který letos vlastně ani není v ceně.

Vzpomínám si, že jsem chtěl slyšet i něco zajímavého ze světa databází, jenže před sedmi lety jsem přičuchnul k PostgreSQL a tak mě další varianta MySQL zas tak moc netankuje. V klidu tedy pokračuji v zapisování všech nových hesel a chvilkami mě mrzí, že jich mám tolik, že jsem nestihl Michala, ale do notýsku si k jeho heslu PasswordAvast3 píšu poznámku, že si mám na večer stáhnout další podcast, ze kterého se o PostgreSQL později dozvídám i něco nového.

Node.js, Azure a Skype je ďábelská kombinace, před pár lety skoro nepředstavitelná. Pokud pro Skype náhodou nepracujete a chtěli byste o téhle kombinaci něco slyšet, dostavte se od 11h do České Spořitelny, Catalin Ionut Fratila (to je jeden člověk), vám řekne, jak to ve Skype míchají. Podle mých informací jim to jde ještě lépe, než když jsme tam s Lukášem Hudečkem míchali rum s kolou, takže se máte se na co těšit.

Po pauze na oběd, která vlastně žádná není, se nějakým zázrakem probouzím v České Spořitelně na přednášce Matěje Kvocera s názvem Rent-a-hacker. V CEVRO Institutu probíhá souběžně přednáška Stanislava Hackera a já celou dobu přemýšlím, jakou dostanu cenu za to, že jsem tenhle easter egg pořadatelů objevil. Přednášku tím pádem moc nevnímám, ale mám na sobě tričko s číslem svého bankovního účtu, kdyby si mě někdo chtěl náhodou najmout.

Od 14h povídá Innovation evangelist České Spořitelny v České Spořitelně o API České Spořitelny. Za mě dobrý a palec nahoru organizátorům za výběr místa na tuhle přednášku. Já osobně bych ji dal do Era světa. Budete-li mi chtít v komentářích sdělit, kam jinam byste tu přednášku dali vy, nezapomeňte do textu uvést slovo kiwi, ať víme, že jste si můj sen přečetli celý.

Líbí se mi, že když se konečně z těch všech pojišťoven vzpamatuji, tak nemusím nikam přecházet. Michal Kubíček začíná mluvit o tom, jak si nenechat hacknout WordPress. WordPress sice nepoužívám a tak zkouším, jestli web pay4t.cz, za nímž stojí právě Michalova firma, stále ukládá hesla uživatelů pomocí algoritmu MD5 bez přidání soli. A co byste řekl, měl ho tam, pořád. Zbytek přednášky se tedy raději těším na jediného WordPress hackera, kterého znám osobně. Borek Bernard se snaží WordPress ohnout tak, aby uměl verzování všeho možného do Gitu a mě se moc líbí, že je možné publikovat obsah tak, že do Gitu jednoduše pushnu nový textový soubor.

Na konci víkendu mě trochu mrzí, že letošní WebExpo nemělo více vývojářských přednášek a že to byl spíše takový Marketing Festival říznutý Creative Mornings, nicméně už teď vím, že si to týden po WebExpu vynahradím několika dny školení (zvu vás) a návštěvou konference o PHP v Brně.

A co se zdálo dneska vám, hmm? A chci to vůbec vědět?

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

Skype, Joltid a core technology

V posledních dnech se hodně mluví a píše o Yahoo a koupi Summly. A taky o tom, že Summly nevlastní svoji “core technology”, ale že si ji pronajímá. Nevím, co tou akvizicí Yahoo sleduje a celkem je mi to jedno, ale tato situace tu není poprvé. Před pár lety se stalo něco podobného v mnohem větší míře, za víc peněz s větším rizikem. 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