Bezpečnostní díra v Lotus Notes

V partnerském fóru (a pravděpodobně i v diskuzní databázi na developerWorks) se rozhořela celkem solidní diskuze o možnosti naboření Lotus Notes serveru.

Když jsem si to tak pročítal, tak jsem si uvědomil, že něco podobného jsem již úspěšně používal před pěknou řádkou let, úspěšně a k mé naprosté spokojenosti. Připojuji originální popis od Evgenyho Kiseleva:

Any user that has designer access to any database on Domino server can reach Full Access Administrator level on this server. So, he can create and run agents with Full Administration privileges. As result, any user with designer access to any server database has access to server’s file system as well as he can list his name in the “Full Access administrators” fields in every server document. Due to Namagent.nsf (Server.Load Setup Agent) database that have Manager access for -Default- and Anonymous, by default every user has Full Access administrator rights on every Domino R7, R8b2 server. It is possible due to incorrect algorithm used by Agent Manager to check the agent signature. Agent Manager does not check signature every time it launches the scheduled agent. It checks it only the first time agent runs. Then Amgr stores agent name and signer name in the agent cache. Next scheduled time Amgr will not check the signature (i.e. validate signer public key with certifier public key, decrypt agent’s code hash from signature with signer public key, calculate current code hash and compare both hashes). Instead it will check only text: agent name and signer name and compares them with text value from agent cache.

Steps to reproduce:

Start position:

  • Server Domino R7.0.2 or R8b2
  • Vasya Pupkin, simple user without privileges
  • Database on the server, having Vasya Pupkin as Designer or Manager in its ACL (for example, namagent.nsf).

Step 1

  • Vasya Pupkin replaces design of namagent.nsf to any standard template that have scheduled agent, running on „-Any Server-“ (agent schedule dialog box) – for example, „dominoblog.ntf“ (IBM Blog, Domino 7.02, agent „replicaCheck“). Agent will be signed by Lotus Notes Template Development/Lotus Notes. He can replace design of namagent.nsf as manager by default.
  • Vasya Pupkin creates local replica of namagent.nsf

Step 2

  • Vasya Pupkin installs Domino server and administration client on his notebook, and registers organization „Lotus Notes“
  • Using „Lotus Notes“ certifier he registers user „Lotus Notes Template Development/Lotus Notes“. Now he has self-made (falsified) „Lotus Notes Template Development/Lotus Notes“ ID file. RSA key pair in this ID file is totally different from original, but name is the same.

Step 3

  • Vasya Pupkin switches to falsified „Lotus Notes…“ ID.
  • He opens LOCAL replica of namagent.nsf with Notes Designer and changes the code of the agent. For example, he deletes old code, and writes his own code:
Sub Initialize
	Dim FileNum As Integer
	FileNum% = Freefile()
	Open "C:agenttest.txt" For Output As FileNum%
	Print #FileNum%, "Anything"
	Close FileNum%
End Sub

In „Agent Properties“ dialog box he switch runtime security level to „Allow restricted operations with full administration rights“. Then he saves the modified agent. This code is signed now by falsified „Lotus Notes …“. All code modifications were made in the local replica.

Step 4

  • Vasya Pupkin checks the agent’s schedule. He discovers that agent runs every 15 min. So, he waits 16 min to be sure that true agent has already run at server at least one time.
  • Vasya Pupkin switches to his own ID, then replicate his local namagent.nsf with server. Falsified agent is now placed in the server replica.
  • After 15 min he can discover that falsified agent works with full administration rights, and file „C:agenttest.txt“ has been created.

In server document at the Agent Manager tab, in the field „Refresh agent cache“, 00:00 – default time, when Amgr rebuilds its agent cache. You can expect that falsified agent will be discovered after this time, but it continues to run. Agent cache refresh does not work – Agent Manager still believes that this agent signed by true Lotus Notes Template Development/Lotus Notes.

