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


漏洞简介

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

影响版本

低于 3.0.12 20241106

fofa语法

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

漏洞分析

直接看 com.sbr.isomp.protocol.controller.session.SessionController 的实现方式

从上图可以看到要进入此方法的路径是 /protocol/session

ssh

然后继续看下面的实现

当 protocol=ssh 时,尝试从请求参数中获取 keyPath(私钥文件的路径)。如果路径存在且当前不是 SSH Daemon 模式(sshd 参数为 false):

  1. 文件读取与类型检查:它尝试读取用户提供的 keyPath 指向的文件内容。
  2. 格式转换(如果需要):如果读取到的私钥内容不包含 PEM 格式的标识符(RSA PRIVATE KEY 或 DSA PRIVATE KEY),代码会尝试使用 ssh-keygen 命令行工具对该私钥文件进行格式转换,将其转换为 PEM 格式。
  3. 命令行执行:在格式转换过程中,它将用户提供的 keypassword 参数(如果存在)直接拼接到 ssh-keygen 的命令行参数中执行。
  4. 会话存储:无论是否发生异常,私钥文件的内容和私钥密码(keypassword)最终都会被读取并存储到会话对象中。

命令注入的关键点在于用户提供的 keyPath 和 keypassword 两个参数在未经过任何严格的沙盒或转义处理的情况下,直接拼接进了 ShellExecutor.service().exe() 执行的系统命令字符串中。

攻击者可以通过在这些参数中注入分号或管道符等,造成任意命令注入漏洞,执行任意的操作系统命令。

x11

同样的问题也出现在当 protocol=x11 时,

首先尝试从 resolution 参数中解析出期望的会话宽度和高度,如果该参数为空,则使用默认值 1024x768。随后,它调用 ShellExecutor 执行一个 Bash 脚本 (/usr/local/bin/sh/x11vnc.sh),并传入解析出的宽度、高度以及用户提供的 hostname 和 port 参数作为脚本的命令行参数。脚本执行结果会被记录并解析,如果成功,它会将脚本返回的新端口号更新到会话中。

命令注入漏洞的关键在于处理用户提供的 hostname 和 port 参数,以及间接控制的 resolution 参数(如果解析失败或被恶意构造),都未经任何安全处理或转义,直接拼接到了 bash 命令的末尾。攻击者可以通过在 hostname 或 port 参数中注入 shell 元字符(如 ;、|、&),在执行 /usr/local/bin/sh/x11vnc.sh 脚本的同时,执行任意的附加系统命令,从而实现远程代码执行。

漏洞复现

POC

ssh

POST /isomp-protocol/protocol/session HTTP/1.1
Host: osm.mrxn.net
Content-Type: application/x-www-form-urlencoded

protocol=ssh&keyPath=/etc/group&sshd=1&keypassword=RCE_POC

获取到命令执行的结果

x11

POST /isomp-protocol/protocol/session HTTP/1.1
Host: osm.mrxn.net
Content-Type: application/x-www-form-urlencoded

protocol=x11&port=1337&hostname=RCE_POC

获取到命令执行的结果(两个参数hostname和port均存在同样的命令注入漏洞)

参考


手机扫码阅读

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

日本和中国会直接开战吗?

评 论