5439 - Pentesting Redshift

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Información básica

Este puerto es usado por Amazon Redshift (AWS managed data warehouse). El protocolo de Redshift es una versión ligeramente modificada del protocolo PostgreSQL, por lo que la mayoría de las herramientas cliente de Postgres funcionan (psql, psycopg2, JDBC/ODBC) pero los requisitos de auth y TLS difieren.

Para más información consulte:

AWS - Redshift Enum - HackTricks Cloud

Enumeración y Conectividad

  • Default port: 5439/TCP (customizable). Serverless workgroups also default to 5439.
  • Public endpoint pattern: <clusterid>.<random>.<region>.redshift.amazonaws.com (public) or .redshift.amazonaws.com.cn (China). Serverless: <workgroup>.<random>.<region>.redshift-serverless.amazonaws.com.
  • TLS: Redshift requiere TLS 1.2+ y cifrados con perfect-forward-secrecy. Clientes antiguos pueden fallar; fuerce TLS moderno:
psql "host=<endpoint> port=5439 user=awsuser dbname=dev sslmode=require"
# or using redshift-psql wrapper
  • Parameter group require_ssl controla si se permite plaintext. Los nuevos clusters/workgroups usan default.redshift-2.0 con require_ssl=true, por lo que los ataques downgrade/mitm son más difíciles.

Enumeración rápida con psql

# basic banner/version
psql "host=<endpoint> user=<u> dbname=dev" -c 'select version();'
# list dbs, users, privileges
\l
\du
select * from pg_user;
select * from svv_redshift_sessions;

Los errores diferencian contraseña incorrecta vs usuario inexistente → potencial username enumeration durante brute force.

Authentication paths to test

  • Contraseña de la base de datos para el usuario master (a menudo llamado awsuser) o usuarios DB creados.
  • IAM auth tokens: genera credenciales de corta duración y conéctate vía libpq/JDBC/ODBC usando sslmode=require y authMech=IAM o plugin_name=com.amazon.redshift.plugin.OktaCredentialsProvider. Abusar de credenciales/roles IAM robados con permiso equivalente tipo rds-db:connect para Redshift.
aws redshift get-cluster-credentials --cluster-identifier <id> \
--db-user pentest --db-name dev --duration-seconds 900
psql "host=<endpoint> user=pentest password=<token> dbname=dev sslmode=require"
  • IAM Identity Center / SAML / Azure AD plugins: JDBC plugin_name puede levantar un servidor web local para SSO; la callback de loopback capturada puede leak la aserción SAML o credenciales temporales.

Common misconfigurations (network)

  • Cluster marcado PubliclyAccessible=true con SG de acceso amplio (0.0.0.0/0) expone una superficie tipo Postgres para brute force o explotación SQLi.
  • Puerto por defecto 5439 más SG por defecto permiten descubrimiento fácil (Shodan/Censys). Cambiar el puerto es una oscuridad menor pero a veces se pasa por alto en las listas de hardening.
  • No enhanced VPC routing → COPY/UNLOAD salen por Internet público; pueden abusarse para exfil cuando el atacante controla el bucket/endpoint S3.

Attack notes

  • Si el login tiene éxito, Redshift carece de superuser en serverless; en clusters provisioned el usuario master tiene amplios derechos incluyendo crear UDFs (Python), esquema externo a Spectrum, COPY desde el S3 del atacante, y UNLOAD para exfiltrar datos.
  • Revisa el cluster parameter group para max_concurrency_scaling_clusters, require_ssl, enable_user_activity_logging – si el logging está deshabilitado ayuda al sigilo.
  • Los workgroups serverless siguen accesibles vía TCP; misma superficie de ataque SQL que los clusters provisioned.
  • Client-side metadata SQLi (Dec 2024): JDBC 2.1.0.31, Python connector 2.1.4 and ODBC 2.1.5.0 construyen consultas de metadata con entrada de usuario sin entrecomillar en getSchemas/getTables/getColumns (CVE-2024-12744/5/6). Si una app permite a atacantes controlar los argumentos catalog o pattern, puedes inyectar SQL arbitrario que se ejecuta con el DB user usado por el connector.
# exploit vulnerable python connector 2.1.4 via metadata API
import redshift_connector
conn = redshift_connector.connect(host='<endpoint>', database='dev', user='lowpriv', password='pw')
cur = conn.cursor()
# injection in table_pattern leaks data from pg_tables
cur.get_tables(table_schema='public', table_name_pattern="%' UNION SELECT usename,passwd FROM pg_user--")
  • UDF execution model change: Python UDFs dejan de funcionar el 30 de junio de 2026; solo Lambda UDFs permitidos después. Impacto ofensivo: los clusters provisioned legacy aún ejecutan Python UDFs para ejecución de código in-cluster (sin FS/red). Lambda UDFs mueven el código a Lambda donde el role IAM puede alcanzar Internet/endpoints VPC para SSRF/pivot pero sin acceso directo al filesystem del cluster. Buscar clusters antiguos con Python UDFs habilitados aún puede dar primitivas RCE.

Recent security changes (offense impact)

  • Public access disabled by default en nuevos clusters/snapshots (cambio 10 Jan, 2025). Los legacy pueden seguir siendo públicos.
  • Encryption at rest + enforced TLS by default significa que el sniffing/MITM es más difícil; se necesitan credenciales válidas o SSRF hacia la ruta VPC.
  • Serverless VPCE rollout change (Jun 27, 2025): los endpoints de workgroup se crean en hasta 3 AZs al momento de la creación. Las herramientas de descubrimiento deberían enumerar todos los nombres DNS de VPCE de workgroup por AZ para encontrar IPs alcanzables.

References

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks