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
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é. | Kitploit
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
il y a 10 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 tampon de tas dans pgcrypto de PostgreSQL

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

Résumé

ChampDétail
CVECVE-2026-2005
TypeDébordement de tampon de tas
Composantcontrib/pgcrypto/pgp-pubdec.c — pgp_parse_pubenc_sesskey()
ImpactRCE 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évr. 2026)
Architectureaarch64 (ARM64) — les décalages de tas et la disposition des MBuf sont spécifiques à l'arch/glibc

Démarrage rapide

root@kitploit:~
# Build and start PostgreSQL 18.1 (vulnerable)
docker compose up -d --build

# Wait for healthy
docker compose logs -f postgres
# Ctrl+C when you see "database system is ready to accept connections"

# Install node deps
npm install

# Run the full RCE exploit chain
node exploit.js --cmd "id"

# With verbose output
node exploit.js --cmd "id" --verbose

# Execute a custom command
node exploit.js --cmd "whoami"

Chaîne d'exploitation (7 étapes)

root@kitploit:~
Stage 1: Heap pointer leak
  └─ Corrupt mdst chunk header → parse pfree() error message

Stage 2: Arbitrary read (multi-offset scan)
  └─ Overwrite mdst->data → scan memory near leaked pointer

Stage 3: Pointer candidate collection
  └─ Scan heap dump for non-heap addresses

Stage 4: PIE base resolution
  └─ Read /proc/<pid>/maps via Docker exec (100% reliable)

Stage 5: (skipped — PIE base is known from maps)

Stage 6: Arbitrary write
  └─ Forge msrc + mdst MBufs → overwrite CurrentUserId → 10 (superuser)

Stage 7: Command execution
  └─ COPY FROM PROGRAM → arbitrary OS command as postgres user

Structure des fichiers

root@kitploit:~
CVE-2026-2005/
├── Dockerfile              # Builds PostgreSQL 18.1 from source
├── docker-compose.yml      # PostgreSQL service with auto-restart
├── init.sh                 # Entrypoint — initdb + listen config
├── README.md               # This file
└── poc/
    ├── package.json        # Node.js dependencies (pg)
    ├── exploit.js          # Full 7-stage RCE exploit (Node.js)
    ├── verify.sh           # Shell-based quick verification
    └── test-pgcrypto.sql   # SQL-only test of pgcrypto loading

Compilation 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, 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 l'option --gdb)

Détails de la vulnérabilité

Le bug se trouve dans pgp_parse_pubenc_sesskey() de contrib/pgcrypto/pgp-pubdec.c. Lors de l'analyse d'un paquet OpenPGP de clé de session chiffrée par clé publique (balise 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 le MPI par RSA dans le tampon
  4. Lit la longueur de la clé de session dans les données déchiffrées sans validation des limites
  5. Copie (memcpy) les données de la clé de session dans un tampon de taille fixe en se basant 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 les données adjacentes du tas, conduisant à l'exécution de code arbitraire.

Détail de la chaîne d'exploitation

  1. Fuite de pointeur tas — Corrompre l'en-tête du bloc malloc ; analyser le message d'erreur de pfree() pour extraire l'adresse tas de 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 à la fois 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 du 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 d'amorçage), exécuter COPY FROM PROGRAM pour lancer des commandes OS arbitraires.

Options de la ligne de commande

Remarques

  • L'extension pgcrypto est de confiance — tout utilisateur disposant du privilège CREATE (non superutilisateur) peut l'installer, ce qui rend cette faille exploitable avec de faibles privilèges.
  • La build Docker inclut --enable-debug pour faciliter le débogage avec gdb.
  • Les décalages du 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.
  • Le conteneur utilise restart: always pour se rétablir automatiquement des crashs backend lors des tests de candidats PIE.
  • La base PIE est résolue via /proc/<pid>/maps à l'intérieur du conteneur Docker — aucun readelf n'est nécessaire sur l'hôte.
  • La table des symboles pour le décalage de CurrentUserId est lue via docker exec readelf.

Références

  • Avis de sécurité PostgreSQL
  • Analyse technique ZeroDay.Cloud
  • Entrée NVD
Télécharger l’outil
OptionDéfautDescription
--cmdidCommande OS à exécuter après exploitation réussie
--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 de scan du tas depuis le pointeur divulgué
--verbosedésactivéActiver les sorties de débogage verbeuses
--gdbdésactivéAttacher GDB via tmux au point de débordement