Fortinet FortiSIEM硬编码SSH密钥

iso60001  1808天前

22.png

供应商: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
tcp0  0 0.0.0.0:22      0.0.0.0:*
LISTEN  38593/sshd
tcp0  0 0.0.0.0:19999   0.0.0.0:*
LISTEN  38615/sshd
tcp0  0 :::22           :::*
 LISTEN  38593/sshd
tcp0  0 :::19999        :::*
 LISTEN  38615/sshd

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

Supervisor# ps aux |grep 38615
root     38615      0.0  0.0  66288   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/QQ==
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/QQ==

这意味着任何能接触到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
...

感谢你的阅读!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://seclists.org/fulldisclosure/2020/Jan/10

最新评论

LubyRuffy  :  牛**,居然选择不回复。
1808天前 回复
昵称
邮箱
提交评论