Fortinet FortiSIEM硬编码SSH密钥

供应商:Fortinet

产品:FortiSIEM

测试版本:5.2.5以及5.2.6,旧版本还未确认,但很可能受影响。

CVE:目前CVE号码还在确认中。

总结

FortiSIEM针对用户tunneluser提供了一个硬编码的SSH公钥,所有软件都相同。通过此密钥,攻击者可以以该用户身份登录FortiSIEM Supervisor。该未加密的密钥同时也存储在FortiSIEM镜像中。虽然用户的shell仅限于运行/opt/phoenix/phscripts/bin/tunnelshell脚本,但不影响SSH身份验证。

时间线

2019年12月2日:向Fortinet PSIRT发送包含漏洞详细信息的电子邮件。

2019年12月3日:PSIRT自动回复邮件。

2019年12月23日:向PSIRT发送了一封关于漏洞确认的提醒邮件。

2020年1月3日:漏洞公开。

30天,没有任何Fortinet的人员和我联系。如果我在1月2日之前收到漏洞确认书,那么就还有另外60天来解决这个漏洞(不会发布漏洞详情)。但很可惜我并没有收到这样的答复,所以现在漏洞公开。

解决方法

删除Supervisor中的/home/tunneluser/.ssh/authorized_keys文件

supervisor# echo "" > /home/tunneluser/.ssh/authorized_keys OR supervisor# rm /home/tunneluser/.ssh/authorized_keys

另外,确保有防火墙挡在应用前面,只有有限端口可以对外公开。

细节

FortiSIEM Supervisor有两个不同的sshd系统服务:一个是在标准的22端口,另一个在19999端口:

supervisor# netstat -lnp |grep sshd tcp00 0.0.0.0:220.0.0.0:* LISTEN38593/sshd tcp00 0.0.0.0:19999 0.0.0.0:* LISTEN38615/sshd tcp00 :::22 :::* LISTEN38593/sshd tcp00 :::19999:::* LISTEN38615/sshd

其中19999的tcp端口所开放的sshd服务的配置文件如下:

Supervisor# ps aux |grep 38615 root 386150.00.066288 512 ?Ss Sep25 0:00 /usr/sbin/sshd -p 19999 -f /etc/ssh/sshd_config.tunneluser

而在配置文件中查找相关用户时,发现它只为tunneluser服务:

supervisor# grep -R tunneluser /etc/ssh/ /etc/ssh/sshd_config.tunneluser:AllowUsers tunneluser@* /etc/ssh/sshd_config.tunneluser:DenyUsers "!tunneluser@*,*"

请注意,22端口sshd服务的配置文件并没有拒绝tunneluser的登录,所以理论上你也可以通过22端口进行授权。

从passwd文件你也可以发现一些端倪:

supervisor# grep tunneluser /etc/passwd: tunneluser:x:501:502::/home/tunneluser:/opt/phoenix/phscripts/bin/tunnelshell

Supervisor可让tunneluser用户通过SSH key进行连接,我也和其他使用者确认过,这个key在所有应用中都是一样的。

supervisor# cat /home/tunneluser/.ssh/authorized_keys permitopen="127.0.0.1:2" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArtFWNhmJqezB0NC5NAbWGZBDWHpGsB+d0+bI46mIJMVyfLhuIa5s5iZF30ehRxu0tTILp40EDe5S9VkdlOymJFvA3dUTlfuhwKvV1hUHXe/5ARTC8AX+1QeZDGnzUKBp/64in6STyaG/1KZj0U1rKUTH42SJWjTrvE/vHqilrcY9SmPx498mPzR8CvlJKYCm1WvweIUoqiVnIqIAQrZqTR+0ea1LksQ6YP4PqpTZpe495bIhk+f2pwPI6PU2q0X61Ae99kqo07whoktb3NdNSI9y/yWJleKdw/FaR0Cj7Ilqg3KyR8evHQoOTHpWiTRAPOpo82qfbx6W0ykrRjo/== builder@ao-build

相对应的SSH私钥在所有节点(Supervisor、Collector等等)中都存在,位于/opt/phoenix/id_rsa.tunneluser文件。通过以下命令你可以验证两个密钥的匹配性:

# ssh-keygen-y -f /opt/phoenix/id_rsa.tunneluser ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArtFWNhmJqezB0NC5NAbWGZBDWHpGsB+d0+bI46mIJMVyfLhuIa5s5iZF30ehRxu0tTILp40EDe5S9VkdlOymJFvA3dUTlfuhwKvV1hUHXe/5ARTC8AX+1QeZDGnzUKBp/64in6STyaG/1KZj0U1rKUTH42SJWjTrvE/vHqilrcY9SmPx498mPzR8CvlJKYCm1WvweIUoqiVnIqIAQrZqTR+0ea1LksQ6YP4PqpTZpe495bIhk+f2pwPI6PU2q0X61Ae99kqo07whoktb3NdNSI9y/yWJleKdw/FaR0Cj7Ilqg3KyR8evHQoOTHpWiTRAPOpo82qfbx6W0ykrRjo/==

这意味着任何能接触到FortiSIEM镜像的人都能知道公钥和私钥,通过19999端口以tunneluser身份登录FortiSIEM Supervisor。虽然被限制在/opt/phoenix/phsc ripts/bin/tunnelshell脚本,但一旦被绕过,就能获得完整的服务器访问权。

虽然Supervisor上也有iptables和ip6tables,但并没有有效限制:

supervisor# iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all--anywhere anywhere ... supervisor bin]# ip6tables -L Chain INPUT (policy ACCEPT) target prot opt source destination ...

感谢你的阅读!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场

来源:Fortinet FortiSIEM硬编码SSH密钥

原文:https://seclists.org/fulldisclosure/2020/Jan/10

白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务