Osobně jsem to nepoužíval až takto vychytaně, ale když mi poslal zákazník databázi, ke které jsem neměl přístup (a která nebyla šifrovaná), tak jsem prostě vytvořil certifikát s jeho jménem a databázi spokojeně otevřel. Nemohl jsem přirozeně přistupovat do jejich systému, ale na otevření databáze (do které jsem potřeboval) mi to bohatě stačilo.

IBM k tomuto tématu vytvořila SPR KHON72EHWT a plánuje (už by snad mohla být venku) vytvořit Technote 1258784. Vzhledem k tomu, že debata se rozhořela skoro před měsícem, tak nyní už by snad mohl být venku (a dostupný) hotfix (adresu nemám :))

A úplně nejdůležitější bod z celé debaty – pokud přijdete na nějakou podobnou bezpečnostní díru, tak ji nemáte zveřejňovat, ale popis poslat na security @ notesdev.ibm.com a dát IBM šanci, aby ji opravila dřív, než se na to přijde.

Napiš komentář, díky!

První dny v Sydney

Středa 18.4.2007 Vítejte v Soulu

Tak jsme šťastně dosedli na zem v Soulu. Vystoupili z letadla, prošli první kontrolou a přesunuli se do čekacího protoru. Sotva jsme se usadili, tak už u nás byla Korejka a ptala se jestli bychom jí nevyplnili dotazník. Proč ne, máme 6 hodin času. Ze začátku pohoda, pak však začalo přituhovat, a to nejen s angličtinou, ale hlavně s typem otázek – např. Jaké restaurace jste v čekacím protostu navštívili, jak je hodnotíte atd. Naše fantazie musela začít pracovat naplno, neboť jsme vlastně jen vylezli z letadla a sedli si. Dotazník jsme však statečně dokončili a za odměnu jsme dostali nerezové přívěsky panáčka a panenku na klíče. Fakt milé.

První hodina ze 6 čekacích, tedy utekla rychle. Udělali nějaké fotky typu Martin na letišti v Soulu, Jana na letišti v Soulu, Letiště v Soulu atd. Poučeni z dotazníku jaké všechny restaurace a obchody se na letišti nacházejí jsme se vydali na okružní prohlídku. Soulské letiště je neuvěřitelně obrovské, takže další dvě hodiny bylo o zábavu postráno. Nicméně jsme si alespoň dali něco k snídani, našli internet zdarma a poslali první info do matičky Prahy, že žijeme.

Šest hodin uteklo jak voda a my už zase sedíme v letadle, obdarování polštářkem, dekou, vodou, sluchátky, ponožkami atd. Za chvíli budou rozdávat jídlo a tentokrát se opět shodujeme na stejné volbě – rozhodně NE korejské jídlo. Letušky jezdí s vozíky sem a tam, a už jsou konečně u nás. Sborově si obědnáváme beef. O, je nám líto, ale beef už nemáme, jenom korejské jídlo. Oba zarputile trváme na beefu. Letuška je zmatená a odchází. Asi budeme bez jídla. Po deseti minutách dorazí stevard a přinese dva tácy s jídlem a omlouvá se, že není beef – nedůvěřivě na to koukáme, až konečně porozumíme, že je to pizza. Sem s tím, hlavně, když to neni korejské. Kromě spousty omluv dostáváme i nějaké to pečivo navíc. No perníček z korejského menu by byl lepší, ale co se dá dělat. Večeře do nás tentokrát zahučí jak do kráteru. Pak už jen následuje sladký spánek, ani na filmy tentokrát nekoukáme.

A je tu snídaně – tentokrát bez turbulencí, takže spokojenost.

Šťastné přistání a je to. How are you doing Sydney?

Pár technických údajů:

  • doba letu něco přes devět hodin
  • vzdálenost něco kolem 10 tis. km
  • rychlost neuvěřitelná
  • časový posun 8 hodin (tj. Sydney 7.30, Praha 23.30)

Čtvrtek 19.4.2007 How are you doing Sydney?

Tak jsme to zvládli, jsme u protinožců. Teď jen aby nás vpustili do země.

Vyplňujeme vstupní formulář a doufáme, že u otázek, kde jsme zaškrtli ANO nás nebudou moc drtit. Kokain, zvířata ani rostliny nevezeme a čokoláda, žvýkačky a bombony nejsou jídlo, tak by to mohlo projít.

Jdeme na to. První šikana v podobě nastavených zátarasů, první kontrola – tahle je čtyřnohá a má silně vyvinutý čuch a už stojíme u pultíku a snažíme se zapůsobit na úředníka. Prima, tak to nám prošlo. Jdeme si vyzvednout batohy. Najdeme je bez problémů a jsou nepoškozené. Balící procedura na letišti v Ruzyni se vyplatila.

A už je tady další fronta, do které se štosujeme a další úředník. Ptá se podrobněji na otázky, kde jsme zaškrtli ano. Viditelně je s našimi odpovědmi spokojen, něco čmárá na naše formuláře a pouští nás dál. Postupujeme tedy frontou k dalšímu úředníkovi, který se podívá na naše dva igelitové kokony a posílá nás směrem vlevo. Tam je zase jiná fronta a snad už poslední úředníci. Opět se nás ptají, na otázky ANO a v kterém zavazadle, že prý máme tu čokoládu, a pak už nám ty naše zavazadla pěkně skenují. A vida, je po všem. Prošli jsme. Huráááá!

Sbíráme všechny možné prospekty o Sydney a vyrážíme hledat odletovou halu. Ne, nebojte se nechceme hned letět zpátky do Čech. Jenom máme domluveno, že nás před ní vyzvedne ten chlapík, u kterého máme bydlet. Píšeme mu esemesku a čekáme. Sláva, dostali jsme odpověď: Budu tam za 10 minut, čekejte na začátku prostranství, mám modrou Hondu. Přemisťujeme se tedy na určené místo a čekáme. Mezitím zjišťujeme, že ti chlapíci v reflexních vestách, co si pořád něco zapisují jsou policajti, a to co si píší jsou SPZetky aut. Důvod – před odletovou halou není dovoleno vyzvedávat cestující, pouze je vysazovat. Pro vyzvednutí cestujících je určeno parkoviště, kde se však je za vjezd na něj platí 12AUD. No co, chlapík, co nás má vyzvednout, žije v Sydney už 26 let, tak snad ví co dělá. A už přijíždí. Je to původem Slovák, co mluví československy, takže žádná jazyková bariéra. Policistů si nevšímá a nakládá naše zavazadla. Vyrážíme. Za 15 minut jsme na místě. Cestou se dovídáme podrobnosti o Borisovi, hlavně to, že Austrálii nenávidí. Potěšující informace hned na začátek. To ještě netušíme, že takových informací bude víc. Další šok: Boris se diví, co to bylo za chlapíka v té reflexní vestě na letišti, a co si to zapisoval. Tvrdíme, že chlapík tam stál celou dobu, co jsme tam čekali a pořád si něco psal – asi nějaký dopravní výzkum. Pravdu nepřiznáváme.

Tak, kde že to máme bydlet? Je to rodinný domekUkaž na mapě , docela slušně vypadající. Je to takový ten typ, co má jen přízemí a je pěkně dlouhý. Jdeme tedy dozadu do zahrady a tady je pak vchod do přistaveného suitu. Je to jedna místnost, kde jsou dvě postele, jedna skříň, jeden velký a jeden menší stůl, tři židle, malý gauč, lednička, skříňka s nádobím, varná konvice. Součástí je i vlastní koupelnička. Kuchyň je venku pod přístřeškem a sestává z mikrovlnky, která na na horní ploše dvě plotýnky (to jsme fakt ještě neviděli) a dřezu. Foto bohužel není, nějak jsem to za celý týden nezvládl 🙁

No nic moc, ale máme to jen na měsíc, tak si mezitím najdeme něco jiného. A ejhle další dobrá zpráva. Musíme zůstat minimálně půl roku, alespoň pokud chceme platit 90AUD za osobu za týden. Jinak je to za 150AUD na osobu na týden. Tak to je tedy šok.

Vysvětlení k ubytování

Pro zorganizování našeho pobytu v Austrálii jsme si vybrali agenturu AustraliaExpert.

Jedním z rozhodující důvodů pro naše rozhodnutí bylo, to že nabízejí zajištění ubytování. Mít kde přespat je základ, takže bylo rozhodnuto. Po obdržení víz tedy mělo začít shánění letenky a ubytování – to vše zajišťovala agentura. Letenky nakonec nějak dopadly, sice to nebylo úplně optimální, ale holt jsme letěli ve špatný termín. Na ubytování jsme obdrželi jednu nabídku a po našem dotazu, zda by nebylo něco blíž ke škole a tedy k pláži jsme dostali další nabídku, která byla sice blíž k moři, ale rozhodně ne blíž ke škole a k námi míněné pláži. Odlet se blížil, a tak proč dělat vlny a zbytečně se stresovat. Budeme to řešit na místě. Na závěrečné schůzce s agenturou (v pořadí schůzka třetí) jsme obdrželi kontaktní údaj na osobu, u které jsme měli být ubytováni a mapku místa, kde se ubytování nachází. Osobou byl Jan Učeň. Honzovi jsme tedy poslali email a potvrdili, že fakt přiletíme. Ještě než jsme odletěli jsme dostali email, že změna, že nám našel něco lepšího a poslal kontakt na Borise. Tak jsme tedy napsali Borisovi. Vše v úterý před odletem. Agenturu už jsme nekontaktovali – to byla asi chyba. Podle informací od Honzy jsme měli u Borise být měsíc až dva a platit 90AUD za osobu za týden.

Tak kde jsme to přestali? Jo u toho, že jsme trochu v šoku. Rozhodujeme se napsat Honzovi, že je to jinak než nám psal a ať se nám ozve. Taky koukáme do prospektů, co jsme si nabrali a hledáme nějaký hostel. Honza se neozývá, tak mu voláme – moc se toho nedozvíme, jen to, že máme trvat na tom měsíci, že to tak dohodl. Docela drahá informace – za 200CZK. Rozhodujeme se trvat na svém, ale Boris si také tvrvá na svém. Zůstáváme tedy jeden týden, pořád je to levnější než v hostelu a máme své soukromí.

Hladoví, unavení a otrávení vyrážíme do města. Kupujeme týdenní legitku na MHD za 32AUD a frčíme do centra do kanceláře Sydnejských AustraliaExpert. Vystupujeme na Central station a postupujeme podle mapky. Nestačíme se divit. Všude je to samý Asiat. Kam jsme to jen přijeli. (Později zjišťujeme, že se nám podařilo vystoupit přímo v China townu.) V kanceláři se potkáváme s místním zástupcem Jirkou Mrkvánkem. Dostáváme od něj podrobnou mapu Sydney a slib, že se na to naše ubytování podívá. Sedáme k počítačům a píšeme emaily. Poté si jdeme koupit něco k jídlu a vyrážíme směr Bondi Junction, kde máme školu. Chceme se podívat, kde že to budeme studovat. Tak jsme to viděli, teď jen nakoupit nějaké zásoby a jedeme domů. K večeři máme tousty. Vybalujeme věci a zjišťujeme, že v tom ubytování fakt moc dlouho nevydržíme, všechno je takové špinavé, ušmudlané, prostě fuj.

Snažíme se vydržet nespat, abychom se nějak sladili s místním časem. Nakonec to nevydržíme a v půl desáté zaléháme. Dobrou noc.

Pátek 20.4.2007 Šípková růženka a budulínek

Fakt vydařený den. Celý jsme ho prospali. Rozhodně to nebyl úmysl. Základní rada pro cetovatele do zemí s velkým časovým posunem – nespoléhejte se, že se na časový posun adaptujete nějak automaticky, tj. že když přežijete první den, neusnete během něj a jde spát tak jako místní, tak že taky ráno vstanete tak jako místní. OMYL. Koukejte si nařídit budíka, jinak se vrátíte do dětských let a bude spinkat jak šípková růženka a budulínek 18 hodin jen to fikne.

