SQL injection
Wat is het?
SQL-injectie is een veelvoorkomende beveiligingskwetsbaarheid waarbij een aanvaller schadelijke SQL-code invoert in een query, met als doel toegang te krijgen tot of controle te krijgen over de database. Normaal gesproken haalt een server informatie uit een SQL-database door middel van een SQL-query die door de applicatie wordt gegenereerd op basis van gebruikersinvoer.
Hoe werkt het?
SQL-injectie werkt door het manipuleren van de invoer van de gebruiker om de structuur van de SQL-query te veranderen. Een eenvoudig voorbeeld hiervan is het gebruik van de invoer ' OR 1=1--
. Wanneer deze invoer wordt toegevoegd aan een query zonder juiste validatie, kan de resulterende query alle records uit de database teruggeven, omdat de voorwaarde 1=1
altijd waar is. De --
is een comment, hierdoor wordt de rest van de query genegeerd.
Wat is hier tegen te doen? Een effectieve manier om SQL-injectie te voorkomen is door gebruik te maken van parameterized queries (ook wel prepared statements genoemd). Deze methode zorgt ervoor dat de invoer van de gebruiker als een afzonderlijke parameter wordt behandeld, in plaats van als een deel van de SQL-query. Dit voorkomt dat schadelijke invoer de structuur van de query kan wijzigen, waardoor de database beter beschermd is tegen aanvallen.
Improper Input Validation
Wat is het?
Improper Input Validation is een beveiligingskwetsbaarheid die optreedt wanneer een applicatie de invoer van de gebruiker niet correct controleert of valideert. Wanneer een applicatie onverwachte onbetrouwbare invoer ontvangt, zoals een verkeerd formaat of een waarde buiten het verwachte bereik, kunnen er ongewenste gevolgen optreden als deze invoer niet correct wordt gevalideerd. Misbruik kan optreden wanneer deze onbetrouwbare invoer met kwaadaardige bedoelingen is gegenereerd.
Hoe werkt het? Improper Input Validation werkt door het misbruiken van verkeerd geconfigureerde validatie. Dit kan betekenen dat schadelijke of ongewenste invoer niet wordt gedetecteerd en verwerkt kan worden door de applicatie. Een voorbeeld hiervan is het kopen van iets op een webshop. Als er incorrect gevalideerd wordt, zou je een negatief aantal producten kunnen kopen. Dit kan leiden tot onverwachtse effecten, zoals een negatieve totaalprijs.
Wat is hier tegen te doen? Om improper input validation te voorkomen, moet worden gecontroleerd of de invoer voldoet aan de verwachte formaten en waarden. Dit kan worden bereikt door het gebruik van:
- Whitelist-validatie: Alleen vooraf gedefinieerde en verwachte invoerformaten worden geaccepteerd.
- Gebruik van ingebouwde validatiefuncties: Zoals RegEx voor patroonmatching.
- Client-side en server-side validatie: Validatie moet zowel aan de kant van de gebruiker (client-side) als aan de kant van de server (server-side) plaatsvinden om volledige dekking te garanderen.
Broken access control
Wat is het? Broken Access Control is een beveiligingskwetsbaarheid waarbij een applicatie niet goed afdwingt welke gebruikers toegang hebben tot bepaalde functies of gegevens. Dit kan ertoe leiden dat onbevoegde gebruikers toegang krijgen tot gevoelige informatie of functies die voor hen niet bedoeld zijn. Denk bijvoorbeeld aan het bereiken van de admin-pagina, of het inzien van iemand anders zijn winkelmand.
Hoe werkt het? Broken Access Control werkt door het misbruiken van verkeerde of ontbrekende controles op de toegangsrechten van gebruikers. De volgende fouten kunnen leiden tot broken acces control:
- Geen verificatie voor gevoelige acties: Als een applicatie geen verificatie vereist voor bepaalde gevoelige acties, kunnen onbevoegde gebruikers deze acties uitvoeren. Bijvoorbeeld, als een applicatie toelaat dat een gebruiker wachtwoorden wijzigt of financiële transacties uitvoert zonder eerst te controleren of de gebruiker gemachtigd is om dit te doen, kunnen kwaadwillenden misbruik maken van deze zwakke plekken.
- Onjuiste configuraties van toegangsrechten: Onjuiste configuraties kunnen ertoe leiden dat gebruikers meer rechten hebben dan noodzakelijk. Bijvoorbeeld, als een gebruiker met leesrechten per ongeluk schrijf- of admin-rechten krijgt, kan dit leiden tot ongeautoriseerde toegang en mogelijke manipulatie van gegevens. Dit kan gebeuren door fouten in de configuratiebestanden of door het verkeerd implementeren van rollen en rechten.
- Autorisatie baseren op URL’s en parameters: Obscurity is not security. Als je je veiligheid baseert op het verbergen van informatie, of het vinden van de juiste URL, is je applicatie niet veilig. Als je iets verstopt kan het altijd gevonden worden, ook door hackers.
Wat is hier tegen te doen? Om Broken Access Control te voorkomen, kunnen de volgende maatregelen worden genomen:
- Least Privilege Principle: Gebruikers moeten de minimale toegangsrechten krijgen die nodig zijn om hun taken uit te voeren. Blokkeer standaard elke actie en geef expliciet aan welke dingen wel gedaan mogen worden.
- Role-Based Access Control (RBAC): Implementeer een systeem waarbij toegang wordt verleend op basis van de rol van de gebruiker binnen de organisatie.
- Zorgvuldige Validatie en Verificatie: Controleer bij elke gevoelige actie of de gebruiker de juiste rechten heeft om deze uit te voeren. Dit kan door middel van token-based authenticatie, multi-factor authenticatie (MFA), en andere vormen van sterke verificatie. Doe dit niet alleen wanneer de pagina laadt, maar bij elke actie die uitgevoerd wordt.
XSS
DOM XSS
Wat is het?
-
Aanval via de URL met script injectie Hoe werkt het?
-
Voorbeeld:
<script></script>
in url voorbeeld zetten Wat hier tegen te doen? -
https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html
Denial of Service (DoS)
Wat is het? Een Denial of Service aanval is een beveiligingskwetsbaarheid waarbij een aanvaller ervoor zorgt dat een service/systeem onbereikbaar is. Een dergelijke aanval kan gebruik worden voor bijvoorbeeld de volgende zaken:
- Extortie
- Sabotage
- Hacktivisme / Politieke statement
Hoe werkt het? Er kan verwarring zijn tussen een DoS aanval en een DDoS aanval (Distributed Denial of Service). Hierbij ligt het verschil in het aantal connecties wat de aanval uitvoert. Een DDoS aanval maakt gebruik van meerdere connecties ten opzichte van DoS waar maar 1 connectie wordt gebruikt om de aanval uit te voeren.
Er zijn twee categorieën van DoS aanvallen, Buffer overflow attacks en Flood attacks. Een buffer overflow attack werkt door een buffer overflow te creëeren waardoor de beschikbare ruimte op de harde schijf, geheugen of de processing tijd van de CPU. Dit kan resulteren in traag gedrag, systeem crashes of andere schadelijk servergedrag. Al dit samen leidt tot een denial-of-service
Wat hier tegen te doen? Er zijn verschillende manieren om een DoS aanval te voorkomen:
-
Blokkeren van IP-adressen: Door IP-adressen te blokkeren van bekende of waarschijnlijke schadelijke bronnen, kunnen het verkeer wat veroorzaakt wordt door de aanval voorkomen om de doelwit te bereiken
-
Rate limiting: Door een limiet te zetten op hoeveel verkeer er over de server mag gaan, voorkom je een mogelijke DoS aanval.
-
Load balancing - Door de server load te verdelen over meerdere servers, wordt de schade van een DoS aanval verminderd.
-
Content Delivery Networks (CDNs) - Met CDNs wordt de content van een website verdeeld over meerdere locaties waardoor het moeilijker wordt om een DoS aanval te plegen.
NoSQL injectie (Not only SQL)
Wat is het? Wanneer er gebruik gemaakt wordt van een NoSQL-database, is NoSQL injectie mogelijk. NoSQL is een database type wat geen gebruik maakt van relationele tabellen, maar eerder van bijvoorbeeld documenten. Met een NoSQL injectie kunnen de volgende problemen optreden:
- Omzeilen van autorisatie of beveiligingsmechanismes
- Ophalen of bewerken van data
- Een DoS veroorzaken
- Het uitvoeren van code Hoe werkt het? Er is geen standaard query language voor NoSQL, waardoor de syntax voor een query verschilt per database engine (bijv. MongoDB), programmeertaal (bijv. PHP) en welk development framework gebruikt wordt (bijv. Angular).
Voorbeeld: Als er gebruik gemaakt wordt van een MongoDB database met unsanitized inputs, kan een injectie plaatsvinden. Stel bij inloginputs geef je de waardes uit de inputs direct mee.
const username = req.body.username;
en const password = req.body.password;
Als aanvaller kan hier kwaadaardig code in gebruiken, zoals { "$ne": null }
. $ne
betekent dat de waarde niet gelijk moet zijn aan de voorwaarde, in dit geval null
. Dit zal waar zijn, waardoor er een injectie plaats heeft gevonden.
Wat hier tegen te doen?
- De meeste NoSQL databases zijn in een constante development, dus het is van belang om de versie van de gekozen database up-to-date te houden.
- Voorkom dat je de userinput gebruikt zonder dit te verifieren. User input moet nooit gelijk vertrouwd worden en altijd gecheckt worden op mogelijke gevaren.
Poison null byte
Wat is het? Null byte is een manier om om data te kunnen versturen of verkrijgen wat anders weggefilterd zou worden.
Hoe werkt het?
Wat hier tegen te doen?
Begrippenlijst
- XSS: Cross-site scripting
- DOM: Document Object Model
- RegEx: Regular expression
- Dit is een patroon om tekst aan te kunnen identificeren
Bronnen
SQL Injection Prevention sheet: https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html
OWASP Admin registration: https://curiositykillscolby.com/2020/11/18/pwning-owasps-juice-shop-pt-22-admin-registration/
https://github.com/refabr1k/owasp-juiceshop-solutions/blob/master/Level3/admin-registration.md https://learn.snyk.io/lesson/improper-input-validation/ https://aihalapathirana.medium.com/owasp-juice-shop-access-scoreboard-and-admin-section-40590a8ae455 https://brightsec.com/blog/broken-access-control-attack-examples-and-4-defensive-measures/#:~:text=Broken%20access%20control%20vulnerability%20is,critical%20web%20application%20security%20risks. Denial-of-service: https://www.cloudflare.com/learning/ddos/glossary/denial-of-service/
Prevention of DoS: https://www.byos.io/blog/denial-of-service-attack-prevention
https://www.imperva.com/learn/application-security/nosql-injection/#:~:text=The%20lower%20number%20of%20consistency,t%20use%20the%20SQL%20syntax.