Öffentlichkeit missions & Leitlinien

Sichere Kodierung für die Praxis

Lernen Sie die Richtlinien zur sicheren Programmierung kennen, um Software-Schwachstellen wie die OWASP Top 10 zu verstehen und zu entschärfen, und tauchen Sie ein in die geführte Schulung Missions zu Praktiken in realen Anwendungssimulationen.

Alle durchsuchen missions

Mehr sehen
Steigerung der Produktivität
SQL-Einschleusung
Wir erhielten Berichte von einem Benutzer, dass er eine SQL-Injection-Schwachstelle in der Transaktionssuchfunktion der Internetbank-Lösung ausnutzen konnte. Er gab an, dass er in der Lage war, Transaktionen einzusehen, die anderen Benutzern gehören, und wies darauf hin, dass diese Schwachstelle es einem Angreifer ermöglichen könnte, alle möglichen unangenehmen Dinge mit der Datenbank anzustellen, z. B. Tabellen zu löschen, Daten aus anderen Tabellen einzusehen, Daten einzufügen usw. Versuchen Sie, das nachzuvollziehen, was der Benutzer in dieser Mission getan hat.
Steigerung der Produktivität
Spring MvcRequestMatchers
Im März 2023 veröffentlichte Spring einen Fix für eine intern entdeckte Schwachstelle mit der Bezeichnung CVE-2023-20860, bei der die Verwendung eines doppelten Platzhalters ** in mvcRequestMatchers zu einer Musterabweichung zwischen Spring Security und Spring MVC führen kann. Dies könnte letztendlich dazu führen, dass Benutzer unbefugten Zugriff auf bestimmte Endpunkte erhalten. Wir haben eine sehr vereinfachte Bankanwendung mit einigen wenigen Endpunkten eingerichtet. Folgen Sie den Anweisungen und versuchen Sie, die Auswirkungen dieser Schwachstelle in der Zugriffskontrolle zu reproduzieren.
Steigerung der Produktivität
Trojaner-Quelle - Verwendung von Komponenten aus nicht vertrauenswürdigen Quellen
Einer unserer Viking Bank-Entwickler hat naiverweise Code aus einer nicht vertrauenswürdigen Quelle im Internet kopiert, der potenziell angreifbare Komponenten enthält, um eine Administratorberechtigungsprüfung für die Verwaltung von Kreditkarten zu schreiben. Wir haben festgestellt, dass Benutzer ihr Kreditkartenlimit geändert haben, obwohl nur Administratoren diese Berechtigung haben sollten. Wir glauben, dass mit diesem Code etwas nicht stimmt. Probieren Sie die Mission aus, um den Code zu untersuchen.
Steigerung der Produktivität
Psychische Signaturen - Verwendung bekannter anfälliger Komponenten
CVE-2022-21449 hat den coolsten Alias für eine Sicherheitslücke, Psychic Signatures in Java. Wie kam sie zu diesem Namen? Es ist eine Anspielung auf die übersinnlichen Papiere von Doctor Who. Wenn diese leeren Zettel jemandem gezeigt wurden, füllte er sie mit dem aus, was er zu sehen erwartete. Etwas Ähnliches passierte in der Java-Implementierung (Versionen 15 bis 18) des ECDSA-Algorithmus, was sich auf die Signaturprüfung von JWTs auswirkt. Wir können eine ungültige Signatur einreichen, aber Java wird sie für gültig halten. Wollen Sie sehen, wie das funktioniert? Dann fangen wir an.
Steigerung der Produktivität
Apache Path Traversal - Verwendung bekannter anfälliger Komponenten
Am 4. Oktober 2021 veröffentlichte das Apache-Team die Version 2.4.49 von Apache, um eine Schwachstelle in Apache 2.4.48 zu beheben, die durch Pfadumgehung und Remotecodeausführung verursacht wurde und auch als CVE-2021-41773 bekannt ist. Am 7. Oktober 2021 wurde Version 2.4.51 veröffentlicht, da der Hotfix für Version 2.4.50 nicht vollständig war. Diese Schwachstelle wurde als CVE-2021-42013 verfolgt. Probieren Sie diese Mission aus, um selbst zu sehen, wie diese Sicherheitslücke ausgenutzt werden kann.
Steigerung der Produktivität
Codestashbin - Unsichere Passwort-Rücksetzfunktion
CodeStashBin ist einer der weltweit größten Anbieter von Code-Versionskontrollen. Gerüchten zufolge ist der Prozess zum Vergessen des Passworts mit einer unsicheren Schwachstelle in der Funktion zum Zurücksetzen des Passworts behaftet. Es könnte möglich sein, das Passwort eines privilegierten Benutzers zu ändern und Zugang zu seinem Konto zu erhalten. Beginnen Sie mit dieser Mission, um das Problem zu untersuchen.
Steigerung der Produktivität
Log4j - Verwendung bekannter verwundbarer Komponenten
Die Ankündigung einer 0-Day-Schwachstelle (CVE-2021-44228) in der sehr beliebten Protokollierungsbibliothek Log4j Anfang Dezember 2021 schlug in der Java-Community wie eine Bombe ein. Der Exploit mit dem Namen Log4Shell betrifft die Log4j v2-Versionen 2.0-beta9 bis 2.14.1 und könnte zur Remotecodeausführung führen. Wir haben eine Umgebung eingerichtet, in der der Exploit simuliert wird, so dass Sie die Auswirkungen aus erster Hand sehen können. Probieren Sie es jetzt aus.
Steigerung der Produktivität
Cross-Site-Scripting (XSS) in 'ChatterGPT'
Diese Mission offenbart die vertraute Schnittstelle eines beliebten LLM und verwendet einen echten Codeausschnitt, der Ende November 2023 erstellt wurde. Die Benutzer können dieses Snippet interpretieren und mögliche Sicherheitslücken untersuchen, wenn es für den beabsichtigten Zweck verwendet werden sollte.

