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
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
最新评论