- 简介(Introduction):Kea DHCP 分发是互联网系统协会(ISC)提供的下一代 DHCP 服务器套件,取代了已达到生命周期终点的传统 ISC DHCP 软件。SUSE 也将在其产品中提供 Kea DHCP,作者对其代码库进行了常规审查,发现了一系列本地安全问题,包括本地权限提升、任意文件覆盖等,并基于Kea 2.6.1 版本撰写了此报告,还介绍了报告的结构和各部分内容。
- Kea 设计概述(Overview of Kea Design):提供了 Kea 涉及组件的简短概述,Kea 为 dhcp4、dhcp6 和 dhcp-ddns 提供三个独立服务,默认有
kea-ctrl-agent
监听在 localhost:8000 的 HTTP REST API,基于 JSON 请求,可由kea-ctrl-agent
处理或转发到控制的服务,各服务通过仅对kea-ctrl-agent
可访问的 UNIX 域套接字监听,默认 REST API 对系统中所有用户无认证访问,许多安装以 root 权限运行服务,Linux 系统还会分配CAP_NET_BIND_SERVICE
能力,默认配置和打包是判断报告中问题可利用性的重要方面。 安全问题(Security Issues):
- 通过
set-config
命令注入钩子库进行本地权限提升(Local Privilege Escalation by Injecting a Hook Library via theset-config
Command):set-config
REST API 命令可完全控制kea-ctrl-agent
及其服务的配置,通过配置不受特权用户控制的钩子库可实现本地权限提升,攻击者可通过放置构造函数在libexploit.so
中,在kea-ctrl-agent
加载库时执行攻击代码,获取 root 权限或控制 Kea 进程及网络权限,还可对其他 Kea 服务进行代码执行。提供了用于重现问题的 Python 脚本kea-hook-lib-exploit.py
。 - 通过
config-write
命令进行任意文件覆盖(Arbitrary File Overwrite viaconfig-write
Command):config-write
REST API 命令可让 Kea 服务将配置写入任意文件路径,通过std::ofstream
以trunc
设置写入,可被攻击者控制配置内容,但受 Kea 限制,若 Kea 服务以 root 权限运行则是本地拒绝服务或本地 root 权限提升漏洞,若以专用服务用户运行则会破坏 Kea 相关文件导致完整性破坏和拒绝服务。 - 将日志文件重定向到任意路径(Redirection of Log Files to Arbitrary Paths):可配置 Kea 服务使用任意新的日志文件路径,如通过特定 JSON 配置让
kea-ctrl-agent
创建/root/bad.log
文件并改变日志级别,可能暴露敏感内部程序状态,还会创建锁文件,这是另一个本地拒绝服务漏洞,类似 3.2 中的问题。 - 在
/tmp
中使用套接字进行服务欺骗(Service Spoofing with Sockets in/tmp
):kea-ctrl-agent
为转发 REST API 请求会尝试连接服务的 UNIX 域套接字,在某些分发中使用公共/tmp
目录,本地非特权用户可在/tmp
中创建套接字进行服务欺骗,拦截请求或诱骗管理员执行危险操作,此攻击类型还影响已配置但未运行的 Kea 服务,/tmp
目录用于 Kea 服务套接字存在问题,本地用户可阻止 Kea 服务启动。 /tmp
中套接字的拒绝服务问题(Denial-of-Service issues with Sockets in/tmp
):与服务欺骗相关,由于 Kea 服务创建的锁文件与套接字名称相关,本地用户可预先创建套接字或锁文件阻止 Kea 服务启动,存在 race 条件,非特权用户可在合法服务之前绑定套接字从而拦截请求。/var/lib/kea/*.cvs
中的世界可读 DHCP 租约文件(World-Readable DHCP Lease Files in/var/lib/kea/*.cvs
):许多检查的分发授予对默认 Kea 内存数据库状态数据的读取访问权限,即/var/lib/kea
中的文件,这导致本地信息泄露,虽不确定 DHCP 租约是否为私有数据,但存在此风险,建议限制对此数据的读取访问,此问题最初为强化建议,后被上游分配 CVE。- 世界可读的 Kea 日志文件(World-Readable Kea Log Files):多数检查的系统中
/var/log/kea
或/var/log/kea*.log
中的 Kea 日志文件是世界可读的,作为强化措施建议限制对此数据的访问,此问题最初为强化建议,后被上游分配 CVE。
- 通过
强化建议(Hardening Suggestions):
- 针对 HTTP Basic Auth 实现的可能定时攻击(Possible Timing Attack against the HTTP Basic Auth Implementation):
kea-ctrl-agent
的 REST API 接口使用 HTTP Basic Auth 机制,验证凭据的代码存在定时攻击弱点,攻击者可通过统计服务报告认证失败的时间来构造有效用户/密码组合,虽kea-ctrl-agent
比较的是 base64 编码的字符串增加了复杂性,但仍可能受到定时攻击,建议为std::unordered_map
提供自定义KeyEqual
模板参数以避免可观察到的时间差异,由于这种定时攻击的复杂性很高,目前不认为是相关安全问题,但仍可能被专门攻击者成功。 - 通过
get-config
命令导致的 API 凭据泄露(API Credentials Leak via ‘get-config’ Command):当 REST API 中的 API 授权启用时,配置中可能包含可用于认证的明文用户名和密码,拥有有效凭据的用户可通过 API 获取其他用户的凭据,从而进行冒充或在凭据被撤销后仍能访问 API,建议用户避免在 Kea 配置中存储明文凭据,而是引用仅对特权用户可访问的磁盘上的凭据文件。
- 针对 HTTP Basic Auth 实现的可能定时攻击(Possible Timing Attack against the HTTP Basic Auth Implementation):
- 漏洞修复(Bugfixes):在初始报告中建议上游限制加载钩子库的路径和写入配置及日志文件的路径,认为未认证的 REST API 存在问题,应默认强制在 REST API 级别进行认证,上游为所有当前支持的 Kea 版本发布了 bugfix 版本,包括 2.4.2、2.6.3 和 2.7.9,修复内容有:许多操作只允许从可信系统目录读取或写入,限制钩子库加载、配置文件写入和日志文件写入路径;默认配置文件强制 REST API 认证;设置日志、状态和套接字目录的权限;将套接字默认放置在
/var/run/kea
;更新文档和示例文件,强化建议部分的修复尚未可用,但上游打算在未来解决。 - 常见 Linux 和 UNIX 系统上 Kea 配置的影响(Affectedness of Kea Configurations on Common Linux and UNIX Systems):Kea 是跨平台项目,各分发以自己的方式集成 Kea,导致影响情况复杂,记录了在多种当前知名 Linux 和 BSD 系统上的默认情况和受影响情况,包括 Arch Linux、Debian Linux、Ubuntu Linux、Fedora Linux、Gentoo Linux、openSUSE Tumbleweed、FreeBSD、NetBSD 和 OpenBSD 等,各系统在 Kea 版本、凭据、套接字目录、日志目录、状态目录和受影响的问题等方面有所不同。
- CVE 分配(CVE Assignments):Kea 上游分配了以下 CVEs,涵盖了报告中发现的多个问题,如 CVE-2025-32801 对应通过注入钩子库进行本地权限提升,CVE-2025-32802 对应多种文件路径处理的安全问题,CVE-2025-32803 对应文件权限导致的信息泄露。
- 时间线(Timeline):记录了发现问题到最终发布的时间线,包括报告发现日期、上游决定接受协调披露和开始工作的日期、分配 CVE 的日期、沟通协调发布日期、预披露漏洞到 distros 邮件列表的日期、共享 bugfix 版本链接的日期以及发布日期等。
- 变更历史(Change History):在 2025-05-30 日添加了在section 6.2)中的额外攻击向量以克服 Debian Linux 上的 AppArmor,以及在section 7)中修复缺失的 3.3 项条目。
- 参考资料(References):提供了 SUSE Bugzilla 审查 Kea 的 bug 链接、ISC Kea 项目页面链接和 ISC GitLab 中详细描述此报告问题的私有 issue 链接。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。