Alle Leitlinien durchsuchen

Blättern nach:
Filter ausblenden
Filter anzeigen  
Filter löschen
Tag
Thema
Mehr sehen

Unzureichende Protokollierung und Überwachung

Bewährte Verfahren:

Audit-Protokollierung für sensible Funktionen
Fehlerprotokollierung
Speicherung von Protokollen an einem zentralen Ort
Aufbewahrung von Protokollen für einen bestimmten Zeitraum
Regelmäßige Überprüfung von Protokollen auf PII

Protokollierung und Überwachung sind oft ein nachträglicher Gedanke, wenn bereits etwas schief gelaufen ist, aber in Wirklichkeit kann das Versäumnis, für eine angemessene Protokollierung und Überwachung zu sorgen, sehr kostspielig sein. Einerseits ist es bei einem Zwischenfall (ob sicherheitsrelevant oder nicht) unmöglich, mit wenigen oder gar keinen Protokollen herauszufinden, was tatsächlich passiert ist. Andererseits kann eine zu umfangreiche Protokollierung zu Datenschutzproblemen führen, die wiederum Probleme mit den Aufsichtsbehörden nach sich ziehen können. Lesen Sie unseren Leitfaden für bewährte Verfahren zur Vermeidung unzureichender Protokollierung und Überwachung.

Leitlinien anzeigen

Verwendung von Komponenten mit bekannten Sicherheitslücken

{
 "dependencies": {
   "foo": "1.0.0 - 2.9999.9999",
   "bar": ">=1.0.2 <2.1.2"
 }
}

Die meisten Anwendungen nutzen eine große Anzahl von Komponenten von Drittanbietern. Diese Komponenten bieten alles von der Protokollierung über die Schablonenerstellung bis hin zum Datenbankzugriff und mehr. Das macht die Entwicklung von Software viel einfacher und spart eine Menge Zeit. Aber sie werden auch von Menschen gemacht, was bedeutet, dass einige unweigerlich Schwachstellen enthalten. Lesen Sie den Leitfaden, um mehr darüber zu erfahren.

Leitlinien anzeigen

SQL-Einschleusung

import mysql.connector
db = mysql.connector.connect
#Bad Practice. Vermeiden Sie dies! Dies ist nur zum Lernen.
(host="localhost", user="newuser", passwd="pass", db="sample")
cur = db.cursor()
name = raw_input('Enter Name: ')
cur.execute("SELECT * FROM sample_data WHERE Name = '%s';" % name) for row in cur.fetchall(): print(row)
db.close()

SQL-Injection (SQLi) injiziert Code in SQL-Anweisungen, um wichtige Informationen aus einer Anwendung zu sammeln. Es handelt sich um eine Sicherheitslücke im Web. Es handelt sich um die häufigste Hacking-Technik, bei der die Datenbank manipuliert und wichtige Informationen aus ihr extrahiert werden.

