Openssh 最新漏洞及修复指导
一、前言
近期安全扫描发现,OpenSSH(OpenBSD Secure Shell) 9.7p1及之前版本中存在多个漏洞,影响大部分开源版本,如下所示,更多参看版本说明和厂商安全公告:
受影响版本 | 漏洞编号 | 漏洞说明 | 修复版本 |
---|---|---|---|
OpenSSH 9.7p1及之前版本 | CVE-2020-15778 | 其中,scp的scp.c文件存在命令注入漏洞。该漏洞源于外部输入数据构造可执行命令过程中,网络系统或产品未正确过滤其中的特殊元素。攻击者可利用该漏洞执行非法命令 | 目前厂商暂未发布修复措施,可先升级到OpenSSH 9.9p2或临时禁用scp,改用rsync等缓解风险,但可能会导致小文件机器内拷贝变慢问题 |
OpenSSH 9.3p2之前版本 | CVE-2023-38408 | 源于ssh-agent的PKCS11功能存在安全问题。攻击者可利用该漏洞执行远程代码 | 补丁下载后替换ssh-agent.1]和ssh-agent.c后重新编译)或直接升级到OpenSSH 9.3p2 |
9.8p1及之前,但4.4p1 <= OpenSSH < 8.5p1:不受此漏洞影响 | CVE-2024-6387 | 竞争条件问题漏洞:存在于 OpenSSH 服务器(sshd)中,由于信号处理器竞赛条件存在缺陷,可以让未经认证的远程攻击者以 root 用户身份执行任意代码;攻击者利用该漏洞,可以让系统全面瘫痪,以 root 最高级别权限全面接管系统,安装恶意软件、篡改数据和创建后门便于后续访问等等。 | 12个补丁覆盖后重新编译或升级到最新版OpenSSH 9.9p2;临时缓解:配置LoginGraceTime为0来暂时规避远程代码执行问题,但会造成潜在的拒绝服务(DoS)风险 |
OpenSSH 6.2到8.8之前版本 | CVE-2021-41617 | 该漏洞源于允许权限提升,因为补充组未按预期初始化 | 升级到/openssh-8.8p1 |
OpenSSH 9.6及之前版本 | CVE-2023-51767 | 该漏洞源于当使用常见类型的DRAM时,mm_answer_authpassword中已验证的整数值不能抵抗单个比特的翻转,导致攻击者可以绕过身份验证 | 升级到OpenSSH 9.9p2 |
OpenSSH 9.6之前版本 | CVE-2023-51385 | 存在操作系统命令注入漏洞 | 升级到OpenSSH 9.9p2 |
OpenSSH 5.7至8.3版本的客户端 | CVE-2020-14145 | OpenSSH客户端中的可观察到的差异会导致算法协商过程中的信息泄露。中间人攻击者可利用该漏洞攻击初始连接尝试 | 升级到OpenSSH 9.9p2 |
OpenSSH 9.6之前版本 | CVE-2023-48795 | 允许远程攻击者绕过完整性检查,从而省略某些数据包 | 升级到OpenSSH 9.9p2 |
二、修复:升级到OpenSSH 9.9p2
该版本另外修复:CVE-2025-26465和VE-2025-26466
#发布于2025年2月18
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
#依赖,可解压后查看README.Plateform来安装依赖
yum install -y gcc openssl-devel zlib-devel wget
echo '/usr/local/zlib/lib' >> /etc/ld.so.conf
ldconfig -v
#编译安装
cd ./openssh-9.9p2
./configure --prefix=/usr #这样默认安装{bin,etc,lib,sbin}到/usr下,默认二进制文件再/usr/local/bin下, configuration files在/usr/local/etc下, the server在/usr/local/sbin下
//修正如下
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-ssl=/usr/local/bin/openssl --with-privsep-path=/var/lib/sshd
make -j 2 && make tests #输出都ok即可
#备份:备份原来的ssh相关二进制文件,/usr/bin和/usr/sbin下,新的默认安装在/ust/local/bin或sbin下,配置文件也备份下
make install
#修改启动服务
sed -ri 's/^(ExecStart=).*//usr/local/sbin/sshd -D $OPTIONS/g' /usr/lib/systemd/system/sshd.service
sed -ri 's/^(Type=).*/simple/g' /usr/lib/systemd/system/sshd.service
或
cp contrib/redhat/sshd.init /etc/init.d/sshd #重新生成sshd.service
#修改配置
sed -ri 's/^(Subsystem).*/ sftp /usr/local/libexec/sftp-server/g' /etc/ssh/sshd_config
echo "Ciphers aes128-ctr,aes192-ctr,aes256-ctr" >> /etc/ssh/sshd_config
echo 'OPTIONS="-f /etc/ssh/sshd_config"' >> /etc/sysconfig/sshd
#配置参看:https://man.openbsd.org/sshd_config
#当启用StrictModes 设置为 yes 时,OpenSSH 会强制要求用户的家目录(~)及其上层目录(~user/)的权限必须非常严格:
#用户家目录(~user/)的权限必须是用户自己拥有,且不能给其他用户写权限(例如,权限模式为 700)。
#用户家目录(~user/)的上层目录(~)的权限必须是系统管理员拥有,且除了拥有者外,并不允许其他用户写权限(例如,权限模式为 755)。
#完成后,拉起验证
systemctl daemon-reload
chmod 754 /var/run/sshd/
rm -f /lib/systemd/system/ssh.service
systemctl unmask ssh
systemctl enable sshd
systemctl start sshd.service
systemctl status sshd.service
sshd -T
sshd -t -f /usr/etc/sshd_config
ssh -V
三、Nginx漏洞:CVE-2024-7347和CVE-2025-23419
1)CVE-2024-7347
该漏洞可能允许攻击者使用特制的mp4文件过度读取NGINX工作内存导致其终止。NGINX开源和NGINX Plus在ngx_http_mp4_module中存在一个漏洞,该漏洞可能允许攻击者使用特制的mp4文件过度读取NGINX工作内存,导致其终止。如果NGINX是使用ngx_http_mp4_module构建的,并且配置文件中启用了mp4配置指令,则该问题只会影响NGINX。此外,只有当攻击者能够使用ngx_http_mp4_module触发对特制mp4文件的处理时,才可能发生攻击。该漏洞允许本地认证攻击者导致 NGINX 服务拒绝访问(DoS)。没有控制面暴露;这仅是一个数据面问题。
影响版本:1.5.13 - 1.26.1;
修复版本:1.27.1、1.26.2
缓解措施:配置文件中注释掉MP4相关指令,包括 http、server 和 location 上下文中,示例如下:
location /video/ {
# mp4; # mp4
# mp4_buffer_size 1m;
# mp4_max_buffer_size 5m;
# mp4_limit_rate on;
# mp4_limit_rate_after 30s;
}
2)CVE-2025-23419
漏洞源于TLS会话票证或SSL会话缓存的使用,这可能使攻击者利用会话恢复来绕过这些服务器上的客户端证书认证要求。当基于名称的虚拟主机配置为共享同一 IP 地址和不同端口组合,并使用 TLS 1.3 和 OpenSSL 时,之前已认证的攻击者可以利用会话恢复绕过这些服务器上的客户端证书身份验证要求。当使用 TLS 会话票据和/或默认虚拟主机下启用了 SSL 会话缓存(session cache ),并且默认虚拟服务器执行客户端证书身份验证时,会出现此漏洞。此问题影响 NGINX http 和 NGINX stream 模块;可能导致资源或功能暴露给未授权的人员,为攻击者提供访问敏感信息的有限访问权限。没有控制平面的暴露;这仅是一个数据平面问题。
影响版本:1.11.4 - 1.27.3
修复版本:1.27.4、1.26.3
缓解措施:创建一个默认的占位服务器,对客户端证书值执行授权检查,在每个服务器块中禁用 TLS 1.3
相关资源:ssl_reject_handshake、ssl_verify_client、request_processing、变量说明
#建一个显式的默认代理服务器,该服务器不执行客户端身份验证
server {
listen 443 ssl default_server;
ssl_reject_handshake on; #禁用 SSL 握手
ssl_verify_client off; #关闭客户端验证,禁用客户端授权:
ssl_protocols TLSv1.2 TLSv1.3;
}
#对客户端证书值进行授权检查,但增加额外的授权检查可能会导致性能轻微下降
server {
listen 443 ssl;
server_name example.org;
ssl_client_certificate org.crt;
ssl_verify_client on;
#对建立的 SSL 连接中客户端证书的预期主体 DN($ssl_client_s_dn)进行授权检查
if ($ssl_client_s_dn != "CN=clientA,O=siteA,L=City,C=DE") {
return 403; 返回 403;
}
}
#在每个服务器块中禁用 TLS 1.3,TLS 1.3 默认情况下从 NGINX Plus R29 和 NGINX OSS 1.23.4 开始启用,注意:从配置中移除 TLS 1.3 可能会阻止某些客户端连接
server {
listen 443 ssl;
ssl_protocols TLSv1.2;
...
}