OS command injection (ook bekend als shell injection) is een web security vulnerability die het mogelijk maakt dat een aanvaller willekeurig besturingssysteem (OS) commando ‘ s uitvoert op de server waarop een toepassing draait, en meestal de toepassing en alle gegevens volledig in gevaar brengt.
- Waarom moeten webapplicaties systeemcommando ‘ s uitvoeren?
- waarom u voorzichtig moet zijn bij het gebruik van systeemcommando ’s in webtoepassingen
- voorbeeld van een kwetsbaarheid voor commando-injectie
- Hoe het Systeem te Voorkomen Opdracht Injectie Kwetsbaarheden
- Vulnerability Classification and Severity Table
Waarom moeten webapplicaties systeemcommando ‘ s uitvoeren?
webtoepassingen moeten soms besturingssysteemcommando ‘ s (OS-opdrachten) uitvoeren om te communiceren met het onderliggende hostbesturingssysteem en het bestandssysteem. Dit kan worden gedaan om systeemcommando ‘ s uit te voeren, applicaties te starten die zijn geschreven in een andere programmeertaal, of shell, python, perl of PHP scripts uit te voeren. Voor elk besturingssysteem, inclusief Windows, Unix en Linux, zijn functies beschikbaar die een opdracht kunnen uitvoeren die wordt doorgegeven aan de andere scripts als een shell-opdracht. Hoewel zeer nuttig, deze functionaliteit kan gevaarlijk zijn wanneer verkeerd gebruikt, en kan leiden tot problemen met de beveiliging van webapplicaties, zoals uitgelegd in dit artikel.
waarom u voorzichtig moet zijn bij het gebruik van systeemcommando ’s in webtoepassingen
door gebruik te maken van een commando-injectie kwetsbaarheid in een kwetsbare toepassing, kunnen aanvallers extra commando’ s toevoegen of hun eigen besturingssysteem commando ‘ s injecteren. Dit betekent dat tijdens een commando-injectie aanval, een aanvaller gemakkelijk volledige controle over het host-besturingssysteem van de webserver kan nemen. Daarom moeten ontwikkelaars heel voorzichtig zijn met het doorgeven van gebruikersinvoer aan een van die functies bij het ontwikkelen van webapplicaties.
voorbeeld van een kwetsbaarheid voor commando-injectie
in dit voorbeeld van de kwetsbaarheid voor commando-injectie gebruiken we de ping-functionaliteit, die op veel routers notoir onveilig is. Stel je een kwetsbare applicatie voor die een gemeenschappelijke functie heeft die een IP-adres doorgeeft van een gebruikersinvoer naar het ping-commando van het systeem. Daarom, als de input van de gebruiker 127.0.0.1 is, wordt het volgende commando uitgevoerd op het host-besturingssysteem:
ping -c 5 127.0.0.1
omdat we te maken hebben met een kwetsbare webapplicatie, is het mogelijk om uit het ping commando te breken of een fout te veroorzaken die nuttige informatie teruggeeft aan de aanvaller. De aanvaller kan deze functionaliteit dan gebruiken om zijn eigen willekeurige commando ‘ s uit te voeren. Een voorbeeld van het toevoegen van extra systeemcommando ‘ s zou er als volgt uit kunnen zien:
ping -c 5 127.0.0.1; id
in het bovenstaande voorbeeld wordt eerst het ping commando uitgevoerd en direct daarna het id commando uitgevoerd. Daarom zal het commando uitvoer op de pagina er zo uitzien:
tijdens een OS Commando injectie aanval, kan de aanvaller ook een fout gebaseerde aanval instellen. Bijvoorbeeld, een code-injectie in dit geval meestal de hieronder:
ping -c 5 "$(id)"
bovenstaande code-injectie geeft een reactie als deze:
ping: unknown host uid=0(root) gid=0(root) groups=0(root)
Hoe het Systeem te Voorkomen Opdracht Injectie Kwetsbaarheden
om te voorkomen dat een aanvaller misbruik maken van de kwetsbare webapplicatie en het invoegen van speciale tekens in het besturingssysteem opdracht je moet proberen om in het algemeen te vermijden systeem oproepen waar mogelijk. In alle gevallen, vermijd input van de gebruiker van welke aard dan ook, tenzij het absoluut noodzakelijk is. En als het nodig is, zorg ervoor dat er een goede invoervalidatie op zijn plaats – invoervalidatie is altijd een must om ervoor te zorgen dat uw webapplicatie code is niet kwetsbaar voor andere high-impact kwetsbaarheden, waaronder XSS en SQL injectie.
Deactiveer ook deze functionaliteit in het configuratiebestand van uw taal als u het niet nodig hebt, zodat aanvallers er nooit in slagen om toegang te krijgen tot de systeem shell op het hostbesturingssysteem via kwetsbare webtoepassingen. In sommige talen kunt u de uitvoering van het proces scheiden van de invoerparameters. U kunt ook een witte lijst van mogelijke ingangen maken en de indelingen controleren, bijvoorbeeld het accepteren van alleen integer voor een numerieke id.