Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
codeql-workshop-cve-2021-21380 — Un atelier CodeQL couvrant CVE-2021-21380 | Kitploit
Outils/GitHubGitHub/rvermeulen/codeql-workshop-cve-2021-21380
Analyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeSécurité WebApprentissage et ÉducationLabs et Pratique
GitHubrvermeulen/codeql-workshop-cve-2021-21380

codeql-workshop-cve-2021-21380

Un atelier CodeQL couvrant CVE-2021-21380

Voir le dépôt
12514il y a 1 anPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Atelier CodeQL pour Java : Trouver une injection SQL

Dans cet atelier, nous utiliserons le raisonnement syntaxique et sémantique pour trouver une injection SQL dans le composant d'évaluation de la plateforme XWiki, documentée par la CVE-2021-21380

Sommaire

  • Atelier CodeQL pour Java : Trouver une injection SQL
    • Sommaire
    • Prérequis et instructions d'installation
      • Sur votre machine locale
        • Installation
        • Étapes d'installation
    • Atelier
      • Apprentissages
      • Énoncé du problème
      • Exercices
        • Exercice 1
        • Intermezzo 1
        • Exercice 2
        • Exercice 3
        • Intermezzo 2
        • Exercice 4
        • Exercice 5
        • Intermezzo 3
        • Exercice 6
        • Exercice 7
        • Exercice 8
    • Et ensuite ?

Prérequis et instructions d'installation

Sur votre machine locale

Veuillez compléter cette section avant l'atelier, si possible.

Installation

  • Installez Visual Studio Code.

  • Installez l'extension CodeQL pour Visual Studio Code.

  • Vous n'avez pas besoin d'installer la CLI CodeQL : l'extension s'en chargera pour vous.

  • Clonez ce dépôt :

    git clone https://github.com/advanced-security/codeql-workshop-cve-2021-21380.git
    

Étapes d'installation

  • Importez la base de données CodeQL à utiliser dans l'atelier :
    • Faites un clic droit sur le fichier xwiki-platform-CVE-2021-21380.zip dans la vue Explorateur et sélectionnez la commande CodeQL: Set Current Database.
    • La base de données apparaîtra dans la vue des bases de données CodeQL accessible depuis l'icône QL dans la barre d'activité.
  • Installez les dépendances pour analyser le code Java et exécuter les tests des exercices et solutions.
    • Depuis la Palette de commandes (Cmd/Ctrl+Shift+P), recherchez et exécutez la commande CodeQL: Install Pack Dependencies.
    • En haut de votre fenêtre VS Code, tapez github dans la boîte pour filtrer la liste.
    • Cochez la case à côté de cve-2021-21380-exercises, cve-2021-21380-exercises-tests, cve-2021-21380-solutions et cve-2021-21380-solutions-tests.
    • Cliquez sur OK/Entrée.
  • Validez que tout fonctionne comme prévu en exécutant les tests des solutions.
    • Ouvrez la vue de test et cliquez sur exécuter les tests (l'icône de lecture apparaît en survolant les solutions) à côté de l'élément solutions dans l'arborescence.

Atelier

Apprentissages

L'atelier est divisé en plusieurs exercices présentant le support du langage QL pour Java et se termine par une requête finale pour trouver l'injection SQL connue. Dans ces exercices, vous apprendrez :

  • Comment raisonner sur les informations syntaxiques.
  • Comment raisonner sur les informations sémantiques.
  • Explorer le support du langage QL pour Java afin d'exprimer des motifs.
  • Explorer comment réutiliser et étendre une modélisation existante.
  • Utiliser plusieurs blocs de construction pour composer la requête finale.

Énoncé du problème

Dans cet atelier, nous rechercherons des vulnérabilités d'injection SQL connues dans le composant API d'évaluation de la plateforme XWiki. De telles vulnérabilités peuvent se produire dans les applications lorsque des informations contrôlées par un utilisateur externe parviennent à un code d'application qui construit et exécute de manière non sécurisée une requête SQL.

L'injection SQL connue discutée dans cet atelier est examinée dans GHSA-79rg-7mv3-jrr5 dans la Base de données d'avis GitHub. Pour trouver l'injection SQL, et les variantes possibles, nous allons résoudre les sous-problèmes suivants :

  • Identifier la source d'informations non fiables et la modéliser en QL.
  • Identifier le puits, la méthode exécutant les requêtes SQL, et le modéliser en QL.
  • Combiner les solutions ci-dessus pour déterminer s'il existe un flux d'informations entre la source et le puits en utilisant le suivi de contamination (taint tracking).

Exercices

Dans les premiers exercices, nous raisonnerons sur les informations syntaxiques, en utilisant l'arbre de syntaxe abstraite (AST), pour identifier :

  • la méthode décrite dans l'avis de sécurité pour comprendre la vulnérabilité
  • les paramètres contenant des données non fiables, nos sources
  • les appels de méthode qui acceptent des instructions SQL, nos puits

Exercice 1

Trouvez toutes les méthodes portant le nom getAverageRating et leur type déclarant dans le programme en complétant la requête exercise1.ql

Indices
  • Le module java fournit une classe Method pour raisonner sur les méthodes d'un programme.
  • La classe Method fournit les prédicats membres getName et hasName pour raisonner sur le nom d'une méthode.
  • La classe Method fournit le membre getDeclaringType pour raisonner sur le type qui déclare la méthode.

Une solution se trouve dans la requête exercise1.ql

Intermezzo 1

Une solution à l'exercice 1 renvoie une liste de méthodes. Certaines sont définies dans une interface appelée RatingsManager et d'autres dans les classes AbstractRatingsManager et RatingsScriptService.

À partir des informations renvoyées par la requête et de la documentation des composants XWiki, nous pouvons déduire que :

  • XWiki utilise une conception orientée composants pour permettre les extensions et personnalisations.
  • La méthode vulnérable fait partie d'un composant.
  • Un composant se compose d'une interface, annotée avec Role, et d'une implémentation annotée avec Component.
  • Un composant qui étend ScriptService est rendu accessible aux pages wiki via les scripts.

Exercice 2

Trouvez toutes les classes annotées avec l'annotation Component en complétant la requête exercise2.ql. Notez que le nom complet du type de l'annotation est org.xwiki.component.annotation.Component.

Indices
  • Le type de domaine de la classe, l'intersection de ses super types, peut être accédé en utilisant le mot-clé this dans le prédicat caractéristique.
  • La classe Class fournit une méthode getAnAnnotation pour obtenir les annotations associées.
  • La classe Annotation fournit le prédicat membre getType pour raisonner sur son type.
  • La classe Type fournit les prédicats membres getName et hasName pour raisonner sur le nom d'un type.
  • La classe RefType, représentant les classes et interfaces, fournit les prédicats membres getQualifiedName et hasQualifiedName pour raisonner sur le nom complet du type de référence.

Une solution se trouve dans la requête exercise2.ql

Exercice 3

Télécharger l’outil