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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/righettod/poc-graphql
Analisi delle VulnerabilitàSfruttamento di Applicazioni WebTest di Sicurezza delle APIPenetration TestingApprendimento e FormazioneLab e PraticaArchived
GitHubrighettod/poc-graphql

poc-graphql

Ricerca su GraphQL dal punto di vista di AppSec.

Vedi Repository
41859153 anni faRevisionato da Kitploit

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 →
Condividi

Costruisci e distribuisci l'immagine

Indice dei contenuti

  • Indice dei contenuti
  • Ricerca su GraphQL
    • Obiettivo
    • Laboratori
    • Distribuzione su Docker
    • Vulnerabilità di sicurezza
      • Autorizzazione
        • Problema
        • Raccomandazione
      • Iniezione
        • Problema
        • Raccomandazione
      • Esaurimento delle risorse
        • Problema
        • Raccomandazione
      • Esposizione di dati privati
        • Problema
        • Raccomandazione
      • Esposizione di informazioni tecniche in caso di errore imprevisto
        • Problema
        • Raccomandazione
      • Riferimento diretto non sicuro a oggetti
        • Problema
      • Esposizione dell'API al contesto client sbagliato
        • Problema
          • Abilitazione predefinita dell'endpoint WebSocket per le sottoscrizioni
          • Abilitazione predefinita del Cross-Origin Resource Sharing
        • Raccomandazione
    • Query di scoperta
    • Riferimenti utilizzati
      • GraphQL
      • Laboratori

Ricerca su GraphQL

Obiettivo

  1. Studiare cos'è GraphQL.
  2. Analizzare l'uso di GraphQL dal punto di vista AppSec (attacchi e difese).
  3. Identificare potenziali vulnerabilità su cui possono essere sfruttati attacchi.

Laboratori

È stato creato un laboratorio per studiare i diversi problemi, questo assume il contesto di un veterinario che gestisce la cura dei cani.

Il laboratorio è stato sviluppato utilizzando IntelliJ IDEA Community Edition.

I domini utilizzati sono i seguenti:```text

Define in host file

127.0.0.1 localhost 127.0.0.1 domain1.local 127.0.0.1 domain2.local

Ecco le condizioni e le assunzioni del laboratorio:

* Un veterinario può essere associato a 0 o N cani.
* Un cane può essere associato a 0 o 1 veterinario.
* Un veterinario possiede una proprietà chiamata **Popularity** presente nel sistema di archiviazione (database) ma non deve essere accessibile dal client GraphQL perché è un'informazione sensibile.
* Il punto di vista del consumo dati di GraphQL è il veterinario. Le informazioni sui cani sono pubbliche.
* Il laboratorio è esplicitamente un'applicazione vulnerabile in cui sono state implementate diverse vulnerabilità identificate tramite il marker `[VULN]` nei commenti.
* Per quanto riguarda l'autenticazione, è stato implementato un finto servizio di terze parti (tramite un servlet) che restituisce un token JWT contenente il nome del veterinario nel token.

Una volta avviato tramite la configurazione di lancio presente nel progetto o dal comando `mvn spring-boot:run`, il laboratorio è disponibile su questi endpoint:

* [GraphiQL](http://localhost:8080/graphiql)
* [GraphQL](http://localhost:8080/graphql)

Per impacchettare l'applicazione come file jar portatile, usa il comando `mvn package` (un file jar precompilato è disponibile [qui](https://github.com/righettod/poc-graphql/releases)):
* Il file jar verrà creato nella cartella *target* e si chiamerà *graphql-poc.jar*.
* Usa il comando `java -jar graphql-poc.jar` per eseguire l'applicazione.

## Distribuzione su Docker

> L'immagine viene pubblicata ogni giorno su [DockerHub](https://hub.docker.com/r/righettod/poc-graphql)

Per distribuire l'applicazione in un container docker segui i passaggi:

1. Assicurati di avere `docker` installato.
2. `git clone` del repository.
3. Entra nella directory clonata.
4. Costruisci l'immagine docker usando `docker build -t poc-graphql .`
5. Ora un'immagine chiamata **poc-graphql:latest** è stata creata sulla tua macchina.
6. Esegui il container usando `docker run -p 8080:8080 poc-graphql:latest`
7. Accedi al laboratorio usando i seguenti endpoint:
   * [GraphiQL](http://localhost:8080/graphiql)
   * [GraphQL](http://localhost:8080/graphql)

## Debolezze di sicurezza

### Autorizzazione

*controllo di accesso non funzionante*

[CWE-285](https://cwe.mitre.org/data/definitions/285.html)

#### Problema

Poiché GraphQL si basa su un singolo endpoint a cui vengono inviate tutte le richieste e poiché l'autorizzazione è al di fuori dello scopo della specifica (nessuna funzionalità integrata).

Spetta all'applicazione implementare una logica di autorizzazione.

Nel mio laboratorio ho una vulnerabilità su questo punto perché la verifica del token di accesso non verifica che il token appartenga al veterinario passato in **veterinaryId**

**Esempio:**

Chiedo un token di accesso per **Dr Julien** che ha l'identificatore **3** nell'archivio inviando questa richiesta GraphQL:```javascript
query getAccessToken {
  auth(veterinaryName: "Julien")
}

Ricevo il token di accesso nella seguente risposta GraphQL:```javascript { "data": { "auth": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJwb2MiLCJzdWIiOiJKdWxpZW4iLCJpc3MiOiJBdXRoU3lzdGVtIiwiZXhwIjoxNTQ2NDQyOTAyfQ.H9A-vXRsiivFGShtdhiR3N2lSDDx-sNqbbJxMRNnExI" } }

Invia una richiesta GraphQL alla query `myInfo(...)` usando il token di accesso ottenuto MA specifico l'identificatore **2** che è quello di **Dr Benoit**:```javascript
query brokenAccessControl {
  myInfo(accessToken:"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJwb2MiLCJzdWIiOiJKdWxpZW4iLCJpc3MiOiJBdXRoU3lzdGVtIiwiZXhwIjoxNTQ2NDQyOTAyfQ.H9A-vXRsiivFGShtdhiR3N2lSDDx-sNqbbJxMRNnExI", veterinaryId: 2){
    id, name, dogs {
      name
    }
  }
}

Ricevo nella risposta GraphQL l'elenco dei Cani associati a Dr Benoit:```javascript { "data": { "myInfo": { "id": 2, "name": "Benoit", "dogs": [ { "name": "Babou" }, { "name": "Baboune" }, { "name": "Babylon" }, ...

#### Reco

Con GraphQL siamo passati da una matrice di autorizzazione basata su `Role x Feature` a una sicurezza a livello di dati basata su `Role x Data`, perché esiste un unico endpoint. L'identità e i ruoli dell'utente devono essere passati al livello superiore incaricato di acquisire i dati (o di agire su di essi) per applicare una verifica utilizzando l'identità dell'utente prima di acquisire i dati.

### Iniezione

[CWE-20](https://cwe.mitre.org/data/definitions/20.html) / [CWE-116](https://cwe.mitre.org/data/definitions/116.html)

#### Problema

A seconda di come le informazioni dalla richiesta GraphQL (query/mutation/subscription) vengono utilizzate dal server GraphQL per agire sui datastore, esiste la possibilità di iniezione.

Nei miei laboratori ho una vulnerabilità su questo punto riguardante SQLi nella query `dogs(namePrefix: String, limit: Int = 500): [Dog!]` perché il parametro **namePrefix** viene utilizzato nella concatenazione di stringhe per costruire una query SQL.

**Esempio:**
Scarica lo strumento