Leitlinien anzeigen

Server-seitige Anforderungsfälschung

ts
let url = request.params.url;

let response = http.get(url);
let render = response.render();

return render.export();

Server-Side Request Forgery-Schwachstellen treten auf, wenn ein Benutzer eine Anwendung dazu veranlassen kann, HTTP-Anfragen an eine vom Angreifer bestimmte Domäne zu stellen. Wenn eine Anwendung Zugriff auf private/interne Netzwerke hat, könnte ein Angreifer die Anwendung auch dazu bringen, Anfragen an interne Server zu stellen. In diesem Leitfaden werden wir uns dies anhand einiger Beispiele genauer ansehen, um besser zu verstehen, wie dies in der Praxis aussieht.

Leitlinien anzeigen

Sicherheit Fehlkonfiguration

Viele Frameworks verfügen auch über eine Reihe von Endpunkten, die für die Überwachung der Anwendung aktiviert werden können, unabhängig davon, ob es sich um eine Produktions- oder Test-/Entwicklungsumgebung handelt. Dazu können gehören:

Metrics (Prometheus)
Logs
Umgebungsinformationen
Path/Url Mappings

Der Begriff "Sicherheitsfehlkonfiguration" ist eine Art Oberbegriff für allgemeine Schwachstellen, die nicht durch fehlerhaften Code, sondern durch die Konfigurationseinstellungen einer Anwendung verursacht werden. Es handelt sich um ein weitreichendes Thema, das stark von Faktoren wie Ihrem Technologie-Stack abhängig ist. Oft ist die Behebung dieser Probleme etwas scheinbar Einfaches, wie die Änderung einer Konfigurationsdatei oder sogar einer einzigen Codezeile, aber die Auswirkungen und Folgen dieser Schwachstellen können schwerwiegend sein. Lesen Sie unseren Leitfaden, um mehr über diese Schwachstelle und ihre Behebung zu erfahren.

Leitlinien anzeigen

Passwortspeicherung

Merkmal Kryptographischer Hash Passwort-Hash Geschwindigkeit Sehr schnell Absichtlich langsam Arbeitsfaktor kann angepasst werden Nein Ja

Wenn Ihre Anwendung Benutzer authentifiziert, ist es wahrscheinlich, dass sie auch mit Passwörtern zu tun haben wird. Der Umgang mit Benutzerpasswörtern ist eine große Sache, und der richtige Umgang mit ihnen ist eine noch größere Sache. Es gibt kaum ein schlimmeres Szenario, als wenn eine Anwendung angegriffen wird und die Passwörter der Benutzer für alle sichtbar im Internet landen. Wie können Passwörter sicher und nach bewährten Verfahren gespeichert werden? Werfen wir einen Blick auf ein paar Möglichkeiten.

Leitlinien anzeigen

Fehlkonfiguration der Sicherheit - XXE detailliert

xml
<?xml version="1.0" ?>
<!DOCTYPE outerElement [
   <!ENTITY externalEntity SYSTEM  "file:///etc/passwd" > ]>
<outerElement>&externalEntity;</outerElement>

Bei der Schwachstelle "XML eXternal Entities" (XXE) handelt es sich um eine Sicherheitsfehlkonfiguration bei XML-Parsern. Der XML-Standard enthält Möglichkeiten, auf "Entitäten" wie Dateien und URLs zu verweisen. Standardmäßig lösen Parser externe Entitäten oft vollständig auf, was bedeutet, dass XML-Dokumente zur Offenlegung von Dateien und anderen sensiblen Informationen für potenzielle Angreifer führen können. Lesen Sie den vollständigen Leitfaden für weitere Informationen.

Leitlinien anzeigen

Massenzuweisung

html
<form method="POST">
     <input name="Id" type="hidden" value="666">
     <input name="Name" type="text" value="Bad guy">
     <input name="EmailAddress" type="text" value="hacker@attacker.com">
     <input name="IsAdmin" type="hidden" value="true">
     <input type="submit">
</form>  

