Tâches publiques et directives

Programmation sécurisée dans la pratique

Veuillez vous informer sur les directives relatives à la programmation sécurisée afin de comprendre et de corriger les failles de sécurité des logiciels telles que celles répertoriées dans le Top 10 de l'OWASP, et participez à des missions de formation guidées pour vous exercer à des simulations pratiques d'applications.

apprendre bg

Veuillez consulter toutes les missions

En savoir plus
Augmentez votre productivité
Injection SQL
Un utilisateur nous a signalé qu'il avait réussi à exploiter une vulnérabilité de type injection SQL dans la fonction de recherche de transactions de la solution de banque en ligne. Il a indiqué qu'il avait pu voir des transactions appartenant à d'autres utilisateurs et a souligné que cette vulnérabilité pouvait permettre à un attaquant de faire toutes sortes de choses désagréables dans la base de données, comme supprimer des tables, voir des données d'autres tables, insérer des données, etc. Essayez de reproduire ce que l'utilisateur a fait dans cette mission.
Augmentez votre productivité
Spring MvcRequestMatchers
En mars 2023, Spring a publié un correctif pour une vulnérabilité découverte en interne, appelée CVE-2023-20860, où l'utilisation d'un double caractère générique ** dans mvcRequestMatchers pourrait entraîner une non-concordance des modèles entre Spring Security et Spring MVC. Cela pourrait conduire à ce que des utilisateurs obtiennent un accès non autorisé à certains points de terminaison. Nous avons mis en place une application bancaire très simplifiée avec quelques points de terminaison. Suivez les instructions et essayez de reproduire l'impact de cette vulnérabilité de contrôle d'accès.
Augmentez votre productivité
Signatures psychiques - Utilisation de composants vulnérables connus
CVE-2022-21449 a l'alias le plus cool pour une vulnérabilité, Psychic Signatures in Java (Signatures psychiques en Java). Comment a-t-elle obtenu ce nom ? Il s'agit d'une référence aux papiers psychiques de Doctor Who. Lorsqu'on les montrait à quelqu'un, ces feuilles de papier vierges étaient remplies de ce qu'il s'attendait à voir. Un phénomène similaire s'est produit dans l'implémentation Java (versions 15 à 18) de l'algorithme ECDSA, ce qui a un effet sur la vérification de la signature des JWT. Nous pouvons soumettre une signature non valide, mais Java pensera qu'elle est valide. Vous voulez voir comment cela fonctionne ? Commençons.
Augmentez votre productivité
Apache Path Traversal - Utilisation de composants vulnérables connus
Le 4 octobre 2021, l'équipe Apache a publié la version 2.4.49 d'Apache pour corriger une vulnérabilité de traversée de chemin et d'exécution de code à distance dans Apache 2.4.48, également connue sous le nom de CVE-2021-41773. Le 7 octobre 2021, la version 2.4.51 a été publiée car le correctif de la version 2.4.50 n'était pas complet. Cette vulnérabilité était connue sous le nom de CVE-2021-42013. Essayez cette mission pour voir par vous-même comment cette vulnérabilité peut être exploitée.
Augmentez votre productivité
Log4j - Utilisation de composants vulnérables connus
L'annonce, début décembre 2021, d'un exploit 0-day (CVE-2021-44228) dans la très populaire bibliothèque de journalisation Log4j, a fait l'effet d'une bombe dans la communauté Java. L'exploit, baptisé Log4Shell, affecte les versions 2.0-beta9 à 2.14.1 de Log4j v2, et pourrait conduire à l'exécution de code à distance. Nous avons mis en place un environnement pour simuler l'exploit, afin que vous puissiez voir l'impact de première main. Essayez-le maintenant.
Augmentez votre productivité
Trojan Source - Utilisation de composants provenant de sources non fiables
L'un des développeurs de Viking Bank a naïvement copié du code provenant d'une source non fiable sur Internet, qui contient potentiellement des composants vulnérables, afin d'aider à écrire un contrôle d'autorisation de l'administrateur pour gérer les cartes de crédit. Nous avons remarqué que des utilisateurs modifiaient la limite de leur carte de crédit, alors que seuls les administrateurs devraient avoir ce privilège. Nous pensons qu'il y a un problème avec ce code. Essayez la mission pour enquêter sur le code.
Augmentez votre productivité
Codestashbin - Fonction de réinitialisation de mot de passe non sécurisée
CodeStashBin est l'une des plus grandes sociétés d'hébergement de contrôle de version de code au monde. La rumeur veut que le processus d'oubli du mot de passe soit entaché d'une vulnérabilité de la fonction de réinitialisation du mot de passe. Il pourrait être possible de modifier le mot de passe d'un utilisateur privilégié et d'accéder à son compte. Participez à cette mission pour enquêter sur ce problème.
Augmentez votre productivité
Scripting intersite (XSS) dans 'ChatterGPT' (en anglais)
Cette mission révèle l'interface familière d'un LLM populaire et utilise un extrait de code réel généré à la fin du mois de novembre 2023. Les utilisateurs peuvent interpréter ce bout de code et étudier les problèmes de sécurité potentiels s'il devait être utilisé dans le but prévu.

