5439 - Pentesting Redshift

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Базова інформація

Цей порт використовується Amazon Redshift (кероване AWS сховище даних). Redshift wire protocol — це трохи змінений протокол PostgreSQL, тому більшість Postgres клієнтських інструментів працюють (psql, psycopg2, JDBC/ODBC), але auth та вимоги до TLS відрізняються.

Для додаткової інформації див.:

AWS - Redshift Enum - HackTricks Cloud

Перерахування та підключення

  • Порт за замовчуванням: 5439/TCP (можна налаштувати). Serverless workgroups також за замовчуванням використовують 5439.
  • Шаблон публічного endpoint: <clusterid>.<random>.<region>.redshift.amazonaws.com (public) або .redshift.amazonaws.com.cn (Китай). Serverless: <workgroup>.<random>.<region>.redshift-serverless.amazonaws.com.
  • TLS: Redshift вимагає TLS 1.2+ та шифри з perfect-forward-secrecy. Старі клієнти можуть не працювати; примусьте використання сучасного TLS:
psql "host=<endpoint> port=5439 user=awsuser dbname=dev sslmode=require"
# or using redshift-psql wrapper
  • Parameter group require_ssl контролює, чи дозволено plaintext. Нові кластери/workgroups використовують default.redshift-2.0 з require_ssl=true, тому downgrade/mitm складніше.

Швидке перерахування з 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;

Помилки відрізняють неправильний пароль від відсутнього користувача → потенційна username enumeration під час brute force.

Authentication paths to test

  • Database password для master-користувача (часто з ім’ям awsuser) або створених DB користувачів.
  • IAM auth tokens: згенеруйте короткоживучі credentials та підключіться через libpq/JDBC/ODBC використовуючи sslmode=require та authMech=IAM або plugin_name=com.amazon.redshift.plugin.OktaCredentialsProvider. Зловживання вкраденими IAM creds/roles з еквівалентним дозволом типу rds-db:connect для 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 може запустити локальний webserver для SSO; перехоплений loopback callback може leak SAML assertion або тимчасові creds.

Common misconfigurations (network)

  • Кластер позначено PubliclyAccessible=true з відкритою SG (0.0.0.0/0), що відкриває Postgres-like поверхню для brute force або SQLi.
  • Default port 5439 плюс стандартний SG дозволяє просте виявлення (Shodan/Censys). Зміна порту — невелике затемнення, але іноді пропускається в чеклістах hardening.
  • No enhanced VPC routing → COPY/UNLOAD йдуть через публічний Інтернет; можуть бути зловживані для exfil коли attacker контролює S3 bucket/endpoint.

Attack notes

  • Якщо вхід вдається, Redshift не має superuser в serverless; у provisioned кластерах master user має широкі права, включно зі створенням UDFs (Python), external schema to Spectrum, COPY з attacker S3, та UNLOAD для exfil даних.
  • Перевірте cluster parameter group на max_concurrency_scaling_clusters, require_ssl, enable_user_activity_logging – вимкнене логування полегшує приховування.
  • Serverless workgroups досі доступні по TCP; та сама SQL attack surface як у provisioned clusters.
  • Client-side metadata SQLi (Dec 2024): JDBC 2.1.0.31, Python connector 2.1.4 та ODBC 2.1.5.0 формують metadata запити з неквотованим ввідом користувача в getSchemas/getTables/getColumns (CVE-2024-12744/5/6). Якщо додаток дозволяє зловмиснику контролювати аргументи catalog або pattern, ви можете інжектувати довільний SQL, який виконається від імені DB user, що використовує 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 припинять працювати 30 June 2026; після цього дозволені лише Lambda UDFs. Офензивний вплив: застарілі provisioned кластери все ще виконують Python UDFs для in-cluster code exec (без FS/network). Lambda UDFs переміщують код у Lambda, де IAM роль може досягати Internet/VPC endpoints для SSRF/pivot, але без прямого доступу до файлової системи кластера. Полювання на старі кластери з увімкненими Python UDFs все ще може дати RCE примітиви.

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 means sniffing/mitm harder; need valid credentials or SSRF into VPC path.
  • Serverless VPCE rollout change (Jun 27, 2025): workgroup endpoints created in up to 3 AZs at creation time. Discovery tools should enumerate all workgroup VPCE DNS names per AZ to find reachable IPs.

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks