Pääsivu | Tiedotteet

Argument injection -haavoittuvuus Java Web Startissa

18.03.2005

Yleistä

Java Web Start on tekniikka, jolla saadaan verkossa olevien Java-sovellusten käynnistäminen helpoksi. Sen avulla sovellus voidaan käynnistää selaimen kautta yhdellä hiiren klikkauksella.

Java Web Start asentuu Java Runtime Environmentin (JRE) kanssa. Asennuksen aikana tehdään tiedostotyyppien kytkentä, jotta Internet-selaimet avaisivat Java Web Startin .JNLP-tiedostot automaattisesti yhdellä hiiren klikkauksella (toiminta voi vaihdella selaimesta riippuen).

Web Startin tavassa käsitellä JNLP-tiedostoissa määriteltäviä Javan system propertyjä on haavoittuvuus. Hyökkääjä voi niiden avulla syöttää komentoriviargumentteja Java-virtuaalikoneelle. Niillä voidaan poistaa Javan "hiekkalaatikko" eli järjestelmää haitallisilta sovelluksilta suojaava rajoitteisto, ja tunkeutua järjestelmään. Hyökkäys voidaan suorittaa kohdekäyttäjän käydessä hyökkääjän laatimalla WWW-sivulla.

Yksityiskohdat

JNLP-tiedoston <property>-tagilla voidaan määritellä Javan system propertyjä. Ne ovat avain-arvo-pareja, joihin on yleensä tallennettu nykyisen työympäristön attribuutteja, kuten "java.home", joka sisältää Java-asennuksen polun ja "java.version", joka sisältää Javan version. Eräiden system propertyjen luonteen vuoksi niiden asettaminen JNLP-tiedostoissa on rajoitettu.

Jotkut system propertyistä oletetaan turvallisiksi, ja jos ne on määritelty JNLP-tiedostossa, ne välitetään Java-virtuaalikoneelle (javaw.exe) -Dproperty=arvo -komentoriviparametrilla. Hyökkääjä voi kuitenkin käyttää tätä ominaisuutta syöttääkseen ylimääräisiä komentoriviargumentteja virtuaalikoneelle.

JNLP-tiedosto voi sisältää esim. seuraavan property-tagin:

  <property name="sun.java2d.noddraw" value="true HELLO" />

System property nimeltä "sun.java2d.noddraw" oletetaan turvalliseksi, joten se hyväksytään ja Java-sovelluksen käynnistyskäsky näyttäisi tässä tapauksessa seuraavalta:

 javaw.exe -Dsun.java2d.noddraw=true HELLO (muita argumentteja) your.application

Tämä tuottaisi kuitenkin Web Startin virheilmoituksen: javaw.exe tulkitsee "HELLO"-sanan sovelluksen pääluokan nimeksi oikean "your.application":in sijaan. Ongelma on, ettei Web Start käytä lainausmerkkejä property-argumentin ympärillä.

Hyödyntääkseen vikaa hyökkääjä syöttäisi virtuaalikoneelle komentoriviargumentteja, jotka vaikuttavat Javan turvapolitiikkaan. Normaalisti allekirjoittamaton, ei-luotettu Java-sovellus toimii "hiekkalaatikon" eli rajoitteiston puitteissa, eikä voi esim. nähdä paikallisia tiedostoja. Haavoittuvuutta hyödyntämällä hiekkalaatikkomalli voidaan korvata halutulla tietoturvapolitiikalla, joka ladataan hyökkääjän WWW-sivulla olevasta policy-tiedostosta. Uusi tietoturvapolitiikka voi sallia sovellukselle rajoittamattomat oikeudet. Sovellus voi sen jälkeen esim. lukea ja kirjoittaa haluttuja tiedostoja kohdejärjestelmässä, tai ladata ja käynnistää viruksia, keyloggereita tai muita haittaohjelmia. Hyökkääjä voi asettaa JNLP-tiedoston WWW-palvelimelle niin, että se käynnistetään ilman kohdekäyttäjän muuta toimintaa, kun tämä käy palvelimella olevalla WWW-sivulla. Tähän voi käyttää esim. IFRAME-tagia.

Koska sovellus on tehty Javalla, sama "exploitti" voidaan tehdä toimivaksi millä tahansa alustalla, jolle Java Web Start on saatavilla. Ongelman demonstroimiseksi tehtiin koe-exploitti, joka tunnistaa käyttöjärjestelmän ja käynnistää siitä riippuvan konekielisen ohjelman, kun tarkoitusta varten laaditulla WWW-sivulla käydään. Sama "exploitti" toimii Internet Explorerilla Windowsissa ja Mozilla Firefoxilla sekä Operalla Linuxissa.

Jos käytössä on Internet Explorer, JNLP-tiedosto avataan automaattisesti ilman muita kohdekäyttäjän toimia. Muut selaimet voivat, tiedostotyyppien asetuksista riippuen, näyttää kyselyikkunan, joka kysyy avataanko JNLP-tiedosto vai tallennetaanko se levylle. Esim. jotkut Operan versiot edellyttävät muutoksia asetuksiin, jotta JNLP-tiedostot voidaan avata.

Selaimen kautta tapahtuvan hyökkäyksen lisäksi hyökkääjä voisi korvata olemassa olevan JNLP-tiedoston "hyökkäävällä" versiolla. Web Start -sovellukset voidaan käynnistää työpöydän pikakuvakkeilla, Web Start -ohjelman valikosta, tai komentoriviltä. Kaikki käynnistystavat ovat alttiita tässä kuvatulle hyökkäykselle.

Alttiit versiot

Java Web Start J2SE 1.4.2-versioissa ennen 1.4.2_07:ää ovat haavoittuvia. J2SE 5.0 ja myöhemmät, ja 1.4.2:ta aiemmat versiot EIVÄT ole alttiita tälle haavoittuvuudelle.

Korjaus

Sun Microsystemsille ilmoitettiin ongelmasta 25.09.2004. Ongelma on korjattu J2SE:n versiossa 1.4.2_07. Sun Microsystemsin tiedote asiasta löytyy osoitteesta

http://sunsolve.sun.com/search/document.do?assetkey=1-26-57740-1

Tiedote sisältää myös väliaikaisratkaisuja ongelmaan.

Tekijä

Ongelman havaitsi, tutki ja tämän tiedotteen laati Jouko Pynnönen (jouko@iki.fi).