AWS - RDS Privesc
RDS - 关系数据库服务
有关 RDS 的更多信息,请查看:
AWS - Relational Database (RDS) Enumrds:ModifyDBInstance
rds:ModifyDBInstance
拥有该权限的攻击者可以修改主用户的密码,并登录到数据库中:
你需要能够联系数据库(它们通常只能从内部网络访问)。
潜在影响: 在数据库中查找敏感信息。
rds-db:connect
根据文档,具有此权限的用户可以连接到DB实例。
滥用RDS角色IAM权限
Postgresql (Aurora)
如果运行**SELECT datname FROM pg_database;
你发现一个名为rdsadmin
的数据库,你就知道你在一个AWS postgresql数据库**中。
首先,你可以检查这个数据库是否被用来访问任何其他AWS服务。你可以通过查看已安装的扩展来检查:
如果你发现类似 aws_s3
的内容,你可以假设这个数据库对 S3 有 某种访问权限(还有其他扩展,如 aws_ml
和 aws_lambda
)。
此外,如果你有权限运行 aws rds describe-db-clusters
,你可以在 AssociatedRoles
字段中看到 集群是否附加了任何 IAM 角色。如果有,你可以假设该数据库 已准备好访问其他 AWS 服务。基于 角色的名称(或者如果你能获取角色的 权限),你可以 猜测 数据库还有哪些额外的访问权限。
现在,要 读取桶内的文件,你需要知道完整路径。你可以用以下命令读取:
如果你有原始AWS凭证,你也可以用它们来访问S3数据:
Postgresql 不需要更改任何参数组变量即可访问S3。
Mysql (Aurora)
在mysql中,如果运行查询 SELECT User, Host FROM mysql.user;
并且有一个名为 rdsadmin
的用户,可以假设你在一个 AWS RDS mysql db 中。
在mysql中运行 show variables;
,如果变量如 aws_default_s3_role
、aurora_load_from_s3_role
、aurora_select_into_s3_role
有值,可以假设数据库已准备好访问S3数据。
此外,如果你有权限运行 aws rds describe-db-clusters
,你可以检查集群是否有任何 关联角色,这通常意味着可以访问AWS服务。
现在,要 读取桶内的文件,你需要知道完整路径。你可以用以下命令读取:
rds:AddRoleToDBCluster
, iam:PassRole
rds:AddRoleToDBCluster
, iam:PassRole
具有 rds:AddRoleToDBCluster
和 iam:PassRole
权限的攻击者可以将指定角色添加到现有 RDS 实例。这可能允许攻击者访问敏感数据或修改实例中的数据。
潜在影响: 访问敏感数据或未经授权修改RDS实例中的数据。 注意,一些数据库需要额外的配置,例如Mysql,需要在参数组中指定角色ARN。
rds:CreateDBInstance
rds:CreateDBInstance
仅凭此权限,攻击者可以在已经存在并附有IAM角色的集群内创建一个新实例。他无法更改主用户密码,但他可能能够将新数据库实例暴露给互联网:
rds:CreateDBInstance
, iam:PassRole
rds:CreateDBInstance
, iam:PassRole
TODO: 测试
具有 rds:CreateDBInstance
和 iam:PassRole
权限的攻击者可以创建一个附加了指定角色的新 RDS 实例。攻击者随后可能访问敏感数据或修改实例中的数据。
要附加的角色/实例配置文件的一些要求(来自这里):
配置文件必须存在于您的账户中。
配置文件必须具有 Amazon EC2 有权限承担的 IAM 角色。
实例配置文件名称和关联的 IAM 角色名称必须以前缀
AWSRDSCustom
开头。
潜在影响: 访问敏感数据或未经授权修改RDS实例中的数据。
rds:AddRoleToDBInstance
, iam:PassRole
rds:AddRoleToDBInstance
, iam:PassRole
具有rds:AddRoleToDBInstance
和iam:PassRole
权限的攻击者可以将指定角色添加到现有RDS实例。这可能允许攻击者访问敏感数据或修改实例中的数据。
DB实例必须在集群之外
潜在影响: 访问敏感数据或对RDS实例中的数据进行未经授权的修改。
Last updated