Takže jsme se do růžova vyspinkali a vrátili se tak na startovní čáru v překonávání časového posunu.

Zbytek dne nebyl už nijak zajímavý. Snídani, oběd a večeři jsme zvládli v jednom a procházka po okolí byla fakt krátká, protože už v pět je tady pěkná tma.

Napiš komentář, díky!

Máme notebook

Tak konečně jsme pořídili vlastní notebook, z čehož vyplývá, že jsme schopni hodit fotky na web (už jich je celkem hodně) a k tomu připojit nějaké vyprávění (těch už Jana zvládla napsat také celkem dost, další budou snad přibývat rychleji – přeci jenom už za námi je pár výletů po Sydney, plážích, na Manly a další plánujeme). Takže se těšte a sledujte.

A když už píšu o notebooku, tak pár informací o noteboocích v Sydney. Ptali jsme se, zda si přivést z Čech, nebo ho tady koupit. Prý je lepší koupit – jsou tu levnější. Osobně si myslím (po návštěvě několika obchodů a prolezení internetu), že pravda je tak někde mezi. Notebooky jsou tady opravdu asi o kousek levnější než v Čechách, ale na druhou stranu jsou dražší – což zní jako nesmysl, ale není. Nejsou tady totiž moc levné notebooky (takové ty s Celeronem uvnitř), ale jsou tady spíš ty namakané a hlavně velké (17″ obrazovka). A ty jsou opravdu levnější než u nás, zas na druhou stranu jsou pořád hezky drahé.

Nakonec jsme tedy skončili na eBay, která zde existuje lokální a díky tomu je (kupodivu) levnější než ta Americká – zboží totiž většinou neposílají mimo Austrálii. Tam jsme vybrali a nakonec koupili Dell Inspiron 640m. Hezká mašinka, sice v bílo/stříbrné barvě, ale nabušená až k prasknutí (alespoň si to myslím).

P.S. nainstalovány jsou Windows Vista – sexy vzhled (Aero se opravdu povedlo), ale člověk aby se s tím učil znovu zacházet. No co, učením ke světlejším zítřkům.

Napiš komentář, díky!

Work correctly with dates, please

I didn’t imagine it that strongly before, but it’s really important to work correctly with date and time data types. I saw a lot of application, which were prepared just for one type of date/time format – the usual one.

Date/time format

For example I saw a lot of applications with this code inside:
day := @Left( dateField; „.“);
Of course, it’s working, if you use dates in format DD.MM.YYYY.

I also remember one IBM business partner, who delivered a really good application and asked other partners to test it. One of the first complain was, that it work just with US date/time format. He was quite surprised, that there exist other format as well, but repaired it.

OK, long talk about nothing, for most of you. And for me as well, just until these days. My blogging software is used to Czech date format and doesn’t work in Australia, where they use DD/MM/YYYY format. The difference is really small, but this is the reason, why I’m not able (or wasn’t able) to publish in these days. Grrr.

Napiš komentář, díky!

Přílet do Sydney


Úterý 17.4.2007 Poslední den v matičce Praze

Tak už je to tady. Den D nadešel. Ješte zkontrolovat, že máme všechno, co potřebujeme (což je do značné míry limitováno velikostí našich zavazadel) a můžeme vyrazit. Vybaveni instrukcemi, že máme být na letišti ne o 2 hodiny, ale spíš o 2,5 hodiny dříve (letíme totiž s KoreanAir), dorážíme na Ruzyň v 18.00. No jo, nějak nám to nevyšlo, 2,5 hodiny je jen 1,5 hodiny předstihu. Nicméně to hned v zápětí za nás Korejci napravili a ohlásili hodinové zpoždění letu. No hurá – máme těch 2,5 hodiny. Korejci totiž prý létají jedněmi z největších letadel, která na Ruzyni přistávají, takže to trvá než to celé naplní, pozn. Martin

Dle rady zkušených cestovatelů si necháváme zabalit naše batohy do igelitové fólie – cena za jeden 70 CZK – stojí to už jen za ten zážitek pozorovat jak z dvou normálních zavazadel vznikají dva velké igelitové kokony (nebo kondomy – jak kdo chce). Odbavení proběhlo v pohodě, hmotnost zavazadel pod limitem.

