STP078: Common Weakness Enumeration (Teil 1)
Season 1
Episode 78
Nachdem wir kurz über Alex' Feedback gesprochen haben, soll es heute mal wieder um Sicherheit gehen; diesmal speziell darum, was Personen die Software schreiben beachten sollten, um die bekantesten Fallstricke sicher zu umgehen.
Shownotes
-
Rückbezug STP049: CVE-Datenbank für bekannte Sicherheitslücken in bestimmten Programmen (z.B. Heartbleed ist CVE-2014-0160)
- betrieben von dem privaten Forschungsinstitut Mitre Corporation auf Basis von Fördermitteln der US-Regierung
- April 2025: kurzzeitige Verwirrung nach Aussetzen des Fördervertrages, dann einen Tag später Kommando zurück (Pentaradio berichtete)
- neben CVE pflegt Mitre Corp. eine weniger bekannte Datenbank: CWE (Common Weakness Enumeration), ein Klassifizierungssystem für Arten von Sicherheitslücken
- wir besprechen die jährliche Rangliste der CWE Top 25 mit Stand von 2024
- wertvoll, weil man so als interessierter Laie oder Programmierer-Generalist ein Gefühl für wichtige Angriffsvektoren bekommt
-
Platz 1: CWE-79; fehlerhafte Neutralisierung von Eingaben während der Erzeugung von Webseiten ("Cross-Site Scripting", XSS)
- siehe Beispielbild im Link
- Webseiten können JavaScript-Code enthalten, der auf dem Browser des Endanwenders ausgeführt wird
- wenn Webseiten aus Eingaben anderer Benutzer zusammengebaut werden, können diese Code einschleusen
- Lösung: Escaping (Entfernen oder Ersetzen von Zeichen mit syntaktischer Bedeutung), kann durch Template Engines teilweise automatisiert werden
- passend dazu Platz 7: CWE-78; fehlerhafte Neutralisierung von Eingaben während der Erzeugung von Befehlszeilen
- außerdem Platz 13: CWE-77; dasselbe für alle anderen Befehlssprachen, die nicht JavaScript oder die System-Shell sind
- allgemeiner als Platz 12: CWE-20; unzureichende Überprüfung von Eingaben
- Lösung: "assume all input is malicious"; nur Eingaben akzeptieren, die strikten Formatvorgaben folgen (z.B. unter Einsatz von regulären Ausdrücken, siehe STP021)
-
Platz 2, 6 und 20: CWE-787 und CWE-125; Schreiben bzw. Lesen außerhalb des allokierten Speicherbereichs ("Out-of-Bounds Write/Read") sowie als übergeordnete Kategorie CWE-119; allgemeiner Pufferüberlauf ("Buffer Overflow")
- und passend dazu Platz 8: CWE-416; Benutzung nach dem Freigeben ("Use after Free")
- alle bereits besprochen in STP047
- Lösung: speichersichere Programmiersprachen, Speicherprofiling-Tools wie Valgrind (siehe STP076)
-
Platz 3: CWE-89; SQL-Injektion
- SQL siehe STP012: Abfragesprache für relationale Datenbanksysteme
- Beispiel siehe XKCD 327
- Lösung: Datenwerte von der Abfrage trennen (z.B.
SELECT * FROM users WHERE name = 'Alice'
-> SELECT * FROM u
Published on 13 hours ago