目录

1) 引言

Authentik 是一个流行的开源身份提供商,可以自托管。SUSE IT 正在考虑将来在内部使用此软件,因此我们被要求对其安全性进行检查。

我们审查的 Authentik 版本是 2024.8.3。除了本报告中的发现之外,我们还发现了无需身份验证即可访问 SSL 私钥的可能性,但这 在上游独立发现并同时修复,在我们有机会报告之前。下一个部分讨论的唯一值得 CVE 的发现。第 3 部分提供了一些关于 Authentik 安全性的总体见解。

2) 漏洞详情

MetricsView,可通过 URL “/-/metrics/” 访问,在 authentik/root/monitoring.py:27 中实现了 HTTP Basic Auth。预期的用户名硬编码为 monitor。预期的密码是常量 settings.SECRET_KEY,与 Authentik 设置时生成的 AUTHENTIK_SECRET_KEY 相同。根据文档,它用于 cookie 签名,在早期版本中也用于“唯一用户 ID”。

为了验证密码,实现使用了普通的 Python “==” 字符串比较运算符。该运算符将优化字符串比较,从而很可能可以通过时序攻击来猜测正确的 SECRET_KEY。安全研究一再表明,即使在网络上,时序攻击也是一个现实的危险。

利用此漏洞可能很复杂,但决心坚定的攻击者可能能够开发出成功的方法。我们没有更详细地研究如何利用该问题。

上游发布了 安全公告,并在版本 2024.10.3 和 2024.8.5 中提供了此问题的修复。还可以通过使受影响的 API 端点对远程用户不可访问来采用一种变通方法。

3) 审查摘要

Authentik 是一个大型项目,包含约 10,000 行 Golang 代码和近 100,000 行 Python 代码。它使用各种 Web 框架和一套相当复杂的抽象。以我们有限的资源对这一切进行全面审查是不可能的。因此,我们集中检查了可访问的 REST API 端点,并试图对软件的健壮性有一个总体感觉。

Authentik 中使用的 Web 框架和开发风格产生了相当健壮的 REST API 端点。即使发现问题,上游项目也表明它组织良好,并且能够快速、透明地修复它们。

Authentik 支持的功能数量,包括网络协议、身份验证机制等,非常庞大,导致了难以管理的复杂性。跟踪所有这些功能与客户端和第三方系统的交互是一项挑战。Authentik 还实现了一个复杂的权限框架,包含 500 多个不同的特权来控制对系统的访问。我们建议对这类系统的管理员进行充分培训,以避免因系统配置不当而引入问题。

我们在 Authentik 中确定了一个有点令人担忧的领域是其部署。它仅提供基于 Docker-Compose 或 Kubernetes 的安装。没有官方的裸金属安装支持。最低设置需要四个通过隔离网络连接的容器。一个容器运行 Postgres 数据库,一个容器运行 Redis 内存键值存储,另一个容器运行实际的 Authentik 服务器组件,“Authentik Worker”容器运行 celeryd 任务调度程序。我们查看了容器并注意到以下方面:

  • 两个容器(Postgres 和 Redis)基于 Alpine Linux,另外两个容器(Authentik Server 和 Worker)基于 Debian Linux。
  • 一些容器内的本地安全性未得到充分维护,例如在 Authentik Server 容器中存在全局可访问的 IPC 套接字以及 /dev/shm 中不安全的临时文件权限。这意味着本地安全性仅基于容器隔离。一旦攻击者能够在此容器中运行代码,就几乎没有纵深防御。
  • 文件系统层次结构标准在某些容器中未得到遵守,/ 目录中充斥着专有的 Authentik 目录。例如,一个自定义的 Python 安装程序就放在那里。

因此,一个人不仅必须考虑 Authentik 本身的安全性,还必须考虑至少四个不同的 Linux 容器(运行两种不同的 Linux 发行版)以及涉及的定制 Python 堆栈等的安全性。用户必须依靠 Authentik 上游来妥善维护这些组件的安全性。

提供裸金属安装可以解决这一领域的担忧。现代 Linux 上的单个服务仍然可以受益于隔离功能(例如,通过 systemd 服务单元中的保护设置),而系统包和分发安全性是透明的,并且完全由管理员控制。当然,这可能会使上游开发者的工作变得更加复杂,因为他们不再能完全控制 Authentik 运行的 Linux 环境。

4) 时间线

2024-10-25 我们已将此发现报告给 security@goauthentik.io,并提供协调披露。
2024-10-28 上游回复并确认了该问题。
2024-11-13 上游获得了 CVE,并告知我们他们将在一个星期内发布该问题。
2024-11-21 上游发布了修复程序和 安全公告

5) 参考资料