Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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
CVE-2026-26198-analysis — Analisi approfondita di una vulnerabilità critica di SQL injection nell'ORM Ormar di Python — riproduzione, correzione e test | Kitploit
Strumenti/GitHubGitHub/sergicortesabadia/cve-2026-26198-analysis
Analisi delle VulnerabilitàAnalisi del CodiceSicurezza WebPaper e RicercaApprendimento e Formazione
GitHubsergicortesabadia/cve-2026-26198-analysis

CVE-2026-26198-analysis

Analisi approfondita di una vulnerabilità critica di SQL injection nell'ORM Ormar di Python — riproduzione, correzione e test

Vedi Repository
5 mesi faNon ancora revisionato

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

CVE-2026-26198 — SQL Injection in Ormar ORM

Un'analisi approfondita di una vulnerabilità critica (CVSS 9.8) di SQL injection in un ORM asincrono Python, con riproduzione, analisi e correzione.

La Vulnerabilità

Ormar è un popolare mini-ORM asincrono per Python, comunemente usato con FastAPI e Starlette. Le versioni 0.9.9 fino alla 0.22.0 contengono una vulnerabilità di SQL injection nei metodi aggregati min() e max().

La causa principale è un bug di "implementazione parziale": mentre sum() e avg() verificano che il parametro della colonna si riferisca a un campo numerico effettivo, min() e max() saltano completamente questo controllo e passano l'input dell'utente direttamente a sqlalchemy.text() — un sink SQL grezzo.

Un attaccante può iniettare una subquery come parametro "colonna":

root@kitploit:~
# Utilizzo previsto
await Item.objects.max("price")  # → SELECT max(price) FROM items

# Payload di attacco
await Item.objects.max("(SELECT password FROM users LIMIT 1)")
# → SELECT max((SELECT password FROM users LIMIT 1)) FROM items
# Restituisce la password dell'amministratore!

Dati Rapidi

AttributoValore
ID CVECVE-2026-26198
Punteggio CVSS9.8 (Critico)
CWECWE-89: SQL Injection
Versioni affetteormar 0.9.9 – 0.22.0
Corretto inormar 0.23.0
Pubblicato24 febbraio 2026
Autenticazione richiesta?Nessuna — non autenticato

Struttura del Progetto

root@kitploit:~
├── README.md               ← Sei qui
├── vulnerable_app.py       ← App FastAPI minimale con il pattern vulnerabile
├── exploit_demo.py         ← PoC sicuro che mostra l'iniezione in azione
├── patched_app.py          ← La versione corretta con validazione dell'input
├── test_vulnerability.py   ← Test che dimostrano che la vuln esiste e che la fix funziona
├── requirements.txt
└── analysis/
    └── root_cause.md       ← Analisi dettagliata a livello di codice del bug

Esecuzione della Demo

root@kitploit:~
git clone https://github.com/YOUR_USERNAME/CVE-2026-26198-analysis.git
cd CVE-2026-26198-analysis
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Esegui i test (nessun DB esterno necessario — usa SQLite)
python -m pytest test_vulnerability.py -v

# Esegui la demo interattiva dell'exploit
python exploit_demo.py

La Correzione

La correzione valida che il parametro della colonna corrisponda a un campo effettivo del modello prima che raggiunga sqlalchemy.text(). Questo viene fatto tramite un approccio a whitelist: sono consentiti solo i nomi di colonna che esistono nelle definizioni dei campi del modello.

Vedi patched_app.py per l'implementazione e analysis/root_cause.md per l'analisi completa.

Punti Chiave

  1. Gli ORM non sono una protezione automatica contro le SQL injection. Se un metodo ORM accetta una stringa grezza e la passa a una clausola text, è pericoloso quanto scrivere SQL grezzo.
  2. La validazione parziale è peggiore della mancanza di validazione. Il fatto che sum()/avg() fossero validati ma min()/max() no ha creato un falso senso di sicurezza.
  3. Usa la whitelist, non la blacklist. La correzione valida rispetto a nomi di colonna noti e sicuri piuttosto che cercare di filtrare pattern dannosi.

Riferimenti

  • Avviso GitHub (GHSA-xxh2-68g9-8jqr)
  • Voce NVD
  • Repository Ormar

Licenza

MIT

Scarica lo strumento