Cloud Native PostgreSQL攻击面分析

本文以Azure为例,简单叙述下在学习云环境下PostgreSQL的过程和几个有趣漏洞
一、Azure PostgreSQL基本情况和攻击面分析
1. Azure PostgreSQL基本情况侦查
ERROR: permission denied for function lo_export
ERROR: permission denied for table pg_largeobject
插件列表
1 | "xml2""1.1""XPath querying and XSLT" |
2. 攻击面分析
可以将攻击面分成三类,分别是PostgreSQL自身漏洞、PostgreSQL功能特性漏洞、PostgreSQL二次开发漏洞。
PostgreSQL自身漏洞
1 参考官方漏洞列表,利用较多的为CVE-2020-25695、CVE-2019-9193等
PostgreSQL功能特性导致漏洞
1 高危函数限制不严格,例如上文中提到的这些;
2 用户角色/权限设计不合理,例如不加限制的授予用户CREATEROLE权限等
PostgreSQL二次开发导致漏洞
1 在云上,CSP需要允许用户某些功能,但是要限制其不安全的操作,这就需要对权限模型进行二次开发,可能造成漏洞;
2 不安全的API也是云上最大的风险之一,注入、糟糕的访问控制等
二、有趣漏洞
1. Azure Database for PostgreSQL漏洞1
Step1. Azure二次开发PostgreSQL,以强化其特权模型并添加新功能,通过寻找二次开发的导致的漏洞,将普通账号提升至特权账号superuser,进而实现命令执行获得宿主容器权限;
Step2. 在服务的内部网络中执行侦察,发现可以通过网络访问子网中的其他客户实例;
Step3. 进一步侦查发现,PostgreSQL 提供了一项独特的功能,允许将数据库数据从一台服务器复制到另一台服务器,从而“复制”数据库。这通常用于备份和故障转移/高可用性方案;
Step4. 从 Certificate Transparency 提要中检索目标的公用名;
Step5. 从 DigiCert 或 DigiCert 中间证书颁发机构购买特制证书;
Step6. 通过解析数据库域名并将其与 Azure 的公共 IP 范围之一匹配来查找目标的 Azure 区域;
Step7. 扫描目标实例的子网并利用漏洞获得读取权限。
2. Azure Database for PostgreSQL漏洞2
Step1. Azure 对 PostgreSQL 引擎进行了一些修改,以便在云中提供 PostgreSQL 即服务;
Step2. Azure PostgreSQL 授予用户CREATEROLE权限,但没有限制角色以防止其被滥用;
Step3.
1 | CREATE USER james CREATEDB IN GROUP |
Step4.
1 | SET ROLE “james”; |
3. GCP Database for PostgreSQL漏洞1
Step1. GCP 对引擎引入的一项修改允许cloudsqlsuperuser角色将表的所有权任意更改为数据库中的任何用户或角色;
Step2. 发现对表执行上述任何命令都会隐式调用具有表所有者权限的索引函数;
Step3.
1 | 创建一个新表。 |
Step4. 权限提升(非常牛逼,建议看原文)
参考:
http://tttang.com/archive/1547/
https://www.postgresql.org/about/newsarchive/security/
https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities
https://staaldraad.github.io/post/2020-12-15-cve-2020-25695-postgresql-privesc/
- Post title:Cloud Native PostgreSQL攻击面分析
- Post author:langu_xyz
- Create time:2022-09-20 21:00:00
- Post link:https://blog.langu.xyz/Cloud Native PostgreSQL攻击面分析/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.