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
Outils/GitHubGitHub/open-flaw/cve-2026-2005
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationPost-ExploitationAnalyse de BinairesSécurité des Bases de DonnéesExploitation de Binaires
GitHubopen-flaw/cve-2026-2005

CVE-2026-2005

Débordement de tampon du tas dans pgcrypto de PostgreSQL : preuve de concept démontrant CVE-2026-2005, exécution de code à distance en tant qu'utilisateur à faibles privilèges et élévation de privilèges jusqu'au superutilisateur via un paquet OpenPGP forgé.

Voir le dépôt
6il y a 20 joursPas 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

CVE-2026-2005 — Débordement de tas (heap buffer overflow) dans pgcrypto de PostgreSQL

Commit cible : 4b324845ba5d24682b9b3708a769f00d160afbd7 (PostgreSQL 18.1 — vulnérable)

Résumé

ChampDétail
CVECVE-2026-2005
TypeDébordement de tas (heap buffer overflow)
Composantcontrib/pgcrypto/pgp-pubdec.c — pgp_parse_pubenc_sesskey()
ImpactExécution de code arbitraire (RCE) en tant qu'utilisateur OS exécutant PostgreSQL
CVSS8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Authentification requiseFaible — tout utilisateur authentifié disposant du privilège CREATE
Versions affectéesPostgreSQL 14.0–14.20, 15.0–15.15, 16.0–16.11, 17.0–17.7, 18.0–18.1
Corrigé dans14.21, 15.16, 16.12, 17.8, 18.2 (12 février 2026)
Architectureaarch64 (ARM64) — les décalages de tas et la disposition MBuf sont spécifiques à l'architecture/glibc

Démarrage rapide

root@kitploit:~
# Construire et démarrer PostgreSQL 18.1 (vulnérable)
docker compose up -d --build

# Attendre que le service soit sain
docker compose logs -f postgres
# Ctrl+C lorsque vous voyez "database system is ready to accept connections"

# Configuration unique : copier le binaire postgres pour l'analyse hors ligne des symboles
docker cp cve-2026-2005-poc:/usr/local/pgsql/bin/postgres ./postgres

# Installer les dépendances Node
npm install

# Exécuter la chaîne d'exploitation RCE complète (SQL pur — aucune interaction Docker)
node exploit.js --cmd "id"

# Avec sortie détaillée
node exploit.js --cmd "id" --verbose

# Exécuter une commande personnalisée
node exploit.js --cmd "whoami"

Chaîne d'exploitation (7 étapes)

root@kitploit:~
Étape 1 : Fuite de pointeur de tas
  └─ Corrompre l'en-tête du chunk mdst → analyser le message d'erreur pfree()

Étape 2 : Lecture arbitraire (analyse multi-fenêtres)
  └─ Écraser mdst->data → analyser la mémoire près du pointeur divulgué

Étape 3 : Collecte de candidats pointeurs
  └─ Analyser les dumps de tas pour des valeurs de 8 octets ressemblant à des pointeurs

Étape 4 : Résolution de la base PIE
  └─ Voter les adresses divulguées contre les décalages de symboles ELF (regroupés
     par décalage de page, hors ligne — symboles analysés depuis la copie locale du binaire)

Étape 5 : Validation PIE
  └─ Lecture arbitraire de CurrentUserId à la base candidate → comparaison avec l'OID de session

Étape 6 : Écriture arbitraire
  └─ Forger les MBuf msrc + mdst → écraser CurrentUserId → 10 (superutilisateur)

Étape 7 : Exécution de commande
  └─ COPY FROM PROGRAM → commande OS arbitraire en tant qu'utilisateur postgres

Structure des fichiers

root@kitploit:~
CVE-2026-2005/
├── Dockerfile              # Construit PostgreSQL 18.1 à partir des sources
├── docker-compose.yml      # Service PostgreSQL avec redémarrage automatique
├── init.sh                 # Point d'entrée — initdb + configuration d'écoute
├── README.md               # Ce fichier
└── poc/
    ├── package.json        # Dépendances Node.js (pg)
    ├── exploit.js          # Exploit RCE complet en 7 étapes (Node.js)
    ├── verify.sh           # Vérification rapide basée sur un script shell
    └── test-pgcrypto.sql   # Test SQL uniquement du chargement de pgcrypto

