Command execution
AanvallenAanval waarbij men door zwakheden in een website direct opdrachten kan geven aan het systeem waar de website op draait. Met die opdrachten kan een aanvaller het systeem dingen laten doen die niet de bedoeling zijn.
Command execution is een type cyberaanval waarbij een aanvaller erin slaagt willekeurige commando's uit te voeren op een doelsysteem. Dit gebeurt door kwaadaardige invoer te injecteren in een applicatie die systeemcommando's uitvoert zonder die invoer voldoende te valideren of te sanitiseren. De impact is groot: een succesvolle command execution geeft de aanvaller dezelfde rechten als het proces waarin de kwetsbaarheid zit, wat vaak leidt tot volledige overname van het systeem. Remote Code Execution (RCE), de variant waarbij dit op afstand kan, wordt beschouwd als een van de ernstigste kwetsbaarheidstypen in cybersecurity.
Command execution kwetsbaarheden komen vaker voor dan je zou verwachten. In 2025 werden meer dan 48.000 nieuwe CVE's gepubliceerd, waarvan meer dan een derde een hoog of kritiek risico vertegenwoordigde. De helft van de top-10 meest misbruikte kwetsbaarheden in recente jaren betrof RCE-kwetsbaarheden. Grote organisaties, overheden en multinationals zijn regelmatig het doelwit van aanvallen die gebruik maken van command execution in webapplicaties, content management systemen en enterprise software. In juli 2025 waarschuwde Microsoft voor actieve exploitatie van een RCE-kwetsbaarheid in SharePoint waarbij aanvallers via deserialisatie van onbetrouwbare data controle over servers kregen bij overheidsinstanties en financiele instellingen.
Hoe werkt command execution?
Command execution ontstaat wanneer een applicatie gebruikersinvoer direct doorgeeft aan een systeemshell of commando-interpreter zonder adequate validatie of sanitisatie. De aanvaller voegt shell-metacharacters of extra commando's toe aan normale invoer. Voorbeelden zijn het toevoegen van een puntkomma gevolgd door een kwaadaardig commando, het gebruik van pipe-operators om output om te leiden, of het injecteren van backticks die een subcommando uitvoeren binnen de oorspronkelijke opdracht.
Een veelvoorkomend scenario is een webapplicatie die een ping-functie aanbiedt. Als de applicatie het IP-adres dat de gebruiker invoert direct doorgeeft aan het systeem-pingcommando, kan een aanvaller invoer als "127.0.0.1; cat /etc/passwd" gebruiken om naast de ping ook het wachtwoordbestand uit te lezen. Bij SQL injection manipuleert de aanvaller database-queries, bij command execution manipuleert de aanvaller systeemcommando's. Beide zijn vormen van injectieaanvallen maar richten zich op verschillende lagen van het systeem en hebben verschillende consequenties voor de getroffen organisatie.
De gevolgen van een succesvolle command execution zijn verstrekkend. De aanvaller kan bestanden lezen en wijzigen, nieuwe gebruikersaccounts aanmaken, malware installeren, backdoors plaatsen voor persistent access en het systeem gebruiken als springplank voor laterale beweging naar andere systemen in het netwerk. Bij RCE-aanvallen op publiek bereikbare webservers kan een aanvaller binnen minuten een volledig gecompromitteerd systeem hebben dat als bruggehoofd dient voor verdere aanvallen op het interne netwerk. De combinatie van hoge impact en relatief eenvoudige exploitatie maakt command execution tot een van de meest gevaarlijke aanvalstechnieken.
Hoe herken je command execution?
Command execution aanvallen herken je aan specifieke patronen in je logs en monitoring. Ongebruikelijke processen die worden gestart door webserver- of applicatieprocessen zijn een sterk signaal. Als je Apache- of Nginx-proces plotseling shell-commando's uitvoert zoals wget, curl, chmod of bash, wijst dit op command execution. EDR-oplossingen detecteren deze patronen door procesrelaties te monitoren en te waarschuwen wanneer een webapplicatieproces onverwachte child-processen spawnt.
In webapplicatie-logs zoek je naar verdachte invoerpatronen: shell-metacharacters zoals puntkomma's, pipe-tekens, ampersands en backticks in formuliervelden of URL-parameters. Web Application Firewalls (WAF) kunnen deze patronen in real-time detecteren en blokkeren voordat ze de applicatie bereiken. Intrusion Detection Systems op netwerkniveau herkennen command execution-pogingen aan specifieke payloads in het netwerkverkeer. Regelmatige code audits en penetratietests identificeren kwetsbare invoerpunten voordat aanvallers ze ontdekken en exploiteren.
Hoe bescherm je je tegen command execution?
De belangrijkste bescherming tegen command execution is het vermijden van directe systeemcommando's vanuit applicatiecode. Gebruik in plaats daarvan native API's en bibliotheken van je programmeertaal die dezelfde functionaliteit bieden zonder een shell aan te roepen. Als systeemcommando's onvermijdelijk zijn, gebruik dan parameterized commands waarbij de invoer als argument wordt doorgegeven in plaats van als onderdeel van de commandostring, vergelijkbaar met prepared statements bij SQL-queries. Dit voorkomt dat speciale tekens als commando-instructies worden geinterpreteerd.
Implementeer strikte inputvalidatie met een whitelist-benadering: definieer welke tekens en patronen zijn toegestaan en weiger alles daarbuiten. Draai applicaties met het principe van least privilege zodat zelfs bij succesvolle exploitatie de schade beperkt blijft tot wat het beperkte account kan doen. Gebruik containerisatie en sandboxing om applicaties te isoleren van het onderliggende besturingssysteem, zodat een gecompromitteerde applicatie niet direct toegang heeft tot systeembronnen. Regelmatige vulnerability scans en penetratietests identificeren command execution kwetsbaarheden voordat aanvallers ze vinden en misbruiken in gerichte aanvallen.
Command execution in de praktijk
Een concreet voorbeeld van de impact van command execution is de Log4Shell kwetsbaarheid (CVE-2021-44228) in de Apache Log4j logging library. Deze kwetsbaarheid maakte remote code execution mogelijk door een speciaal geformateerde string in een logbericht te injecteren. Omdat Log4j werd gebruikt in miljoenen applicaties wereldwijd, was de impact enorm en moesten organisaties in alle sectoren noodpatches doorvoeren. Dit toont aan hoe een enkele onveilige verwerking van invoer kan leiden tot volledige systeemcompromittering op wereldwijde schaal. Recenter, in 2025, werden meerdere RCE-kwetsbaarheden ontdekt in populaire frameworks en CMS-systemen die door aanvallers werden misbruikt om webshells te plaatsen en netwerken te infiltreren. De aanvallers gebruikten de verkregen toegang om ransomware te deployen bij tientallen organisaties in Europa, wat de urgentie van inputvalidatie en secure coding practices opnieuw onderstreepte.
Veelgestelde vragen over command execution
Wat is het verschil tussen command execution en SQL injection?
Beide zijn injectieaanvallen maar richten zich op verschillende doelen. SQL injection manipuleert database-queries om data te stelen of wijzigen. Command execution manipuleert systeemcommando's om controle over het besturingssysteem te krijgen. Command execution geeft doorgaans diepere toegang omdat het directe interactie met het besturingssysteem mogelijk maakt.
Hoe ernstig is een command execution kwetsbaarheid?
Zeer ernstig. Command execution, vooral de remote variant (RCE), krijgt typisch een CVSS-score van 9.0 of hoger. Het stelt aanvallers in staat willekeurige code uit te voeren met de rechten van het kwetsbare proces. Dit kan leiden tot volledige systeemovername, data-exfiltratie en laterale beweging door het netwerk naar andere systemen.
Welke programmeertalen zijn extra kwetsbaar?
Talen die eenvoudig shell-commando's kunnen uitvoeren zoals PHP (exec, system), Python (os.system, subprocess) en Perl zijn extra kwetsbaar als ontwikkelaars ongevalideerde invoer aan systeemcommando's doorgeven. De kwetsbaarheid zit niet in de taal zelf maar in het onveilige gebruik van system call functies.
Kan een WAF command execution stoppen?
Een WAF kan veel command execution pogingen blokkeren door bekende aanvalspatronen in HTTP-verzoeken te herkennen. Geavanceerde aanvallers gebruiken echter encoding, obfuscatie en gefragmenteerde payloads om WAF-regels te omzeilen. Een WAF is daarom een aanvulling op, geen vervanging van, secure coding practices en grondige inputvalidatie in de applicatiecode.
Wat is het verschil tussen command injection en code injection?
Bij command injection voert de aanvaller systeemcommando's uit via een shell of commando-interpreter. Bij code injection injecteert de aanvaller code in de programmeertaal van de applicatie die door de runtime wordt uitgevoerd. Beide zijn gevaarlijk, maar command injection geeft directe toegang tot het besturingssysteem terwijl code injection beperkt is tot de applicatiecontext.
Bescherm je applicaties tegen command execution. Vind de juiste aanbieder via Application Security Testing (AST) aanbieders op IBgidsNL.