Kubernetes 持续交付工具 Argo CD 中存在一个重大安全漏洞。利用此漏洞可以让攻击者在目标实例上获得权限的提升,包括管理员访问权限。
受影响版本
- 1.4.0 到 2.1.14
- 2.2.8
- 2.3.3
影响
伦敦技术公司 G-Research 的研究员 Mark Pim 和 Andrzej Hajto 发现的在 Argo CD 中发现了一个严重漏洞,该漏洞允许未经身份验证的用户通过随请求发送特制的 JSON Web 令牌 (JWT)来冒充任何 Argo CD 用户或角色,包括用户。要利用此漏洞,必须启用对 Argo CD 实例的匿名访问
https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/#anonymous-access
在默认的 Argo CD 安装中,匿名访问被禁用。要了解您的实例中是否启用了匿名访问,请参阅下面此公告的解决方法部分。
可以利用该漏洞冒充任何用户或角色,包括内置admin
帐户,无论该帐户是启用还是禁用。此外,攻击者不需要 Argo CD 实例上的帐户即可利用此功能。
如果启用对实例的匿名访问,攻击者可以:
- 提升他们的权限,有效地让他们在集群上获得与 Argo CD 实例相同的权限,在默认安装中是集群管理员。这将允许攻击者创建、操作和删除集群上的任何资源。
- 通过部署具有提升权限的恶意工作负载来泄露数据,从而绕过任何由 Argo CD API 强制执行的敏感数据编辑
我们强烈建议所有 Argo CD 用户尽快更新到包含此补丁的版本,无论您的实例中是否启用了匿名访问。
请参阅下面的版本列表,其中包含针对此漏洞的修复以及针对此问题存在的任何可能的解决方法。
补丁
此漏洞的补丁已在以下 Argo CD 版本中发布:
- v2.3.4
- v2.2.9
- v2.1.15
解决方法
禁用匿名访问
如果您无法快速升级到修补版本,我们强烈建议您禁用匿名访问(如果已启用)。
要了解您的 Argo CD 实例是否启用了匿名访问,您可以查询argocd-cm
Argo CD 的安装命名空间中的 ConfigMap。以下示例假设您已将 Argo CD 安装到argocd
命名空间:
$ kubectl get -n argocd cm argocd-cm -o jsonpath='{.data.users.anonymous.enabled}'
如果此命令的结果为空或"false"
,则不启用对该实例的匿名访问。如果结果是"true"
,则您的实例很容易受到攻击。
要禁用匿名访问,请修补argocd-cm
ConfigMap 以删除该users.anonymous.enabled
字段或将此字段设置为"false"
.
要将字段设置为"false"
:
$ kubectl patch -n argocd cm argocd-cm --type=json -p='[{"op":"add", "path":"/data/users.anonymous.enabled", "value":"false"}]'
或者您可以完全删除该字段,从而禁用匿名访问,因为默认值为false
:
$ kubectl patch -n argocd cm argocd-cm --type=json -p='[{"op":"remove", "path":"/data/users.anonymous.enabled"}]'
- END -