Mass Assignment ist eine Sicherheitslücke, bei der API-Endpunkte nicht einschränken, welche Eigenschaften ihres zugehörigen Objekts von einem Benutzer geändert werden können. Diese Schwachstelle kann auftreten, wenn eine Bibliothek/ein Framework verwendet wird, das die automatische Bindung von HTTP-Parametern an ein Modell ermöglicht, das dann ohne jegliche Validierung verwendet wird. Die Verwendung der automatischen Bindung von einer Anfrage an ein Objekt kann manchmal sehr hilfreich sein, aber sie kann auch zu Sicherheitsproblemen führen, wenn das Modell Eigenschaften hat, die für den Benutzer nicht zugänglich sein sollen. Lesen Sie den Leitfaden für weitere Details.

Leitlinien anzeigen

Injektion - Pfadüberquerung

pseudo
let baseFolder = "/var/www/api/documents/";
let path = baseFolder + request.params.filename;

return file.read(path);

Path Traversal ist eine weitere, recht häufige Art von Injektionsschwachstelle. Sie treten in der Regel auf, wenn bei der Konstruktion eines URI (sei es für eine URL, einen Dateipfad oder anderweitig) nicht ordnungsgemäß sichergestellt wird, dass der vollständig aufgelöste Pfad nicht außerhalb der Wurzel des beabsichtigten Pfads liegt. Die Auswirkungen einer Path Traversal-Schwachstelle hängen stark vom Kontext ab, in dem der Traversal auftritt, und von der allgemeinen Absicherung, die vorgenommen wurde. Lesen Sie den Leitfaden, um mehr zu erfahren.

Leitlinien anzeigen

Einschleusung - XSS

```html
<!--- UNSAFE: The htmlSnippet will get interpreted without any escaping --->
@Html.Raw(htmlSnippet)
```

Cross-Site Scripting, auch als XSS bekannt, ist eine weitere Art von Injektionsschwachstelle, die zur Auswertung eines vom Angreifer kontrollierten Skripts im Browser eines anderen Benutzers führt. XSS kann auch als eine HTML/JavaScript-Injektionsschwachstelle betrachtet werden. Sehen wir uns die Arten von XSS an, die auftreten können.

Leitlinien anzeigen

Hochladen von Dateien

public string UploadProfilePicture(FormFile uploadedFile)
{
    // Generate path to save the uploaded file at
    var path = $"./uploads/avatars/{request.User.Id}/{uploadedFile.FileName}";

    // Save the file
    var localFile = File.OpenWrite(path);
    localFile.Write(uploadedFile.ReadToEnd());
    localFile.Flush();
    localFile.Close();

    // Update the profile picture 
    UserProfile.UpdateUserProfilePicture(request.User, path)

    return path;
}

Es kommt häufig vor, dass Anwendungen es Benutzern ermöglichen müssen, eine Datei (entweder zur Verwendung oder nur zur Speicherung) irgendwo innerhalb der Anwendung hochzuladen. Auch wenn es einfach erscheint, kann die Implementierung dieser Funktion aufgrund der potenziellen Risiken, die mit der Handhabung von Datei-Uploads verbunden sind, ziemlich kritisch sein. Lesen Sie den Leitfaden für weitere Informationen.

Leitlinien anzeigen

Einspritzung 101

Einige der häufigsten Injektionsarten sind:

SQL Injection
Cross-Site Scripting (HTML/Javascript Injection)
Path Traversal (Path/Url Injection)
Command Injection
Code Injection

Eine der bekanntesten Klassen von Schwachstellen sind Injektionsschwachstellen, insbesondere, und das überrascht niemanden, das unbestrittene Aushängeschild: SQL-Injektion. Es ist schwer, in der Welt der Technik nicht von SQL-Injection zu hören, also werden wir einfach darüber sprechen. Lesen Sie weiter, um eine kurze Einführung in Injektionsschwachstellen zu erhalten.

Leitlinien anzeigen

Authentifizierung und Autorisierung

cs

// Ensure the default behaviour is to authenticate requests, and check if they are admin
[Authenticate]
[Authorize("Admin")]
public class SecureController : Controller
{

}

public class MyController : SecureController
{

    // Overrides the Authorize attribute inherited to allow any user to access the page

Leitlinien anzeigen

Befehlsinjektion

let ip = request.params.ipAddress;

system("ping " + ip);

Schauen wir uns die Command Injection als solche an. Wir werden uns vor allem auf einige Beispiele konzentrieren, um zu sehen, wie es in Aktion aussieht. Zur Auffrischung: Command Injection-Schwachstellen treten auf, wenn Benutzereingaben einen Teil eines Betriebssystembefehls verwenden. Lesen Sie den Leitfaden für weitere Informationen.

Leitlinien anzeigen