Rechercher toutes les directives

Rechercher :
Masquer le filtre
Sélection
Afficher le filtre
Sélection
Supprimer le filtre
Mot-clé
Super icône [★]
Thème
En savoir plus

Unzureichende Protokollierung und Überwachung

Bonnes pratiques :

Journalisation des audits pour les fonctions sensibles
Journalisation des erreurs
Stockage des journaux dans un endroit centralisé
Conservation des journaux pendant une période définie
Audit régulier des journaux pour les IPI

Protokollierung und Überwachung sind oft ein nachträglicher Gedanke, wenn bereits etwas schief gelaufen ist, aber in Wirklichkeit kann es sehr kostspielig sein, wenn nicht sichergestellt wird, dass eine ordnungsgemäße Protokollierung und Überwachung erfolgt. Im Extremfall ist es unmöglich, herauszufinden, was tatsächlich passiert ist, wenn ein Vorfall auftritt (ob sicherheitsrelevant oder nicht), wenn nur wenige oder gar keine Protokolle vorliegen. Auf der anderen Seite kann die Protokollierung zu vieler Daten zu Datenschutzproblemen führen, die dann zu Problemen mit den Aufsichtsbehörden führen können. Lesen Sie unseren Leitfaden für bewährte Verfahren zur Vermeidung einer unzureichenden Protokollierung und Überwachung.

Consulter les directives

Utilisation de composants présentant des failles de sécurité connues

{
„Abhängigkeiten“: {
„foo“: „1,0,0-2,9999,9999",
„bar“: „>=1.0.2 <2.1.2"
}
}

Die meisten Anwendungen verwenden große Mengen an Komponenten von Drittanbietern. Diese Komponenten bieten alles, von Logging über Templating bis hin zum Datenbankzugriff und mehr. Dies erleichtert die Softwareentwicklung erheblich und spart viel Zeit. Sie werden aber auch von Menschen gemacht, was bedeutet, dass einige unweigerlich Sicherheitslücken enthalten. Lesen Sie die Richtlinie, um mehr zu erfahren.

Consulter les directives

Injection SQL

importiere mysql.connector
db = mysql.connector.connect
#Bad -Praxis. Vermeide das! Das ist nur zum Lernen.
(host="localhost „, user="newuser „, passwd="pass „, db="sample „)
cur = db.cursor ()
name = raw_input ('Name eingeben: ')
cur.execute („SELECT * FROM Sample_DATA WHERE Name = '%s';“% name) für Zeile in cur.fetchall (): print (row)
db.schließen ()

