Mappenstructuur zichtbaar
CWE-548CWE-200OWASP A05:2021Bijgewerkt 3 september 20264 min leestijd
Wanneer een webserver de inhoud van een map toont omdat er geen indexbestand staat, hoeft een aanvaller niet meer te raden welke bestanden er zijn. Hij leest de lijst gewoon af: back-ups, exports, logbestanden en bestanden die nooit voor publicatie bedoeld waren.
Een aanvaller die niet weet welke bestanden er op een server staan, moet raden. Staat directory listing aan, dan hoeft dat niet meer: de webserver levert de inhoudsopgave zelf aan. Dat is zelden ernstig door de lijst zelf, en vaak wel door wat er in de loop der jaren in zo’n map is blijven liggen. De gevolgen reiken verder dan een rommelige indruk.
Wat is directory listing?
Directory listing is het gedrag waarbij een webserver, bij een verzoek naar een map zonder indexbestand, een overzicht van de inhoud teruggeeft in plaats van een foutmelding. U ziet dan een lijst met bestandsnamen, groottes en wijzigingsdatums, precies zoals een bestandsbeheerder die zou tonen.
Het is standaardgedrag dat ooit nuttig was voor eenvoudige bestandsarchieven, en dat op sommige serverconfiguraties nog steeds aanstaat. Op een moderne webapplicatie is het vrijwel nooit gewenst.
Het effect laat zich vergelijken met het verschil tussen een gesloten archiefkast en een open stelling. In beide gevallen kan iemand die precies weet wat hij zoekt het misschien vinden. Maar bij een open stelling hoeft hij niets te weten: hij loopt langs en leest de ruggen.
Wat komt er zichtbaar?
Kwetsbaar:
GET /uploads/ HTTP/1.1
Host: portaal.example
HTTP/1.1 200 OK
Index of /uploads
Naam Gewijzigd Grootte
../
klantenlijst-2024.xlsx 2024-11-03 14:22 842K
config.php.bak 2023-06-12 09:41 4.1K
database-dump.sql.gz 2025-02-18 03:00 64M
test-factuur.pdf 2025-07-29 16:05 112K
.env.oud 2023-01-08 11:33 1.2K
De lijst zelf is niet het probleem; de inhoud is dat wel. Er staat een klantenbestand, een database-export, een back-up van een configuratiebestand en een oud omgevingsbestand. Geen van die bestanden is ooit bewust gepubliceerd, ze zijn er terechtgekomen omdat de map handig was. Zonder listing had een aanvaller de namen moeten raden, en database-dump.sql.gz met die precieze naam raadt niemand. Nu staat hij er gewoon.
Veilig:
# Uitschakelen op serverniveau geldt voor alles, ook voor nieuwe mappen
autoindex off;
# En de bestanden die er sowieso niet horen te staan
location ~ \.(bak|old|orig|sql|gz|env|log)$ {
deny all;
return 404;
}
# Apache
Options -Indexes
Het uitschakelen is één regel, en die geldt meteen voor elke map, inclusief de mappen die later worden aangemaakt. De aanvullende blokkade op bestandsextensies is een vangnet voor het geval er alsnog iets belandt waar het niet hoort.
De structurele maatregel gaat verder dan de configuratie: bestanden die niet publiek horen te zijn, horen niet in de webroot. Bewaar exports, back-ups en door gebruikers geüploade bestanden buiten de gepubliceerde map en lever ze uit via een route die eerst autoriseert.
Wat is de impact van een zichtbare mappenstructuur?
De ernst loopt van laag tot hoog, en die spreiding is hier terecht: hij wordt volledig bepaald door wat er in de map ligt. Staan er alleen afbeeldingen die toch al publiek zijn, dan is er weinig aan de hand.
Het risico ontstaat door de tijd. Mappen die met een duidelijk doel zijn aangemaakt, lopen vol met wat er tussendoor is neergezet: een export voor een collega, een back-up voor de zekerheid, een testbestand van een migratie. Elk daarvan is met een goede reden gemaakt en niemand heeft eraan gedacht ze weg te halen. Directory listing maakt die hele verzameling in één verzoek zichtbaar.
Daarnaast is er de verkenningswaarde. Zelfs zonder gevoelige bestanden verraadt de lijst hoe uw applicatie is opgebouwd: welke onderdelen er zijn, welke bestandsnamen worden gebruikt, wanneer er voor het laatst is gewerkt. Dat maakt gerichte vervolgpogingen aanzienlijk effectiever, bijvoorbeeld bij het zoeken naar bestanden in andere mappen.
Hoe spoor je een zichtbare mappenstructuur op?
Een tester vraagt de mappen op die uit de applicatie bekend zijn (de paden waaruit afbeeldingen, stylesheets en documenten worden geladen) en kijkt of er een lijst verschijnt in plaats van een foutmelding. Daarnaast wordt gezocht met een lijst van veelvoorkomende mapnamen: uploads, backup, temp, oud, export, logs, admin, test.
Wordt een lijst gevonden, dan verschuift de aandacht naar de inhoud: bestanden met extensies die op back-ups of exports wijzen, bestanden met een recente wijzigingsdatum, en bestanden die opvallen door hun omvang. Ook wordt gekeken of de listing alleen op sommige mappen aanstaat, wat erop wijst dat de bescherming per map is geregeld in plaats van centraal: een situatie die bij de volgende toevoeging opnieuw misgaat. AssistSec combineert dit met een bredere zoekactie naar niet-gelinkte bestanden, omdat het uitschakelen van de listing de bestanden zelf niet weghaalt en die dan nog steeds rechtstreeks opvraagbaar zijn.
Hoe voorkom je een zichtbare mappenstructuur?
- Schakel directory listing uit op serverniveau, zodat de instelling voor alle mappen geldt.
- Bewaar back-ups, exports en logbestanden buiten de gepubliceerde map.
- Lever door gebruikers aangeleverde bestanden uit via een route die eerst autoriseert.
- Blokkeer extensies die op back-ups en exports wijzen als aanvullend vangnet.
- Controleer de instellingen van uw objectopslag apart; die staan los van uw webserver.
- Vertrouw niet op een leeg indexbestand; dat verbergt de lijst maar lost de configuratie niet op.
- Ruim periodiek op wat er werkelijk in de webroot staat, in plaats van wat er zou moeten staan.
- Herhaal de controle na een servermigratie, want standaardconfiguraties keren dan terug.
Bronnen
Veelgestelde vragen
Is een leeg indexbestand een oplossing?
Het verbergt de lijst, maar het lost de configuratie niet op. De bestanden blijven rechtstreeks opvraagbaar en één vergeten map is genoeg om de lijst alsnog te tonen. Schakel de functie uit in de serverconfiguratie; dat geldt dan voor alles, ook voor mappen die later worden toegevoegd.
Wat is het werkelijke risico als er alleen afbeeldingen staan?
Dan blijft het beperkt en is de ernst laag. Het risico ontstaat doordat mappen in de loop der tijd vollopen met wat er niet hoort: een export van vorig jaar, een back-up van een configuratiebestand, een testbestand. Directory listing maakt die verzameling in één blik zichtbaar.
Waarom vinden aanvallers deze mappen zo snel?
Omdat er geautomatiseerd wordt gezocht met lijsten van veelvoorkomende mapnamen. Uploads, backup, temp, oud, export en logs staan daar allemaal in. Er is geen link naar nodig; de map hoeft alleen te bestaan.
Geldt dit ook voor objectopslag in de cloud?
Ja, en daar is het een bekende bron van datalekken. Een opslagbucket waarvan de inhoud opsombaar is, werkt precies als directory listing. Controleer die instellingen apart, want ze staan los van de configuratie van uw webserver.
Verwante artikelen
- KwetsbaarhedenCWE-1188A05:2021Standaardbestanden van de webserver bereikbaarVoorbeeldpagina's, beheerconsoles en installatiebestanden die na installatie blijven staan, verraden uw platform en zijn soms misbruikbaar.
- KwetsbaarhedenCWE-200A01:2021Information disclosureInformation disclosure uitgelegd: hoe stack traces, .git-mappen, source maps en te ruime API-responses gegevens lekken, en hoe u dat voorkomt.
- KwetsbaarhedenCWE-200A05:2021Metadata in gepubliceerde bestandenDocumenten en foto's dragen verborgen gegevens mee: namen, interne paden, software en soms locaties. Lees hoe u die verwijdert voor publicatie.
- KwetsbaarhedenCWE-16A05:2021Security misconfigurationSecurity misconfiguration uitgelegd: hoe standaardwachtwoorden, debug-modi en open cloud-buckets aanvallers binnenlaten, en hoe u dit voorkomt.
- KwetsbaarhedenCWE-527A05:2021Broncode publiek benaderbaarEen meegepubliceerde.git-map of back-upbestand geeft uw volledige broncode prijs, inclusief wachtwoorden uit oude commits. Lees hoe u dat voorkomt.