Zip Slip: haavoittuvuus tiedostonpakkaukseen käytetyissä ohjelmointikirjastoissa | Traficom

Zip Slip: haavoittuvuus tiedostonpakkaukseen käytetyissä ohjelmointikirjastoissa

31. joulukuuta 2018 klo 10.24, päivitetty 31. joulukuuta 2018 klo 10.26

Useissa tiedostojen pakkaamiseen ja arkistointiin tarkoitetuissa ohjelmointikirjastoissa ja esimerkkikoodeissa on haavoittuvuus, joka sallii tiedostojen kirjoittamisen yllättäviin hakemistoihin hyökkääjän laatimaa tiedostopakettia purettaessa. Haavoittuvuutta ei ole havaittu itsenäisissä tiedostonpakkausohjelmistoista kuten WinZip tai gzip. Pakattujen tiedostojen käsittelyyn pystyvien sovellusten käyttäjiä kehotetaan päivittämään sovellukset. Sovellusten kehittäjiä kehotetaan tarkastamaan ohjelmakoodinsa haavoittuvuuden varalta.

Zip Slip tarkoittaa haavoittuvuutta, jossa tiedostopakettia käsittelevä ohjelmistokoodi hyväksyy pakettiin kirjoitetut suhteelliset hakemistopolut tarkastamatta niiden turvallisuutta. Haavoittuvuus voi ilmetä useissa tiedostomuodoissa.

Hyökkääjä voi laatia tiedostopaketin, jossa jonkin tiedoston polku on esimerkiksi "../../../../../etc/passwd". Hyökkääjä voi saada haavoittuvan ohjelmakoodin purkamaan tiedostopaketin esimerkiksi jos hyökkäyksen kohteena olevalla verkkosivustolla on toiminto tiedostopakettien vastaanottamiseen.

Haavoittuva ohjelmistokoodi yrittää purkaa paketista tiedostot hyökkääjän kertomiin sijainteihin, vaikka ne sijaitsisivat nykyisen työhakemiston tai sen alla olevan hakemistopuun ulkopuolella. Jos tiedostopakettia purkavalla prosessilla on kirjoitusoikeus hyökkääjän osoittamaan tiedostoon paikallisessa tiedostojärjestelmässä, haavoittuva ohjelmisto kirjoittaa hyökkääjän antaman sisällön siihen mitään kyselemättä. Näin hyökkääjä voi saada omia turvattomia konfiguraatiotietoja tai ohjelmakoodia hyökkäyksen kohteena olevaan tietokoneeseen. Näin hyökkääjä voi pahimmillaan ottaa tietokoneen täyteen hallintaansa.

Kyse on siis klassisen hakemistopuun läpikulkuun (directory traversal) liittyvän haavoittuvuuden ilmentymästä. Zip Slip -haavoittuvuus esiintyy useissa laajasti käytetyissä ohjelmointikirjastoissa ja julkisesti jaetuissa ohjelmakoodiesimerkeissä ja vaikuttaa sitä kautta tuhansiin ohjelmistoihin.

Haavoittuvuuden löysi ja sen julkaisua koordinoi ohjelmistojen tietoturvaan keskittyvä yritys Snyk. Haavoittuvuus tuli julki 5.6.2018

Haavoittuvuuden kohde

Haavoittuvuuden hyväksikäyttö voi ilmetä useissa eri tiedostopakettien tiedostomuodoissa, kuten zip, tar, jar, war, cpio, apk, rar ja 7z. Erittäin monet ohjelmistot käsittelevät tiedostopaketteja ja niiden kaikkien luetteleminen tässä ei ole tarkoituksenmukaista.

Snyk pitää yllä listaa haavoittuviksi tunnetuista ohjelmointikirjastoista ja niitä käyttävistä ohjelmistoista sekä niihin saatavilla olevista korjaavista päivityksistä. Haavoittuvuus on levinnyt ilmeisen laajalle ja tilannekuva sen levinneisyydestä täydentyy koko ajan. Tuore tilanne kannattaa tarkastaa Snykin listasta.

Mistä on kysymys?

Ohjelmistojen käyttäjät ja verkkopalveluiden ylläpitäjät:

 

  • Tarkasta Snykin ylläpitämästä listasta, ovatko käyttämäsi ohjelmistot haavoittuviksi tunnettuja tai hyödyntävätkö käyttämäsi ohjelmistot haavoittuvia kirjastoja. Jos ohjelmisto on tunnettu haavoittuvaksi:
    • Jos päivitys on saatavilla, päivitä ohjelmisto.
    • Jos päivitystä ei ole saatavilla, ongelmaa voi rajoittaa estämällä epäluotettavista lähteistä tulevien tiedostopakettien käsittely. Tutustu ohjelmiston käyttöohjeisiin.

 

Ohjelmistojen kehittäjät:

 

  • Tarkasta, käyttääkö ohjelmistosi Snykin ylläpitämästä listassa mainittuja haavoittuvia kirjastoja. Jos käyttää:
    • Jos kirjastoon on saatavilla päivitys, käännä ohjelmistosi käyttämään korjattua kirjastoa ja julkaise ohjelmistostasi päivitys.
    • Jos kirjastoon ei ole saatavilla päivitystä, tarkasta, voisitko kääntää ohjelmistosi käyttämään muuta korjattua kirjastoa.
  • Tarkasta, onko ohjelmistossasi haavoittuvia ohjelmointirakenteita. Snykin julkaisemassa haavoittuvuustiedotteessa on esimerkkejä haavoittuvista rakenteista useilla ohjelmointikielillä. Korjaa ohjelmistosi ja julkaise siitä päivitys.

