最后更新于2023年12月27日星期三15:07:52 GMT

在跟进我们的 之前在F5的BIG-IP设备上的工作, Rapid7 found an additional vulnerability in the appliance-mode REST interface; the vulnerability was assigned CVE-2023-22374. 我们于2022年12月6日向F5报告,现按照我们的要求进行披露 漏洞披露策略.
我们发现的具体问题是一个身份验证格式字符串漏洞(cwe - 134)在SOAP接口(iControlPortal.cgi),它以root身份运行,需要管理员登录才能访问. 通过插入格式字符串说明符(例如 %s or %n)转换为特定的GET参数, 攻击者可以使服务读取和写入从堆栈引用的内存地址. 除了作为经过身份验证的管理端点之外, 将公开的内存写入日志(使其成为盲目攻击). 很难影响读和写的具体地址, 这使得这个漏洞在实践中很难被利用(除了使服务崩溃之外). 这有一个CVSS评分为7.5标准模式部署和8.5在器具模式.

产品

这个问题只影响BIG-IP(不影响BIG-IQ),到目前为止还没有修复. 目前已知易受攻击的支援版本有:

  • F5大ip 17.0.0
  • F5大ip 16.1.2.2 - 16.1.3
  • F5大ip 15.1.5.1 - 15.1.8
  • F5大ip 14.1.4.6 - 14.1.5
  • F5大ip 13.1.5

发现者

这个问题是由 罗恩Bowes 的Rapid7. 根据Rapid7的漏洞披露政策进行披露.

剥削

我们披露的问题是一个障眼法 格式字符串漏洞,通过身份验证的攻击者可以在其中插入任意格式的字符串字符(例如 %d, %x, %s, %n)作为查询参数,传递给函数 syslog (),它处理格式字符串说明符. 这并不要求攻击者实际读取syslog条目—解析格式字符串的行为才是有问题的. 这也意味着攻击者不能 内存,除非他们有额外的方法来读取syslog. 通过使用 %s 说明符, 该服务可能会因为分段错误而崩溃(因为它试图将堆栈上的指针作为字符串解引用)。. 使用 %n, 可以将任意数据写入堆栈上找到的任何指针,这取决于堆栈上存在的内容, 这可能被用于远程代码执行.

这个问题发生在 WSDL = 参数中包含以下经过认证的管理URL:

的值 WSDL = 参数写入syslog:

11月29日08:32:25.例子.org soap[4335]: 查询: WSDL = ASM.LoggingProfile

如果攻击者向该参数添加格式字符串字符, 它们将被处理,堆栈中的值可以写入syslog(攻击者无法看到这一点), 所以这实际上是一个盲格式字符串漏洞). 例如,这个URL:

  • http://bigip.example.com/iControl/iControlPortal.cgi?WSDL= ASM.LoggingProfile: % 08年x: % 08年x: % 08年x: % 08年x: % 08年x: % 08年x: % 08年x: % 08年x

展开后,可以写如下 %08x 格式化说明符到堆栈中的值(冒号只是为了可读性):

11月29日08:41:47.例子.org soap[4335]: 查询: WSDL = ASM.LoggingProfile: 0000004 c: 0000004 c: 08年cb31bc: 08年cba210:08cc4954:01000000: ffeaa378: f5aa8000

再一次, 我们应该注意,攻击者无法看到此日志, 因此不能用这个来揭示记忆. 但是,我们可以用a %s 格式说明符,告诉服务尝试从堆栈中呈现字符串. 如果堆栈上的值不是有效的内存地址(例如第一个值,它是 0x0000004c),该进程将因分段错误而崩溃. 我们也可以用the %n 格式说明符将(大多数情况下)任意值写入堆栈上的内存地址.

下面是一个使用的例子 %s 请求中的说明符:

  • http://bigip.example.com/iControl/iControlPortal.cgi?WSDL= ASM.LoggingProfile: % s

如果我们将其发送到服务器(作为经过身份验证的请求),服务将崩溃. 我们可以在服务器进程上附加一个调试器来验证:

[root@bigip:Active:St和alone] config # /tmp/gdb-7.10.1-x64 -q—pid=4335[qh]...) (gdb) contContinuing.
程序接收到SIGSEGV信号,出现分段故障.0xf55e3085 in vfprintf () from /lib/libc.so.6(gdb) bt#0 0xf55e3085 in vfprintf () from /lib/libc.so.6#1 0xf568f21f in __vsyslog_chk () from /lib/libc.so.6#2 0xf568f317 in syslog () from /lib/libc.so.6#3 0x0810cc1f在PortalDispatch: H和leWSDLRequest(char*) ()#4 0x08109f08在iControlPortal::run(int) ()#5 0x0810947f in main ()

实际易受攻击的代码在 PortalDispatch: H和leWSDLRequest in iControlPortal.cgi 是(在反汇编器中):

.text:0810CBF2 loc_810CBF2:                            ; CODE XREF: PortalDispatch: H和leWSDLRequest(char *)+DD↑j.文本:0810CBF2.文本:0810CBF3 pop edi.text:0810CBF4                 push    esi             ; Query string.文本:0810CBF5 push eax.text:0810CBF6                 call    __ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc ; std::operator<<>(std::basic_ostream> &, const char *).文本:0810CBFB pop eax.文本:0810CBFC pop edx.[ebp+var_8C8] [font =宋体].文本:0810CC03 lea edi, [ebp+格式].文本:0810CC09 push eax.文本:0810CC0A推送edi.text:0810CC0B                 call    __ZNKSt15basic_stringbufIcSt11char_traitsIcESaIcEE3strEv ; std::basic_stringbuf,std::allocator>::str(void)
.text:0810CC0B ;   } // starts at 810CBE6.文本:0810CC10 pop eax.text:0810CC11 push dword ptr [ebp+格式].文本:0810CC17 push 6.text:0810CC19 ;   try {.text:0810CC19                 call    _syslog ; <--- Vulnerable call to syslog ().text:0810CC19 ;   } // starts at 810CC19

A 字符串 对象(包含 查询:)将查询字符串附加到其上,然后直接传递给 _syslog (),用于处理格式化字符串字符.

影响

成功的攻击最可能造成的影响是使服务器进程崩溃. 熟练的攻击者可能会开发远程代码执行漏洞, 哪个将以root用户在F5 BIG-IP设备上运行代码.

修复

目前在已发布的BIG-IP软件版本中没有修复此问题. F5已经表示将会提供一个工程修复程序. 应该强调的是,这个问题只能作为易受攻击设备的认证用户来利用. So, 最终用户应该将对管理端口的访问限制为仅受信任的个人(链接的KB提供了一个要绑定的过程) webd 到localhost),这通常是一个好建议.

Rapid7客户

针对CVE-2023-22374的身份验证漏洞检查将于今天(2月1日)发布仅限内容的版本. 因为F5是 热修复补丁政策 这些修补程序是“不保证可用性”的吗,请注意,InsightVM中的漏洞检查不会考虑热修复程序.

时间轴

  • 2022年12月-发现漏洞
  • 2022年12月6日星期二-报告给F5 SIRT
  • 2022年12月7日星期三- F5转发给F5产品工程团队进行分析
  • 2022年12月22日,星期四——F5确认了这个问题,并开始着手修复
  • 2023年1月4日星期三-向CERT/CC报告的问题(vrf# 23-01-TVJZN)
  • 结婚, 1月18日, 2023 - F5提供了一份安全咨询草案, CVSS分数, CVE-2023-22374预约
  • 2023年2月1日,星期三——公开披露 F5的咨询 发表