Kwetsbaarheid Nummer 1: Command Injection

Door: Lucas Dresscher

Wat is het en waar komt het voor?

In dit artikel behandel ik de nummer 1 op de “OWASP Top 10 Application Security Risks – 2017” lijst: injection. Injection houdt in dat een aanvaller, via een vorm van input in een applicatie, code kan doorsturen naar een interpreter. Het doel van de aanvaller is om hiermee onrechtmatig gegevens te verkrijgen en te gebruiken/misbruiken. Rechtsonder staat een praktijkvoorbeeld van injection:

OS_Command_injection.png

Ondanks dat bijna iedereen die in de IT werkt bekend is met injection, is injection nog steeds de meest voorkomende kwetsbaarheid in applicaties. Dit is opmerkelijk, maar ook heel logisch. Het grootste probleem aan deze kwetsbaarheid is dat er vrijwel overal in een applicatie injection flaws kunnen zitten. Op elke plek waar sprake is van user input data – URL’s, XML of JSON inputs, cookies etc. - kan een aanvaller (trachten te) gebruiken voor injection. Hierdoor zijn er vele varianten, zoals de welbekende (No)SQL injection maar ook LDAP injection, EL injection en OS command injection. Het is daardoor niet gemakkelijk om je applicatie volledig tegen deze kwetsbaarheid te beveiligen.


Wat kunnen de gevolgen zijn?

injection.jpeg

Afhankelijk van de fail securely maatregelen die genomen zijn (zie “Hoe beveilig je je er tegen?”), kan er van alles met je data gebeuren, en op elke schaal. Typische gevolgen van een geslaagde injection-aanval zijn verlies of corruptie van data, ontzegging van toegang tot data en het doorspelen van data aan (criminele) derde partijen.

Hoe beveilig je je er tegen?

Hoewel er dus vele vormen van injection zijn, zijn de preventie- en detectiemaatregelen tegen alle vormen vergelijkbaar. Hieronder volgt een overzicht van de mogelijke maatregelen die je kunt nemen.

Preventiemaatregelen

  1. De beste manier om injection te voorkomen is input validation. Controleer en valideer alle vormen van user input in je code alvorens je deze gebruikt voor een aanroep naar je interpreter.

  2. Gebruik een veilige API voor je applicatie, die het gebruik van een interpreter volledig omzeilt.

  3. Fail securely, oftewel beperk de schade als er iets fout gaat. Beperk bijvoorbeeld de hoeveelheid informatie die weergegeven wordt als resultaat van een query door TOP (SQL), LIMIT (MySQL) of ROWNUM (Oracle) aan de query toe te voegen.

Detectiemaatregelen

  1. Voer een handmatige source code review uit. Ga na waar in je applicatie user input wordt gegeven en controleer op deze plekken de input validation.

  2. Voer op elke plek waar injection mogelijk is een geautomatiseerde test uit. Gebruik hiervoor bijvoorbeeld het MetaSploit Framework in combinatie met Kali Linux.

Vooruitblik

In het volgende artikel zal ik de op één na meest voorkomende kwetsbaarheid in applicaties behandelen: Broken Authentication. Dit is een kwetsbaarheid die al vele jaren hoog in de lijst staat.

"BROKEN AUTHENTICATION ZAL IN HET VOLGENDE ARTIKEL WORDEN BEHANDELD"

Door de alsmaar groeiende beschikbare rekenkracht die aanvallers hebben voor bijvoorbeeld Brute Force Attacks zal dat ook nog wel lang zo blijven. Gelukkig kun je je applicatie met een aantal maatregelen hiertegen beveiligen. Hoe? Lees het in het volgende artikel van mijn Cybersecurity reeks.

Eerder verschenen:
Introductie Lucas - Cybersecurity