SQL Injection (SQLi) injiziert Code in SQL-Anweisungen, um eine Anwendung aufzurufen und wichtige Informationen von ihnen zu sammeln. Es handelt sich um eine Sicherheitslücke im Internet. Es ist die gebräuchlichste Hacking-Technik, bei der die Datenbank manipuliert und wichtige Informationen daraus extrahiert werden.

Consulter les directives

Mauvaise configuration de la sécurité

Viele Frameworks verfügen auch über eine Reihe von Endpunkten, die aktiviert werden können, sodass die Anwendung überwacht werden kann, unabhängig davon, ob sich diese in einer Produktions- oder Test-/Entwicklungsumgebung befindet. Diese können beinhalten:

Metriken (Prometheus)
Logs
Informationen zur Umgebung
Pfad-/URL-Zuordnungen

Sicherheitsfehlkonfiguration ist so etwas wie ein Überbegriff, der häufig auftretende Sicherheitslücken abdeckt, die eher auf die Konfigurationseinstellungen einer Anwendung als auf schlechten Code zurückzuführen sind. Es handelt sich um ein weitreichendes Thema, das stark von Faktoren wie Ihrem Technologie-Stack abhängt. Oft scheint die Behebung dieser Probleme einfach zu sein, wie das Ändern einer Konfigurationsdatei oder sogar einer einzelnen Codezeile, aber die Auswirkungen und Folgen dieser Sicherheitslücken können schwerwiegend sein. Lesen Sie unsere Richtlinie, um mehr über diese Sicherheitsanfälligkeit zu erfahren und zu erfahren, wie Sie sie beheben können.

Consulter les directives

Falsification des requêtes côté serveur

ts
lass url = request.params.url;

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

render.export () zurückgeben;

Sicherheitslücken durch serverseitige Anforderungsfälschung treten auf, wenn ein Benutzer eine Anwendung veranlassen kann, HTTP-Anfragen an eine vom Angreifer bestimmte Domain zu stellen. Wenn eine Anwendung Zugriff auf private/interne Netzwerke hat, kann ein Angreifer die Anwendung auch veranlassen, Anfragen an interne Server zu stellen. Wir werden uns das anhand einiger Beispiele genauer ansehen, um besser zu verstehen, wie es in dieser Richtlinie in Aktion aussieht.

Consulter les directives

Speicherung von Passwörtern

Caractéristique Hachage cryptographique Hachage du mot de passe Vitesse Très rapide Intentionnellement lent Facteur de travail ajustable Non Oui

Wenn Ihre Anwendung Benutzer authentifiziert, wird sie wahrscheinlich auch mit Passwörtern umgehen. Der Umgang mit Benutzerkennwörtern ist eine wirklich große Sache, und der angemessene Umgang mit ihnen ist noch wichtiger. Es ist schwer, sich ein schlimmeres Szenario vorzustellen, als wenn eine Anwendung angegriffen wird und Benutzerkennwörter für alle sichtbar im Internet durchgesickert sind. Wie können Passwörter sicher und gemäß den besten Praktiken gespeichert werden? Schauen wir uns ein paar Möglichkeiten an.

Consulter les directives

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>

Massenzuweisungen sind eine Sicherheitslücke, bei der API-Endpunkte nicht einschränken, welche Eigenschaften des zugehörigen Objekts von einem Benutzer geändert werden können. Diese Sicherheitsanfälligkeit kann auftreten, wenn eine Bibliothek/ein Framework verwendet wird, das die automatische Bindung von HTTP-Parametern an ein Modell ermöglicht, das dann ohne Überprüfung verwendet wird. Die Verwendung der automatischen Bindung von einer Anfrage an ein Objekt kann manchmal äußerst hilfreich sein, kann aber auch zu Sicherheitsproblemen führen, wenn das Modell Eigenschaften hat, auf die der Benutzer nicht zugreifen kann. Lesen Sie die Richtlinie für weitere Informationen.

Consulter les directives

Fehlkonfiguration der Sicherheitseinstellungen — XXE detailliert