Mitä voin tehdä?

Työasemat ja loppukäyttäjäsovellukset

Työasemien ja tavallisten käyttäjien sovellusten haavoittuvuudet koskevat usein monia käyttäjiä. Kohteena voi olla esimerkiksi Windows-käyttöjärjestelmä tai tekstinkäsittelyohjelma. Ero palvelinsovellusten ja loppukäyttäjäsovellusten välillä on joskus häilyvä, esimerkiksi samaa käyttöjärjestelmää voidaan käyttää sekä palvelimessa että työasemassa.

Sulautetut järjestelmät

Sulautetun järjestelmän muodostavat laite ja sen sisältämä ohjelmisto yhdessä. Kuluttajien käyttämistä laitteista varsin monia voidaan pitää sulautettuina järjestelminä. Esimerkki tällaisesta on digitaalisten tv-lähetysten katselemiseen tarvittava digiboksi.

Palvelimet ja palvelinsovellukset

Palvelinten ja palvelinohjelmistojen haavoittuvuudet koskevat esimerkiksi sähköisten asiointipalvelujen tarjoajia. Tyypillisiä kohteita ovat palvelinten käyttöjärjestelmät ja www- tai sähköpostipalvelinohjelmistot kuten esimerkiksi SunOS, Linux, Apache, IIS tai Sendmail.

Etäkäyttö

Etäkäyttöisesti tehtävän hyökkäyksen voi tehdä tietoverkkoyhteyden tai vastaavan kautta ilman että pääsee itse kohteena olevan järjestelmän luokse.

Ilman käyttäjän toimia

Ilman käyttäjän toimia tapahtuva hyökkäys kohdistuu suoraan haavoittuvuuteen ilman että järjestelmän käyttäjältä vaaditaan mitään toimia hyökkäyksen onnistumiseksi. Käyttäjän ei esimerkiksi tarvitse selailla www-sivuja tai käynnistää ohjelmaa tietokoneessa, vaan hyökkäys onnistuu ilman käyttäjän apua.

Paikallisesti

Paikallisesti tapahtuvan hyökkäyksen voi tehdä vain pääsemällä hyökkäyksen kohteena olevan laitteen luokse ja käyttämällä sitä paikallisesti. Paikallista hyökkäystä ei voi tehdä verkkoyhteyden kautta.

Ilman kirjautumista

Hyökkäys ei vaadi kohteena olevaan järjestelmään kirjautumista. Vastakohtana ovat sellaiset hyökkäykset, jotka vaativat käyttäjätunnuksen ja salasanan käyttöä ja esimerkiksi komentojen suorittamista järjestelmään kirjautuneena.

Palvelunestohyökkäys

Palvelunestohyökkäyksen tarkoituksena on estää kohdejärjestelmää toimimasta siinä tehtävässä mihin se on tarkoitettu. Hyökkäyksen tarkoituksena voi olla esimerkiksi www- tai sähköpostipalvelimen kuormittaminen runsaalla verkkoliikenteellä.

Komentojen mielivaltainen suorittaminen

Komentojen mielivaltaisen suorittamisen mahdollistavaa haavoittuvuutta on pidettävä vakavana, sillä se tarkoittaa sitä, että hyväksikäyttäjä voi käyttää kohteena olevaa järjestelmää aivan kuin sen tavallinen käyttäjäkin. Se voi johtaa myös siihen, että järjestelmään murtautunut hyökkääjä voi ladata verkon kautta järjestelmään omia ohjelmiaan suoritettavaksi.

Käyttövaltuuksien laajentaminen

Käyttövaltuuksien laajentaminen mahdollistaa järjestelmän käyttämisen esimerkiksi pääkäyttäjänä, tavallista käyttäjää laajemmin valtuuksin.

Tietojen muokkaaminen

Järjestelmään talletettujen tietojen muokkaaminen ei välttämättä edellytä komentojen suorittamista, käyttövaltuuksien laajentamista tai järjestelmään kirjautumista. Esimerkiksi käyttämällä hyväksi www-palvelinohjelmiston haavoittuvuutta voi hyökkääjä luvatta muuttaa palvelimella näkyvien verkkosivujen sisältöä.

Korjaava ohjelmistopäivitys

Ohjelmisto- tai laitevalmistaja julkaisee tavallisesti pian uuden version tai osittaisen päivityksen ohjelmistoon tai käyttöjärjestelmään sen jälkeen kun haavoittuvuus on tullut julki. Päivitys voi olla saatavilla samalla kun haavoittuvuuskin julkaistaan, mutta usein sitä joudutaan odottelemaan jonkin aikaa.

Ongelman rajoittaminen

Vaikka varsinaista korjausta haavoittuvuuteen ei aina ole saatavilla, sen vaikutuksia voidaan useimmiten rajoittaa esimerkiksi pidättäytymällä tilapäisesti jonkin ominaisuuden käytöstä tai rajoittamalla verkkoliikennettä kohdejärjestelmään sopivasti.

Ei päivitystä

Haavoittuvuuden tultua julki ei korjausta siihen ole välttämättä heti saatavilla. Kohdejärjestelmät ovat alttiita haavoittuvuuden hyväksikäytölle jos niiden suojaamiseksi ei ryhdytä toimenpiteisiin.


31. joulukuuta 2018 klo 10.26 Alkuperäinen haavoittuvuustiedote julkaistu 7.6.2018