漏洞简介
深信服运维安全管理系统 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):
- 文件读取与类型检查:它尝试读取用户提供的
keyPath指向的文件内容。 - 格式转换(如果需要):如果读取到的私钥内容不包含 PEM 格式的标识符(
RSA PRIVATE KEY或DSA PRIVATE KEY),代码会尝试使用ssh-keygen命令行工具对该私钥文件进行格式转换,将其转换为 PEM 格式。 - 命令行执行:在格式转换过程中,它将用户提供的
keypassword参数(如果存在)直接拼接到ssh-keygen的命令行参数中执行。 - 会话存储:无论是否发生异常,私钥文件的内容和私钥密码(
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均存在同样的命令注入漏洞)

