In ‘What The Hack’ deelt Wesley, ethisch hacker bij The S-Unit, een praktijkvoorbeeld uit een anonieme penetratietest. Een kwetsbaarheid in de PDF-generator opende de deur naar gevoelige servergegevens.
Hoe kon deze kwetsbaarheid worden misbruikt en wat kun je als developer doen om dit aanvalspad te sluiten?
Met een paar bekende securityprincipes in het achterhoofd begon ik aan een penetratietest op een applicatie die zeer gevoelige en privé persoonsgegevens verwerkte. Mijn eerste stap was: de applicatie verkennen, de intentie van de developers begrijpen en vaststellen waar ontwerpkeuzes mogelijk ruimte lieten voor misbruik.
De applicatie stelde gebruikers in staat om questionnaires in te vullen, meeting notes te delen tussen twee vertrouwde partijen en PDF-rapporten te genereren. Toen ik die laatste functionaliteit zag, ging ik direct rechtop zitten. PDF-generatie vergroot vaak het aanvalsoppervlak en nodigde mij uit tot verder onderzoek. Ik nam alle inputvelden onder handen en testte of ik HTML zichtbaar kon injecteren in de gegenereerde PDF.
Jackpot! Bij het bekijken van de antwoorden uit de questionnaire viel mij direct op: de input werd niet gesanitized. Mijn testpayload, niets meer dan een eenvoudig HTML element, verscheen zonder problemen vetgedrukt in de PDF. Veel van mijn testing doe ik met PortSwigger’s Burp Suite, een geweldige tool om de inner workings van een web applicatie te identificeren. Dit was al een duidelijke finding. Toch ging ik verder om de daadwerkelijke impact zichtbaar te maken.
We komen ergens!
Public libraries versnellen development, maar introduceren soms onopgemerkte aanvalspaden. De PDF-generator die de klant gebruikte, bleek uitgebreid gedocumenteerd. In de bijbehorende wiki werden de beschikbare features helder beschreven. Die documentatie gaf snel inzicht in de mogelijkheden van de library, terwijl de applicatie zelf nog grotendeels onbekend was.
In de documentatie van de PDF-generator ontdekte ik een feature waarmee ik attachments aan een gegenereerde PDF kon toevoegen. Die functionaliteit liet mij lokale bestanden refereren via een file:// handle. Om meer inzicht te verkrijgen in het achterliggende systeem, probeerde ik een breed bekend Linux bestand met algemene leesrechten uit te lezen met de payload <link rel=”attachment” href=”file:///etc/passwd”>. En ja hoor, na het genereren was het bestand toegevoegd. Hierin vond ik een kopie van /etc/passwd van de server terug als attachment.
Ik bereikte hier een duidelijk kantelpunt. Met leesrechten op lokale bestanden kon ik direct de configuratie van de server onderzoeken waarop de PDF-generator draaide. Het bestand /etc/passwd gaf daarbij al een eerste indicatie van de gebruikers en de rechten waaronder het proces actief was. De volgende onderzoeksvragen popte op: welke privileges had dit proces precies, en welke aanvullende informatie kwam beschikbaar nu ik bestanden kon uitlezen?
Ontwikkelteams slaan gevoelige informatie zoals secrets, keys en wachtwoorden vaak op in environment variables. Het proces om de PDF te generen blijkt als ROOT te draaien waardoor ik leesrechten had op /etc/environ waarin deze variabelen staan opgeslagen. Doordat het PDF-generatorproces over te ruime rechten beschikte, kreeg ik zo inzicht in credentials voor onder andere Keycloak, databases, Amazon S3-buckets en meerdere interne systemen.
Hoe kun je deze aanval voorkomen? Met een paar gerichte keuzes was dit aanvalspad al vroeg afgesloten.
Wil je inzicht in de beveiliging van jouw IT? Lees meer over onze Pentesting en Red teaming diensten.