0 Minuten lezen
0 Min
19 sep 2022

Welkom terug bij onze blogserie over de meest gerapporteerde kwetsbaarheden in onze Bug Bounty- en CVD-programma's! Vandaag duiken we dieper in het onderwerp Local file inclusion en bespreken we de impact, ernst en manieren van preventie en mitigatie.

Maar wat is Local file inclusion eigenlijk?

Local file inclusion (LFI) is een kwetsbaarheid waarbij een aanvaller de invoer op zo'n manier kan manipuleren dat bestanden die op de webserver bestaan, voor verwerking worden opgenomen. Dit gebeurt vaak via het exploiteren van onveilige manieren om bestanden in de applicatie op te nemen.

Bijvoorbeeld, dit kan gebeuren wanneer een pagina de bestandsnaam of het pad ontvangt dat moet worden opgenomen op een manier die door de aanvaller kan worden gemanipuleerd. Een voorbeeld hiervan is als een URL-parameter. Een local file inclusion-kwetsbaarheid bestaat wanneer deze invoer niet gefilterd of gecontroleerd wordt, en de aanvaller verschillende bestanden kan ophalen dan bedoeld door de invoer te wijzigen.

Een voorbeeld hiervan zou zijn: https://greatbank.com/get.php?module=contact.php, wat de contactpagina opneemt. Als de invoer voor de moduleparameter niet op de server wordt gevalideerd, kan een aanvaller dit gebruiken om andere bestanden op de server op te nemen. Hoewel deze kwetsbaarheid in elk type applicatie kan bestaan, wordt deze het meest gezien in applicaties die gebruikmaken van scripting tijdens runtime, zoals die gebouwd in PHP, JSP en ASP.

Impact

Informatie openbaarmaking

De impact van het succesvol exploiteren van een Local File Inclusion-kwetsbaarheid kan een aanvaller toegang geven tot bestanden waartoe ze normaal gesproken geen toegang zouden hebben. Wanneer de bestandsinclusie kan worden gecombineerd met padverkenning kan een aanvaller door mappen op de server navigeren, en op deze manier ook bestanden buiten de webroot openen. Bijvoorbeeld, het ‘passwd’-bestand dat gevoelige informatie bevat zoals de lijst van systeemaccounts en in zeldzame gevallen zelfs wachtwoordhashes. Andere bestanden waar een aanvaller naar zou zoeken zijn bijvoorbeeld configuratiebestanden of broncode. Deze bestanden kunnen gevoelige informatie bevatten, zoals inloggegevens of sleutels die privé moeten blijven. Padverkenning kan worden gedaan door ../-sequenties in de kwetsbare parameter te injecteren om omhoog te bewegen in de directorystructuur zoals getoond in het onderstaande voorbeeld.

Remote code execution

Een Local File Inclusion-kwetsbaarheid kan leiden tot Remote Code Execution wanneer deze kan worden gecombineerd met andere kwetsbaarheden. Bijvoorbeeld, een uploadfunctionaliteit die de bestanden buiten de webroot opslaat omdat de applicatie deze normaal gesproken niet aan de gebruiker hoeft terug te geven, kan een aanvaller in staat stellen om kwaadaardige code te uploaden, maar zonder een manier om dit bestand uit te voeren, is de onveilige upload voor de aanvaller niets waard. Dit in combinatie met een LFI-kwetsbaarheid zou de aanvaller in staat stellen dit bestand op te halen en hun payload uit te voeren.

Om dit te laten werken, moet er een uploadformulier op de website zijn dat uitvoerbare code accepteert (of gemanipuleerd kan worden om deze te accepteren). Als de aanvaller het pad kent waar de geüploade bestanden zijn opgeslagen, kan hij de LFI-kwetsbaarheid gebruiken om hun script op te nemen en uit te voeren. Deze code-executie kan dan worden gebruikt om verbinding te maken met een listener die door de aanvaller is ingesteld en ze krijgen wat een “reverse shell” wordt genoemd, zoals getoond in het onderstaande voorbeeld.

Ernst

De ernst van een Local File Inclusion-kwetsbaarheid hangt af van de impact. Een kwetsbaarheid die padverkenning kan gebruiken om bij etc/passwd te komen of geheimen in configuratiebestanden of de broncode kan lezen, zal een hoge of kritieke ernst hebben. Omdat deze bestanden gevoelige informatie bevatten die een aanvaller verder toegang tot het systeem kan bieden. Een ander voorbeeld van wanneer deze kwetsbaarheid een hogere ernst heeft, zijn applicaties die gevoelige informatie over hun gebruikers in bestanden opslaan, bijvoorbeeld geüploade documenten met persoonsgegevens. Als de aanvaller toegang kan krijgen tot deze uploads van andere gebruikers, zijn de gevolgen ernstig.

LFI-kwetsbaarheden waarbij alleen beperkte informatie op een server wordt gevonden, hebben vaak een lage ernst.

Een LFI-kwetsbaarheid die kan worden geëscaleerd naar remote code execution zal een kritieke ernst hebben omdat dit de gehele server compromitteert. 

Preventie

Een manier om LFI-kwetsbaarheden te voorkomen is door alle bestanden die mogen worden opgenomen een unieke ID toe te wijzen, en deze vervolgens te verwijzen met deze ID. Deze ID wordt in de URL weergegeven in plaats van de bestandsnaam, en verzoeken die geen correcte ID gebruiken zullen eenvoudigweg geen bestand opnemen. 

Mitigatie 

Zorg ervoor dat er geen pagina's zijn die bestands paden tonen, zoals debugpagina's. De openbaar gemaakte bestands paden kunnen worden gebruikt met een LFI-aanval om informatie uit die directories te verkrijgen.

Local file inclusion is over het algemeen een bekende kwetsbaarheid in PHP-webframeworks. Oudere versies hebben veel bekende LFI-kwetsbaarheden en in sommige gevallen omzeilingen van eerdere patches die deze kwetsbaarheid aanpakken.

Eén voorbeeld van een bekende kwetsbaarheid die is gepatcht in PHP 5.3.4 en hoger is de null byte-techniek. Door %00 aan het einde van een URL toe te voegen, wordt alles na deze genegeerd door de webapplicatie. Dit kan worden gebruikt om een eenvoudige blacklist die bestanden met een .php-extensie filtert, te omzeilen. 

Het up-to-date en gepatched houden van het framework en andere software is altijd goed advies en zal helpen LFI en andere kwetsbaarheden te voorkomen.

We hopen dat je deze informatie nuttig vond, en we hebben nog veel meer interessante inzichten over de top gerapporteerde kwetsbaarheden die nog moeten komen! Blijf op de hoogte van de komende blog!

Referenties

https://owasp.org/www-project-web-security-testing-guide/v42/4-Web_Application_Security_Testing/07-Input_Validation_Testing/11.1-Testing_for_Local_File_Inclusion