Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
codeql-workshop-cve-2021-21380 — Un workshop CodeQL che copre CVE-2021-21380 | Kitploit
Strumenti/GitHubGitHub/rvermeulen/codeql-workshop-cve-2021-21380
Analisi StaticaAnalisi delle VulnerabilitàAnalisi del CodiceSicurezza WebApprendimento e FormazioneLab e Pratica
GitHubrvermeulen/codeql-workshop-cve-2021-21380

codeql-workshop-cve-2021-21380

Un workshop CodeQL che copre CVE-2021-21380

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Vedi Repository
125141 anno faNon ancora revisionato
Condividi

Workshop di CodeQL per Java: trovare una SQL injection

In questo workshop useremo il ragionamento sintattico e semantico per trovare una SQL injection nel componente di valutazione della piattaforma XWiki documentata da CVE-2021-21380.

Sommario

  • Workshop di CodeQL per Java: trovare una SQL injection
    • Sommario
    • Prerequisiti e istruzioni di configurazione
      • Sul tuo computer locale
        • Installazione
        • Passaggi di configurazione
    • Workshop
      • Cosa imparerai
      • Definizione del problema
      • Esercizi
        • Esercizio 1
        • Intermezzo 1
        • Esercizio 2
        • Esercizio 3
        • Intermezzo 2
        • Esercizio 4
        • Esercizio 5
        • Intermezzo 3
        • Esercizio 6
        • Esercizio 7
        • Esercizio 8
    • E adesso?

Prerequisiti e istruzioni di configurazione

Sul tuo computer locale

Ti preghiamo di completare questa sezione prima del workshop, se possibile.

Installazione

  • Installa Visual Studio Code.

  • Installa l'estensione CodeQL per Visual Studio Code.

  • Non è necessario installare il CodeQL CLI: l'estensione lo gestirà per te.

  • Clona questo repository:

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

Passaggi di configurazione

  • Importa il database CodeQL da utilizzare nel workshop:
    • Fai clic con il pulsante destro del mouse sul file xwiki-platform-CVE-2021-21380.zip nella vista Explorer e seleziona il comando CodeQL: Set Current Database.
    • Il database apparirà nella vista dei database CodeQL raggiungibile dall'icona QL sulla barra delle attività.
  • Installa le dipendenze per analizzare il codice Java e per eseguire i test degli esercizi e delle soluzioni.
    • Dalla Command Palette (Cmd/Ctrl+Shift+P), cerca ed esegui il comando CodeQL: Install Pack Dependencies.
    • Nella parte superiore della finestra di VS Code, digita github nella casella per filtrare l'elenco.
    • Seleziona la casella accanto a cve-2021-21380-exercises, cve-2021-21380-exercises-tests, cve-2021-21380-solutions e cve-2021-21380-solutions-tests.
    • Fai clic su OK/Invio.
  • Verifica che tutto funzioni come previsto eseguendo i test per le soluzioni.
    • Apri la vista testing e premi Run Tests (l'icona di riproduzione viene mostrata quando passi il mouse sulle soluzioni) accanto all'elemento delle soluzioni nell'albero.

Workshop

Cosa imparerai

Il workshop è suddiviso in diversi esercizi che introducono il supporto del linguaggio QL per Java e termina con una query finale per trovare la SQL injection nota. In questi esercizi imparerai:

  • Come ragionare sulle informazioni sintattiche.
  • Come ragionare sulle informazioni semantiche.
  • Esplorare il supporto del linguaggio QL per Java per esprimere pattern.
  • Esplorare come riutilizzare ed estendere la modellazione esistente.
  • Usare più blocchi funzionali per comporre la query finale.

Definizione del problema

In questo workshop cercheremo delle vulnerabilità di SQL injection note nel componente API di valutazione della XWiki Platform. Tali vulnerabilità possono verificarsi nelle applicazioni quando informazioni controllate da un utente esterno raggiungono codice applicativo che costruisce in modo non sicuro una query SQL e la esegue.

La SQL injection nota discussa in questo workshop è recensita in GHSA-79rg-7mv3-jrr5 nel GitHub Advisory Database. Per trovare la SQL injection, e le possibili varianti, ci occuperemo dei seguenti sottoproblemi:

  • Identificare la fonte delle informazioni non fidate e modellarla in QL.
  • Identificare il sink, il metodo che esegue query SQL, e modellarlo in QL.
  • Combinare le soluzioni precedenti per determinare se esiste un flusso di informazioni tra la sorgente e il sink utilizzando il taint tracking.

Esercizi

Nei primi esercizi ragioneremo sulle informazioni sintattiche, usando l'Abstract Syntax Tree (AST), per identificare:

  • il metodo descritto nell'avviso di sicurezza per comprendere la vulnerabilità
  • i parametri che contengono dati non fidati, le nostre sorgenti
  • le chiamate a metodi che accettano istruzioni SQL, i nostri sink

Esercizio 1

Trova tutti i metodi con nome getAverageRating e il loro tipo dichiarante nel programma completando la query exercise1.ql

Suggerimenti
  • Il modulo java fornisce una classe Method per ragionare sui metodi di un programma.
  • La classe Method fornisce i predicati membro getName e hasName per ragionare sul nome di un metodo.
  • La classe Method fornisce il membro getDeclaringType per ragionare sul tipo che dichiara il metodo.

Una soluzione si trova nella query exercise1.ql

Intermezzo 1

Una soluzione all'esercizio 1 restituisce un elenco di metodi. Alcuni di essi sono definiti in un'interfaccia chiamata RatingsManager, altri sono definiti nelle classi AbstractRatingsManager e RatingsScriptService.

Dalle informazioni restituite dalla query e dalla documentazione dei componenti XWiki possiamo dedurre che:

  • XWiki utilizza un design orientato ai componenti per consentire estensioni e personalizzazioni.
  • Il metodo vulnerabile fa parte di un componente.
  • Un componente è costituito da un'interfaccia, annotata con Role, e da un'implementazione annotata con Component.
  • Un componente che estende ScriptService viene reso accessibile alle pagine wiki tramite scripting.

Esercizio 2

Trova tutte le classi annotate con l'annotazione Component completando la query exercise2.ql. Nota che il nome completo del tipo dell'annotazione è org.xwiki.component.annotation.Component.

Suggerimenti
  • Il /tipo di dominio della classe/, l'intersezione dei suoi super tipi, può essere accesso usando la parola chiave this nel /predicato caratteristico/.
  • La classe Class fornisce un metodo getAnAnnotation per ottenere le annotazioni associate.
  • La classe Annotation fornisce il predicato membro getType per ragionare sul suo tipo.
  • La classe Type fornisce i predicati membro getName e hasName per ragionare sul nome di un tipo.
  • La classe RefType, che rappresenta classi e interfacce, fornisce i predicati membro getQualifiedName e hasQualifiedName per ragionare sul nome completo del reftype.

Una soluzione si trova nella query exercise2.ql

Esercizio 3

Trova tutti i componenti che implementano l'interfaccia ScriptService completando la query excercise3.ql

Suggerimenti
Scarica lo strumento