Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass — Prueba de concepto que demuestra el bypass de inyección SQL CVE-2026-17351 en el Asistente de IA de pgAdmin 4 mediante el diferencial del lexer sqlparse/PostgreSQL, incluida la entrega indirecta de inyección de prompts. | Kitploit
Herramientas/GitHubGitHub/hunt-benito/pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónSeguridad de IASeguridad de Bases de Datos
GitHubhunt-benito/pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

pgadmin-ai-assistant-sql-injection-cve-2026-17351-lexer-differential-bypass

Prueba de concepto que demuestra el bypass de inyección SQL CVE-2026-17351 en el Asistente de IA de pgAdmin 4 mediante el diferencial del lexer sqlparse/PostgreSQL, incluida la entrega indirecta de inyección de prompts.

Ver Repositorio
hace 20 díasAún no revisado

CVE-2026-17351 — Bypass de solo lectura del Asistente de IA de pgAdmin 4 mediante diferencia de lexer

PoC para CVE-2026-17351, un bypass crítico (CVSS 9.0) de inyección SQL en el Asistente de IA de pgAdmin 4.

Resumen de la vulnerabilidad

Las versiones de pgAdmin 4 desde la 9.13 hasta la 9.16 utilizan la librería sqlparse de Python para validar que las consultas SQL generadas por LLM sean sentencias únicas y de solo lectura. Con standard_conforming_strings = on en PostgreSQL (el valor predeterminado desde PostgreSQL 9.1), sqlparse y PostgreSQL no coinciden en cómo se manejan las barras invertidas dentro de los literales de cadena. Esto permite a un atacante crear un payload que supera la validación de sqlparse como un único SELECT, pero que se ejecuta como cuatro sentencias en PostgreSQL, incluido un COMMIT que finaliza la transacción de solo lectura y las sentencias de escritura posteriores.

Payload

root@kitploit:~
SELECT '\';COMMIT;CREATE TABLE pwn(x int);SELECT 1 --'
  • sqlparse ve un único SELECT con un literal de cadena grande → la validación se supera
  • PostgreSQL ve: SELECT '\' + COMMIT + CREATE TABLE pwn(x int) + SELECT 1 --'

Entrega

El payload se entrega mediante inyección indirecta de prompt: el atacante lo introduce dentro de un objeto de base de datos (comentario de columna, valor de fila, definición de vista) que el Asistente de IA lee. Cuando un usuario legítimo hace una pregunta, el LLM lee los datos envenenados y los emite como una llamada a la herramienta execute_sql_query.

Archivos

ArchivoDescripción
poc.pyDemuestra la diferencia de lexer: la validación de sqlparse se supera, el protocolo de consulta simple ejecuta varias sentencias, el protocolo de consulta extendido lo bloquea
prompt_injection_demo.pySimula la cadena de ataque completa: payload plantado como comentario de columna → el LLM simulado lo lee → la validación se supera → ejecución

Requisitos

root@kitploit:~
pip install psycopg[binary] sqlparse

También necesitarás una instancia de PostgreSQL en ejecución (14+):

root@kitploit:~
docker run -d --name pg-poc \
    -e POSTGRES_PASSWORD=secret \
    -e POSTGRES_DB=testdb \
    -p 5433:5432 \
    postgres:18

Uso

root@kitploit:~
# Main PoC — lexer differential demonstration
python3 poc.py

# Prompt injection delivery demo
python3 prompt_injection_demo.py

# Custom connection parameters
python3 poc.py --host 10.0.0.5 --port 5432 --user postgres --password mypw

La solución (pgAdmin 9.17)

La solución fuerza el protocolo de consulta extendido de psycopg3 al:

  1. Establecer conn.prepare_threshold = 0 en la conexión dedicada del LLM
  2. Pasar prepare=True a cursor.execute()

Esto convierte al propio paso Parse de PostgreSQL en la autoridad en cuanto a los límites de las sentencias: rechaza estructuralmente el texto de múltiples sentencias, sin importar cómo lo clasifique cualquier lexer del lado del cliente.

Referencias

  • CVE: https://nvd.nist.gov/vuln/detail/CVE-2026-17351
  • Issue de GitHub: https://github.com/pgadmin-org/pgadmin4/issues/10192
  • Commit de la solución: https://github.com/pgadmin-org/pgadmin4/commit/ef76102bcd1cdb544eb9b4ef18d3382f22b76752
  • CVE original (CVE-2026-12045): https://nvd.nist.gov/vuln/detail/CVE-2026-12045
  • Reportero: Kai Aizen (SnailSploit)

Descargo de responsabilidad

Este PoC es únicamente para fines educativos y de pruebas autorizadas.

Descargar herramienta