CVE-2026-17566
pgAdmin 4 : RCE via divergence d'échappement par antislash dans la protection de requête Import/Export Data (défense incomplète, faille sœur de CVE-2025-13780)
- Publié
- 31 juil. 2026
- Mise à jour
- 1 août 2026
- Attribution de CNA
- PostgreSQL
- Preuve observée
- 4 août 2026
CVSS primaire
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XFaible · 30 prochains jours
- Percentile
- 51,1 %
- Date du modèle
- 15 oct. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
L'outil Import/Export Data de pgAdmin 4 construit une ligne de commande psql \copy (...) en interpolant une requête SQL fournie par l'utilisateur dans un modèle Jinja et en transmettant la ligne rendue à psql via --command. Pour empêcher un attaquant de s'échapper du wrapper (...), create_import_export_job() (route POST /import_export/job/<sid>, protégée uniquement par la permission ordinaire et couramment accordée tools_import_export_data) validait la requête avec un vérificateur d'équilibre des parenthèses écrit à la main, _is_query_parens_balanced(). Ce vérificateur traitait toujours une barre oblique inversée avant une apostrophe (\') comme échappant l'apostrophe, c'est-à-dire comme si standard_conforming_strings était désactivé. PostgreSQL a standard_conforming_strings activé par défaut depuis la version 9.1 (2010), la valeur par défaut sur toutes les versions de PostgreSQL actuellement prises en charge par pgAdmin 4 (13-18) ; avec cette valeur par défaut, le tokenizer \copy de psql traite \ comme un caractère ordinaire, de sorte qu'une apostrophe immédiatement après ferme le littéral de chaîne. Une requête telle que SELECT 'a\') TO PROGRAM 'echo pwned' x' a donc été acceptée comme « équilibrée » par le vérificateur de pgAdmin (qui croyait que le ) était encore à l'intérieur de la chaîne), tandis que psql, exécuté via la ligne de commande réellement rendue, ferme la chaîne à ce stade et traite le ) suivant comme la fin de la sous-requête \copy (...), exposant une clause TO PROGRAM '<commande>' choisie par l'attaquant que psql exécute via popen() — indépendamment d'une erreur de syntaxe ultérieure sur la même ligne. Il s'agit de la même classe de bug que CVE-2025-12762/CVE-2025-13780 (RCE via méta-commande psql/injection COPY lors de la restauration d'un dump au format PLAIN), atteint via une défense écrite indépendamment dans un module différent (Import/Export Data plutôt que Restore) qui présentait son propre bug logique distinct (sémantique d'échappement de barre oblique inversée inversée plutôt qu'ancre regex contournée par BOM). Le correctif rejette catégoriquement toute barre oblique inversée à l'intérieur d'une chaîne entre apostrophes dans la requête, plutôt que de choisir l'une des deux interprétations possibles de psql. Ce choix est délibérément prudent : étant donné que l'interprétation correcte de \ dépend du paramètre standard_conforming_strings du serveur cible, que le vérificateur ne peut pas connaître de manière fiable au moment de la validation, refuser la requête est plus sûr que de deviner. Ce problème affecte pgAdmin 4 : depuis l'introduction de _is_query_parens_balanced() avant la version 9.18.
Sources
pgAdmin 4 Import/Export RCE (CVE-2026-17566) PoC - Injection TO PROGRAM via divergence d'échappement par antislash
Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.