DiscoverSchlüsseltechnologieSTP078: Common Weakness Enumeration (Teil 1)
STP078: Common Weakness Enumeration (Teil 1)

STP078: Common Weakness Enumeration (Teil 1)

Update: 2025-09-11
Share

Description

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 users WHERE name = $1 mit Datensatz ["Alice"])

    • passend dazu Platz 11: CWE-94; Code-Injektion (dasselbe für Programmcode); Überlapp zu CWE-77




  • Platz 4: CWE-352; Cross-Site Request Forgery (CSRF)



    • Angreifer möchte im Namen des Opfers eine Aktion ausführen (z.B. auf Rechnung des Opfers in einem Webshop bestellen)

    • Angreifer schiebt dem Opfer ein manipuliertes HTML-Formular unter, dass beim Abschicken die gewünschte Aktion auslöst, aber mit den Cookies (und damit der Identität des Opfers)

    • Lösung: CSRF-Tokens (echte HTML-Formulare erhalten ein einmalig nutzbares Token, dass nicht vom Angreifer gefälscht werden kann)

    • passend dazu Platz 19: CWE-918; Server-Site Request Forgery (SSRF)

    • dabei manipuliert der Angreifer nicht ein menschliches Opfer oder einen Webclient, sondern einen Webserver, mit seinem privilegierten Zugriff andere Webserver abzufragen




  • Platz 5: CWE-22; Pfaddurchquerung ("Path Traversal")



    • z.B. bei Webservern mit statischen Inhalten: entsprechende Dateien liegen im Dateisystem in einem bestimmten Ordner

    • Dateien außerhalb dieses Ordners sollen eigentlich nicht zugreifbar sein, aber manchmal geht http://example.com/../../../etc/passwd oder dergleichen

    • Lösung: magische Pfadelemente wie .. (bei Pfaden) oder / (bei Dateinamen) ablehnen




Feedback zu STP063


Alex schreibt:



danke für den Podcast. Ich bin wie immer weit im Rückstand mit Hören, habe zu Folge 63 aber mal die Turing-Maschine für die Subtraktion neu gebastelt. [...] Den Input muss man mit folgender 0 eingeben, also 1110110 z.B.
Gebaut habe ich das auf https://turingmachinesimulator.com/.



//----------------------------------------------------------------------
//Syntax:

//-------CONFIGURATION
name: sub
init: q0
accept: qe

//-------DELTA FUNCTION:
//[current_state],[read_symbol]
//[new_state],[write_symbol],[>|<|-]

// < = left
// > = right
// - = hold
// use underscore for blank cells

q0,1 // 1en 1.Op überspringen
q0,1,>

q0,0
q1,0,>

q1,0 // 0en überspringen
q1,0,>

q1,1
q2,1,>

q2,0 // mehr als eine 1 im 2. Op? Ja->q5, nein->q3
q3,0,<

q2,1
q5,1,>

q5,1 // 1en 2.Op überspringen, dann auf letzte 1 des 2.Op
q5,1,>

q5,0
q6,0,<

q6,1 // letzte 1 des 2. Op durch 0 ersetzen
q7,0,<

q7,1 // zurück, 1en 2. Op überspringen
q7,1,<

q7,0
q8,0,<

q8,0 // zurück, 0en überspringen
q8,0,<

q8,1 // letzte 1 des 1. Op auf 0 setzen, zurück zu q1
q1,0,>

q3,1 // letzte 1 des 2. Op auf 0 setzen
q4,0,<

q4,0 // zurück, 0en überspringen
q4,0,<

q4,1 // letzte 1 des 1.Op auf Null setzen, zum Ende
qe,0,>
Comments 
loading
00:00
00:00
1.0x

0.5x

0.8x

1.0x

1.25x

1.5x

2.0x

3.0x

Sleep Timer

Off

End of Episode

5 Minutes

10 Minutes

15 Minutes

30 Minutes

45 Minutes

60 Minutes

120 Minutes

STP078: Common Weakness Enumeration (Teil 1)

STP078: Common Weakness Enumeration (Teil 1)

Xyrillian Noises