PDF-export injektio

Mitä ovat PDF-export-injektiot?

Helppo
20 min

Mitä ovat html2pdf-generaattorit?

Jokainen meistä on varmaan joskus nähnyt, kun verkkopalvelu tarjoaa mahdollisuuden tulostaa sivun tai tiedon, jonka jälkeen selain lataa PDF-tiedoston koneelle. Tämän PDF-tiedoston muodostaminen tapahtuu yleensä käyttämällä jotain työkalua tai ohjelmointikirjastoa, jonka avulla kyseinen asiakirja rakennetaan.

Jotkin työkalut ja ohjelmointikirjastot mahdollistavat PDF-tiedoston rakentamisen käyttämällä HTML-koodia. Tämmöistä PDF-generaattoria voidaan kutsua html2pdf-generaattoriksi, sillä se ottaa vastaan HTML-koodia ja generoi siitä PDF-tiedoston. Yksi tällainen työkalu on wkhtmltopdf.

Työkalu ottaa vastaan HTML-koodia, suorittaa koodin käyttämällä selainmoottoria (eli käytännössä avaa sivun näkymättömästi jollain, vaikka Google Chrome -selaimella) ja generoi sitten suoritetusta HTML-koodista PDF-tiedoston. Tässä piilee kuitenkin vaara.


Mitä ovat PDF-export injektiot?

Mitä tapahtuu, jos hyökkääjä kykenee manipuloimaan tai kontrolloimaan PDF-generaattorin käyttämälle selaimelle syötettyä HTML-koodia?

Pahimmassa tapauksessa hyökkääjä kykenee lukemaan palvelimen omia tiedostoja tai suorittamaan mielivaltaisia Server-Side Request Forgery -hyökkäyksiä. Tämä johtuu siitä, että palvelin suorittaa annetun HTML-koodin palvelimen puolella, jonka johdosta koodi pääsee käsiksi esimerkiksi palvelimen omiin tiedostoihin.

PDF-export injektiosta puhutaan, kun hyökkääjä kykenee manipuloimaan PDF-generaattorin käyttämää HTML-koodia ja tämän johdosta suorittamaan omaa HTML-koodia generaattorin käyttämässä selainmoottorissa.

Tässä kohtaa käytämme hyväksi harjoituskohteessa olevaa haavoittuvuutta, joten voit käynnistää alla olevan tehtävän ja toistaa vaiheet omassa tahdissa.

wkhtmltopdf - tiedoston lukeminen

Tässä tehtävässä käytämme hyväksi epäturvallisesti rakennettua PDF-generaattoria ja vuodatamme ulos tämän avulla järjestelmän sisäisiä tiedostoja. Lippu löytyy /flag.txt tiedostosta.

Tehtävät

Flag

Löydä lippu (flag) labraympäristöstä ja syötä se alle.

PDF-generaattorin selvitys

Aloitamme haavoittuvuuden etsinnän ensin selvittämällä, että miten testattava kohde toimii. Huomaamme nopeasti, että järjestelmä ottaa vastaa HTML -tiedostoja ja näistä voi sitten "exportata" PDF-tiedostoja.

Yleensä, kun järjestelmää lähestytään ns. "black-box" menetelmällä, eli järjestelmästä ei ole lähdekoodeja, niin silloin voi olla vaikeaa ymmärtää, mitä jokin kyseinen funktionaalisuus oikein tekee. Tämmöisessä tapauksessa, missä järjestelmä tuottaa meille PDF-tiedostoja, on kuitenkin mahdollista joskus selvittää, mitä tämä käytti kyseisen tiedoston konvertointiin, sillä joskus nämä PDF-generaattorit (ja myös muut työkalut) tallentaa itsestään jäljen tiedoston metatietoihin.

Metatietojen lukeminen onnistuu esimerkiksi työkalulla nimeltä exiftool.

Syötetään verkkosovelluksen tuottama PDF-tiedosto exiftool nimiselle työkalulle. Näemme Creator attribuutissa PDF-generaattorin nimen ja version. Vinkki: wkhtmltopdf versio 0.12.5 jälkeen tulevissa versiossa on estetty lokaali tiedostojen luku, mutta SSRF onnistuu kyllä.

Tällä tavalla voi usein selvittää erilaisten järjestelmien tuottamista tiedostoista sitä logiikkaa, miten kyseinen tiedosto on luotu. Joskus sovellukset käyttävät myös vanhentuneita komponentteja tiedostojen konvertointiin tai manipulointiin.

On tärkeää huomata, etteivät kaikki PDF-generaattorit rakenna PDF-tiedostoja HTML-koodista ja että generaattorit sekä niiden toimintalogiikka vaihtelee usein paljonkin. Tästä syystä on tärkeää yrittää selvittää se komponentti mitä käytetään, jonka jälkeen voi selvittää kyseisen komponentin dokumentaatiosta, että miten se toimii.

Tiedoston vuotaminen file skeemalla ja iframe-elementillä

Kokeilemme seuraavaksi käyttää iframe elementtiä HTML-tiedostossa ja varmistamme, että verkkosivu sallii tämän käytön PDF-generoinnissa.

<iframe width=400 height=400 src="https://www.example.com/"></iframe>

Generoimme PDF-tiedoston ja katsomme tämän sisälle.

Seuraavaksi käytämme file:/// skeemaa. Toisin kuin http ja https, file skeemalla viitataan tietokoneen omaan tiedostojärjestelmään, eikä erilliseen palveluun. Tämä tapahtuu seuraavalla tavalla.

<iframe width=400 height=400 src="file:///flag.txt"></iframe> 

Ja kun generoimme kyseisestä HTML-tiedostosta PDF-tiedoston, näemme tiedoston sisällön. Olemme onnistuneesti vuotaneet palvelimen oman tiedoston haavoittuvan PDF-generaattorin kautta.

Hienoa! - Olet suorittanut ensimmäisen PDF-export injektio labran. Kokeile vielä, mitä muita HTML - elementtejä pystyt generoinnissa käyttämään. Keksitkö muita hyökkäystapoja?

hakatemia pro

Valmis ryhtymään eettiseksi hakkeriksi?
Aloita jo tänään.

Hakatemian jäsenenä saat rajoittamattoman pääsyn Hakatemian moduuleihin, harjoituksiin ja työkaluihin, sekä pääset discord-kanavalle jossa voit pyytää apua sekä ohjaajilta että muilta Hakatemian jäseniltä.