Skip to content
Artwork for Schlüsseltechnologie
Schlüsseltechnologie · Sep 11, 2025 · 1 hr 4 min

STP078: Common Weakness Enumeration (Teil 1)

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,>

0:00-1:04:59

transcript

No transcript — this publisher did not publish one.

show notes

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,>
links22