xml
<? xml-Version = „1.0"? >
<! DOCTYPE Äußeres Element [
<! ] >
<outerElement>&Externe Entität;</outerElement>

Bei der Schwachstellenklasse „XML eXternal Entities“ (XXE) handelt es sich um eine Sicherheitsfehlkonfiguration, an der XML-Parser beteiligt sind. Der XML-Standard beinhaltet Möglichkeiten, auf „Entitäten“ wie Dateien und URLs zu verweisen. Es ist oft die Standardeinstellung, dass Parser externe Entitäten vollständig auflösen, was bedeutet, dass XML-Dokumente zur Offenlegung von Dateien und anderen vertraulichen Informationen für potenzielle Angreifer führen können. Lesen Sie die vollständige Richtlinie für weitere Informationen.

Consulter les directives

Injektion — Pfaddurchquerung

Pseudo-
lass BaseFolder = „/var/www/api/documents/“;
let path = BaseFolder + request.params.filename;

gib file.read (Pfad) zurück;

Path Traversal ist eine weitere ziemlich häufige Art von Injektionsanfälligkeit. Sie treten in der Regel auf, wenn durch die Erstellung einer URI (sei es für eine URL, einen Dateipfad oder etwas anderes) nicht ordnungsgemäß sichergestellt wird, dass der vollständig aufgelöste Pfad nicht außerhalb des Stammverzeichnisses des vorgesehenen Pfads zeigt. Die Auswirkungen einer Sicherheitslücke durch Pfaddurchquerung hängen stark vom Kontext ab, in dem die Traversierung stattfindet, und von der Art der Absicherung, die insgesamt vorgenommen wurde. Lesen Sie die Richtlinie, um mehr zu erfahren.

Consulter les directives

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

Consulter les directives

Injektion - XSS

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

Cross-Site Scripting, auch bekannt als XSS, ist eine weitere Art von Injection-Schwachstelle, die zur Auswertung eines vom Angreifer gesteuerten Skripts im Browser eines anderen Benutzers führt. XSS kann auch als HTML/JavaScript-Injection-Schwachstelle betrachtet werden. Schauen wir uns an, auf welche XSS-Typen Sie stoßen können.

Consulter les directives

Injektion 101

Parmi les types d'injection les plus courants, citons :

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

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

Consulter les directives

Datei hochladen

öffentliche Zeichenfolge uploadProfilePicture (formFile uploadedFile)
{
//Generieren Sie den Pfad zum Speichern der hochgeladenen Datei unter
var-Pfad = $“. /uploads/avatare/ {request.user.ID}/{uploadedFile.filename}“;

//Speichere die Datei
var LocalFile = file.openWrite (Pfad);
Lokaldatei.write (hochgeladene Datei.readToEnd ());
Lokaldatei.flush ();
Lokaldatei.close ();

//Aktualisiere das Profilbild
userProfile.updateUserProfilePicture (request.User, Pfad)

Rückweg;
}

Es kommt sehr häufig vor, dass Anwendungen irgendwann Benutzern erlauben müssen, eine Datei (entweder zur Verwendung oder nur zur Speicherung) irgendwo in der Anwendung hochzuladen. Es scheint zwar einfach zu sein, aber die Art und Weise, wie diese Funktion implementiert wird, kann aufgrund der potenziellen Risiken, die mit der Handhabung von Datei-Uploads verbunden sind, ziemlich wichtig sein. Lesen Sie die Richtlinie für weitere Informationen.

Consulter les directives

Befehlsinjektion

let ip = request.params.IPAddress;

system („ping" + ip);

Schauen wir uns Command Injection selbst an. Wir werden uns hauptsächlich auf einige verschiedene Beispiele konzentrieren, damit es einfacher ist, zu sehen, wie es in Aktion aussieht. Zur kleinen Auffrischung: Command Injection-Schwachstellen treten auf, wenn Benutzereingaben einen Teil eines Betriebssystembefehls verwenden. Lesen Sie die Richtlinie für weitere Informationen.

Consulter les directives