Construction manuelle (macOS / Linux)

root@kitploit:~
git clone https://github.com/postgres/postgres.git
cd postgres
git checkout 4b324845ba5d24682b9b3708a769f00d160afbd7
./configure \
    --prefix="$HOME/projects/pg/pgsql" \
    --with-libxml \
    --with-libxslt \
    --enable-debug \
    --with-ssl=openssl
make -j$(nproc)
make install-world-bin

Prérequis

  • Docker + Docker Compose (hôte aarch64, par ex. Mac Apple Silicon)
  • Node.js ≥ 18
  • ~2 Go d'espace disque pour la compilation de PostgreSQL
  • La compilation prend ~3–5 minutes au premier lancement
  • tmux (optionnel — nécessaire uniquement avec le drapeau --gdb)

Détails de la vulnérabilité

Le bug se trouve dans pgp_parse_pubenc_sesskey() dans contrib/pgcrypto/pgp-pubdec.c. Lors de l'analyse d'un paquet OpenPGP de clé de session chiffrée par clé publique (tag 1) :

  1. Le code lit la longueur du MPI (entier multi-précision) depuis le paquet
  2. Alloue un tampon basé sur cette longueur
  3. Déchiffre RSA le MPI dans le tampon
  4. Lit la longueur de la clé de session depuis les données déchiffrées sans validation des limites
  5. memcpy copie les données de la clé de session dans un tampon de taille fixe basé sur la longueur non validée

Le memcpy peut écrire au-delà de la limite du tampon de tas, corrompant les métadonnées ou données adjacentes du tas, conduisant à une exécution de code arbitraire.

Détail de la chaîne d'exploitation

  1. Fuite de pointeur de tas — Corrompre l'en-tête du chunk malloc ; analyser le message d'erreur pfree() pour extraire l'adresse de tas mdst->data.
  2. Résolution de la base PIE — Lire /proc/<pid>/maps depuis le conteneur Docker pour trouver l'adresse de chargement du binaire postgres au moment de l'exécution.
  3. Écriture arbitraire — Forger les structures MBuf msrc (source) et mdst (destination) via le débordement de tas. msrc pointe vers un paquet symenc intégré contenant l'OID superutilisateur (10) ; mdst pointe vers CurrentUserId - 4 (en tenant compte de l'en-tête SET_VARSIZE de 4 octets).
  4. Élévation de privilèges — Avec CurrentUserId = 10 (superutilisateur bootstrap), exécuter COPY FROM PROGRAM pour lancer des commandes OS arbitraires.

Options CLI

DrapeauDéfautDescription
--cmdidCommande OS à exécuter après un exploit réussi
--key-size3072Taille de la clé RSA en bits
--host127.0.0.1Hôte PostgreSQL
--port5432Port PostgreSQL
--userpostgresUtilisateur de la base de données
--password(vide)Mot de passe de la base de données
--dbnamepostgresNom de la base de données
--binary./postgresChemin vers le binaire ELF postgres pour les symboles
--scan-offsetautoRemplacer le décalage d'analyse du tas depuis le pointeur divulgué
--verbosedésactivéActiver la sortie de débogage détaillée
--gdbdésactivéAttacher GDB via tmux au point de débordement

Remarques

  • L'extension pgcrypto est fiable — tout utilisateur disposant du privilège CREATE (non superutilisateur) peut l'installer, rendant cette vulnérabilité exploitable avec des privilèges faibles.
  • La construction Docker inclut --enable-debug pour faciliter le débogage avec gdb.
  • Les décalages de tas (SRC_CHUNK_OFFSET=100, DST_CHUNK_OFFSET=172) sont spécifiques à aarch64 + glibc — d'autres architectures/allocateurs nécessitent des décalages différents.
  • La base PIE est résolue à partir des pointeurs de tas divulgués via un vote de décalages de symboles, puis confirmée en lisant CurrentUserId via la même primitive de lecture arbitraire.

Références

  • Avis de sécurité PostgreSQL
  • Analyse technique ZeroDay.Cloud
  • Entrée NVD
Télécharger l’outil