Balení kondomů

Pak ješte zvážit jen tak pro srandu příruční baťůžky – a ejhle – na to že jsou tak 5x menší než ty velké, tak váží cca polovinu. No nic, snad to Korejci uvezou.

Teď trochu relaxu – jdeme na obhlídku fotek od Kolbaby – jednou už jsme je sice viděli, ale stojí za to vidět je znovu. Jen kdyby nebyly rozmístěný po všech koutech celého letište. Z relaxu se tak stal běh na dlouhou trať. Cestou jsme ješte museli zakoupit igelitový pytlík, abychom do něj dali zubní pastu a nějaké další serepetičky. Holt nařízení letiště je potřeba respektovat.

Tak teď už konečně můžeme přes pasovou kontrolu. Vše OK.

A honem do duty free shoppu – Jana pro kosmetiku, Martin alespoň pro čokoládu (cena útěchy od Jany).

Na řadě je poslední šacování: hodinky dolů, pásek dolů, ty kalhoty si holt musíte držet, ukažte ten baťůžek, něco vám tam zeleně svítí, a co je v tomhle batohu, no dobře, můžete jít. HURÁ. Už jen pár minut a jsme v letadle.

Naše letadlo do Soulu

Na sedadle na nás čeká lahvička s vodou, polštárek a deka. Korejské letušky vypadají dokonale, jak kdyby je vyráběli sériově (a taky že jo, o tom ale až v nějaké jiné kapitole). Po standardních záležitostech typu: vítejte na palubě, záchranná vesta je pod sedadlem, nouzové východy jsou tam a tam, následuje mašinerije secvičených úkonů. Letušky běhají uličkami sem a tam a rozdávají pití, sluchátka, taštičky s ponožkami, zubním kartáčkem, pidi pastou, a takovou tou maskou na oči, aby se člověku dobře spinkalo.

Jana je celá natěšená, na to kdy se bude papat. Holt návrat do dětských let, kdy lítala mezi Prahou a Sofií a papání bylo její jediná starost a radost. Holt ale ještě netušila, že za těch 25 let se dost změnilo. Vyzbrojeni radou z agentury, že máme určite zkusit Korejské jídlo – neodradily nás ani vytřeštěné oči letušky, když jsme na otázku zda chceme beef (maso) nebo korejské jídlo, řekli “korejské“.

Takže co, že jsme to měli dobrého? Polévku s mořskými řasami, rýži absolutně bez chutě, nějaké mleté maso a zeleninu typu lilek (identifikace byla dost složitá) – vše taktéž bez chutě. Pozorujíce Korejce jsme zjistili, že je třeba vše smíchat dohromady a přidat do toho pastu z tubičky, kterou jsme nafasovali. Tak jsme také učinili – jen s tím rozdílem, že jsme použili tak desetinu obsahu tuby, nikoliv celou. Co říci závěrem? Snad jen tolik, že ještě, že jako zákusek byl normální perník s ovocem, a že měl Martin tu cenu útěchy (viz duty free shopping). A taky štěstí, že mě Jirka naučil jíst pálivá jídla – Jirko, díky!

Další část letu zahrnovala dva filmy a spánek. No slavá už je tu snídaně – jsme nějaký vyhládlí. Vypadá to moc dobře – omeleta z vajíček, marmeláda, jogurt, hmm. Ale co to je? Všichni na místa a připoutat se, letíme silnými turbulencemi. Honem kde je blinkací pytlík. No tak snídat už se asi nebude. Tak už zase jen ta cena útěchy. Tak a jsme na zemi, konkrétně v Soulu.

Janina byla hezky přejetá

Pár technických údaju

  • doba letu něco přes devět hodin
  • vzdálenost něco kolem 10 tis. km
  • rychlost neuvěřitelná
  • časový posun 6 hodin (tj. Soul 13.30, Praha a naše těla 7.30)
Napiš komentář, díky!