De Common Gateway Interface (CGI) is een standaardmanier voor een webserver om het verzoek van een webgebruiker door te geven aan een uitvoerbaar programma (een CGI-script) en de resultaten weer aan de gebruiker weer te geven. In wezen is het een brug tussen een webserver en externe applicaties. In de begindagen van het web was CGI de belangrijkste manier om dynamische inhoud te verwerken die verder ging dan eenvoudige HTML-pagina's.
Vanwege de architectuur en ouderdom vertoont CGI echter verschillende significante webkwetsbaarheden:
* Commando-injectie: Als een CGI-script de gebruikersinvoer niet goed opschoont voordat deze in shell-opdrachten wordt gebruikt (bijvoorbeeld door `system()` of vergelijkbare functies in talen als Perl, Python of C te gebruiken), kan een aanvaller kwaadaardige opdrachten injecteren. Als een script bijvoorbeeld een opdracht als `ls /tmp/` + `$_GET['bestandsnaam']` construeert, kan een aanvaller een parameter `bestandsnaam` maken om willekeurige opdrachten op de server uit te voeren, waardoor mogelijk volledige controle wordt verkregen.
* Pad doorlopen: Net als bij opdrachtinjectie kan een aanvaller, als het script de door de gebruiker opgegeven paden niet valideert, toegang krijgen tot bestanden buiten de beoogde map. Als een script gebruikers bijvoorbeeld toestaat bestanden te bekijken met behulp van een parameter als `view?file=/etc/passwd`, kan een aanvaller proberen `view?file=../../../etc/passwd` gevoelige systeembestanden te lezen.
* Cross-Site Scripting (XSS): Als een CGI-script door de gebruiker aangeleverde gegevens die zijn opgenomen in de HTML-uitvoer niet goed opschoont, kan dit leiden tot weerspiegelde of opgeslagen XSS-kwetsbaarheden. Een aanvaller kan kwaadaardige JavaScript-code injecteren die in de browser van het slachtoffer wordt uitgevoerd, waardoor mogelijk cookies of andere gevoelige informatie worden gestolen.
* Bufferoverloop: Slecht geschreven CGI-scripts kunnen gevoelig zijn voor kwetsbaarheden in de bufferoverloop. Als een aanvaller meer gegevens verzendt dan de buffer van het script aankan, kan dit een crash veroorzaken of kan de aanvaller willekeurige code uitvoeren.
* Denial of Service (DoS): Inefficiënt geschreven CGI-scripts kunnen het doelwit zijn van DoS-aanvallen. Een groot aantal verzoeken kan het script of de serverbronnen overbelasten, waardoor de website niet beschikbaar is.
* Informatielekkage: Een CGI-script kan onbedoeld gevoelige informatie vrijgeven via foutmeldingen, logbestanden of de manier waarop het omgaat met uitzonderingen.
* Onjuiste beveiligingsconfiguratie: Verkeerd geconfigureerde CGI-scripts of de bijbehorende bestanden (bijvoorbeeld onjuiste machtigingen) kunnen tot verschillende kwetsbaarheden leiden.
Waarom CGI nu minder gebruikelijk is:
De kwetsbaarheden en prestatiebeperkingen van CGI hebben geleid tot een afname van de populariteit. Moderne webframeworks zoals PHP, Python's Django/Flask, Ruby on Rails, Node.js, enz. bieden veel betere beveiliging en prestaties door functies zoals ingebouwde invoeropschoning, verbeterde foutafhandeling en robuustere beveiligingspraktijken. Deze raamwerken behandelen de interactie tussen de webserver en de applicatielogica op een veel veiligere en efficiëntere manier dan CGI.
Samenvattend:hoewel CGI historisch gezien belangrijk was, maken de inherente kwetsbaarheden het tot een riskante keuze voor moderne webapplicaties. Het gebruik van veilige, goed onderhouden en regelmatig bijgewerkte raamwerken is van cruciaal belang om u tegen deze aanvallen te beschermen. |