OpenEuler 22.03 LTS SP3 CVE-2024-6387 OpenSSH 漏洞修复指南

一、漏洞概括

漏洞名称OpenSSH Server远程代码执行漏洞
漏洞编号CVE-2024-6387
公开时间2024-7-1CVSS 3.1分数8.1
威胁类型代码执行漏洞等级暂无
技术细节状态已公开在野利用状态不明确
PoC状态x86已公开EXP状态未公开

OpenSSH是SSH(Secure Shell)协议的开源实现,它支持在两个主机之间提供安全的加密通信,广泛用于Linux等系统,通常用于安全远程登录、远程文件传输和其它网络服务。

2024年7月1日,OpenSSH Server中存在的一个远程代码执行漏洞(CVE-2024-6387,又被称为regreSSHion)细节被公开,该漏洞影响基于glibc的Linux系统上的OpenSSH Server (sshd)。

默认配置下的OpenSSH Server (sshd)中存在信号处理程序竞争条件漏洞,如果客户端未在LoginGraceTime内(默认情况下为120秒,旧版OpenSSH中为600秒)进行身份验证,则sshd的SIGALRM处理程序将被异步调用,但该信号处理程序会调用非异步信号安全的函数,最终造成Double-Free内存管理问题。威胁者可利用该漏洞在基于glibc的Linux系统上以root身份实现未经身份验证的远程代码执行。根据已公开技术细节中的描述,在开启ASLR的i386设备上,利用该漏洞大约需要6-8小时获取root shell,在开启ASLR的amd64设备上则可能需要约一周左右。

二、影响范围

受影响版本8.5p1 <= OpenSSH < 9.8p1

注:OpenBSD系统不受该漏洞影响。

用户可执行sshd -V确认OpenSSH版本,目前该漏洞技术细节已在互联网上公开,鉴于影响范围较大,建议用户尽快做好自查及防护

三、安全措施

  • 自行升级 :目前OpenSSH上游已发布版本更新,受影响用户可通过软件源升级到最新版本(OpenSSH 9.8p1)或编译安装最新版本。

  • 通过软件源更新方法:

    • Debian/Ubuntu等:apt update && apt install openssh-server

    • OpenEuler/CentOS等:yum update openssh

更新后请使用systemctl restart sshd 等命令重启sshd服务

不同Linux发行版可能会自行维护OpenSSH安全补丁,请前往发行版的openssh-server软件包信息页面,确认漏洞修复情况。例如在openeuler22.03 LTSSP3 中,已发布openssh-8.8p1-31版本完成对本漏洞的修复。

如确有困难无法升级版本的,可采用缓解措施。在sshd配置文件(如/etc/ssh/sshd_config)中将LoginGraceTime设置为0,并重启sshd服务。请注意,使用该配置会导致MaxStartups连接耗尽,从而使sshd易受拒绝服务攻击,但可以缓解本漏洞的风险。也可使用iptables 等防火墙最小化控制SSH访问范围。

四、OpenEuler 22.03 LTS SP3 修复CVE-2024-6387

image-20240703100348342

前置条件,准备官方update源

这里我注释了metalink,因为有些镜像仓库还没去同步openeuler最新的update软件包,直接使用openeuler官方的源

[update]
name=update
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP3/update/$basearch/
#metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP3/OS/$basearch/RPM-GPG-KEY-openEuler

[update-source]
name=update-source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP3/update/source/
#metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=source
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP3/source/RPM-GPG-KEY-openEuler

yum update 更新

查看当前OpenSSH版本

[root@localhost yum.repos.d]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.1.1wa  16 Nov 2023

#查看当前版本
[root@localhost yum.repos.d]# rpm -qa openssh
openssh-8.8p1-26.oe2203sp3.x86_64

使用yum update 更新OpenSSH软件包

[root@localhost ~]# yum clean all

[root@localhost ~]# yum makecache

[root@localhost ~]# yum update openssh*

image-20240703100824772

升级后重启sshd服务

[root@localhost ~]# systemctl restart sshd

#查看升级后的版本
[root@localhost ~]# rpm -qa openssh
openssh-8.8p1-31.oe2203sp3.x86_64

五、参考

  • https://inc.xmu.edu.cn/info/1031/6641.htm
  • https://www.openeuler.org/zh/security/cve/detail/?cveId=CVE-2024-6387&packageName=openssh

来源于srebro.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。

<think>我们正在为openEuler 22.03 LTS aarch64构建openssh-10.0p1的RPM包。根据用户提供的错误信息,有两个主要问题: 1. 在%changelog中的日期格式不正确(bogus date in %changelog) 2. 构建过程中出现错误:Bad exit status from /var/tmp/rpm-tmp(可能是由于依赖缺失或配置问题) 另外,从引用[1]中我们看到一个错误:缺少x11-ssh-askpass-1.2.4.1.tar.gz文件。而引用[3]提到在编译过程中可能遇到缺少X11头文件的问题(如SMlib.h和ICElib.h)。 因此,我们需要: 1. 修正SPEC文件中%changelog的日期格式。 2. 解决构建过程中可能出现的依赖问题(特别是X11相关的依赖)。 3. 根据引用[1],我们可能需要下载x11-ssh-askpass的源码并放入SOURCES目录。 步骤调整如下: 步骤1:安装必要的依赖(包括X11开发包) 步骤2:下载openssh源码和x11-ssh-askpass源码(如果SPEC文件中需要) 步骤3:修正SPEC文件(注意日期格式和依赖处理) 步骤4:构建RPM 具体操作: 1. 安装依赖(增加X11开发包): ```bash sudo dnf install -y libX11-devel libXt-devel libSM-devel libICE-devel ``` 2. 下载openssh源码和x11-ssh-askpass源码: ```bash cd ~/rpmbuild/SOURCES wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f11e01c41285c7b6ce813d06/x11-ssh-askpass-1.2.4.1.tar.gz ``` 3. 修正SPEC文件(注意日期格式,必须是英文星期、月份缩写,且日期后跟年份): 例如:* Wed Jan 01 2023 Your Name <email> - 10.0p1-1 4.SPEC文件中,我们可能需要添加对x11-ssh-askpass的处理(如果openssh的构建需要它)。但是,从引用[1]的错误来看,SPEC文件期望有x11-ssh-askpass的源码。我们可以选择两种方式: a) 在SPEC文件中去掉对x11-ssh-askpass的构建(如果不需要)。 b) 保留并正确指定源码。 由于openssh默认不构建X11-askpass,我们可以通过配置选项禁用它。在configure时添加:`--without-x11-askpass`。 因此,我们在SPEC的%build部分修改configure选项: ```spec ./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-pam \ --with-md5-passwords \ --with-tcp-wrappers \ --without-x11-askpass # 添加这一行以避免构建x11-ssh-askpass ``` 5. 如果坚持要构建x11-ssh-askpass,那么需要确保源码存在,并在%prep阶段解压。但根据引用[4]的描述,我们可能不需要这个功能(尤其是在服务器上),所以建议禁用。 6. 修正%changelog中的日期格式,确保每行以*开头,然后是星期、月份、日期、年份、维护者信息。 7. 构建命令: ```bash rpmbuild -bb --target=aarch64 ~/rpmbuild/SPECS/openssh.spec ``` 下面提供一个修正后的SPEC文件示例(注意:我们禁用了x11-askpass,并修正了日期格式): ```spec Name: openssh Version: 10.0 Release: p1%{?dist} Summary: OpenSSH server and client programs License: BSD URL: https://www.openssh.com/ Source0: https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}p%{release}.tar.gz # 如果不需要x11-ssh-askpass,可以注释掉Source1,并且在构建过程中不使用 # Source1: x11-ssh-askpass-1.2.4.1.tar.gz BuildRequires: gcc make autoconf automake pam-devel openssl-devel zlib-devel BuildRequires: libX11-devel libXt-devel libSM-devel libICE-devel # 即使禁用了askpass,但可能其他部分需要X11头文件?如果不需要,可以去掉。但根据引用[3]的错误,还是安装这些依赖比较安全。 %description OpenSSH (OpenBSD Secure Shell) is a set of computer programs... %prep %setup -q -n openssh-%{version}p%{release} # 如果使用x11-ssh-askpass,则添加: # %setup -q -T -D -a 1 -n openssh-%{version}p%{release} %build # 禁用X11-askpass ./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-pam \ --with-md5-passwords \ --with-tcp-wrappers \ --without-x11-askpass make %{?_smp_mflags} %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} %files %defattr(-,root,root,-) %doc CREDITS ChangeLog INSTALL LICENCE OVERVIEW README* TODO /etc/ssh/* /usr/bin/ssh* /usr/sbin/sshd %{_mandir}/man1/* %{_mandir}/man5/* %{_mandir}/man8/* %changelog * Wed Jan 01 2023 Your Name <email@example.com> - 10.0p1-1 - Initial build for openssh-10.0p1 ``` 注意:如果构建过程中仍然出现关于X11头文件的错误,可能是因为configure脚本检测到X11开发包存在而试图构建相关功能。我们通过`--without-x11-askpass`禁用了askpass,但可能还有其他X11相关的组件。如果不需要X11转发等功能,可以尝试添加`--without-x`选项。但通常服务器需要X11转发,所以建议保留X11支持,并确保安装了所有依赖。 如果构建成功,则按照之前的步骤验证。 如果用户不需要X11相关功能,也可以完全禁用X11: ```spec ./configure ... --without-x ``` 但这样会禁用X11转发等功能。请根据实际需求选择。 最后,关于引用[2]和[3]:在升级openssh时,需要备份原有文件,并在安装后还原配置文件(如sshd_config)。但我们的SPEC文件在安装时会覆盖这些文件吗?为了避免覆盖配置,我们可以在%post脚本中做处理,或者建议用户不要覆盖配置文件(使用rpm的配置文件处理机制)。但通常升级openssh时,配置文件不会被覆盖,因为rpm会保留修改过的配置文件。不过为了安全,最好在升级前备份配置文件(如引用[2]所示)。 因此,在安装新包之前,建议用户备份配置文件(如/etc/ssh/sshd_config等)。在SPEC中,我们可以将配置文件标记为配置文件,这样在更新时就不会覆盖用户修改过的配置。在%files部分,我们可以将配置文件标记为%config: ```spec %files ... %config(noreplace) /etc/ssh/sshd_config %config(noreplace) /etc/ssh/ssh_config ... ``` 这样,如果用户修改了这些文件,更新时不会覆盖,而是会生成.rpmnew文件。 综上所述,修正后的SPEC文件需要: 1. 修正日期格式。 2. 添加必要的BuildRequires(X11开发包)。 3. 添加configure选项`--without-x11-askpass`(或完全禁用X11,根据需求)。 4. 将配置文件标记为%config(noreplace)。 重新构建即可。 如果用户遇到其他错误,请根据日志具体分析。</think>### 解决 openssh-10.0p1 RPM 构建中的错误 根据您遇到的错误信息,以下是完整的解决方案: #### 1. **修复 %changelog 日期格式错误** 在 SPEC 文件中,%changelog 必须使用标准日期格式: ```spec %changelog * Wed Jan 01 2023 Your Name <email@example.com> - 10.0p1-1 - Initial build for openssh-10.0p1 ``` **关键要求**: - 日期格式:`星期 月 日 年`(如 `Wed Jan 01 2023`) - 必须使用英文月份缩写(Jan/Feb/Mar 等) - 用户名和邮箱需用`<>`包裹 #### 2. **解决文件缺失错误** ```bash # 下载缺失的 x11-ssh-askpass 源码 wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f11e01c41285c7b6ce813d06/x11-ssh-askpass-1.2.4.1.tar.gz \ -P ~/rpmbuild/SOURCES/ ``` #### 3. **修复 X11 头文件缺失错误** 安装必要的 X11 开发包: ```bash sudo dnf install -y libX11-devel libXt-devel libSM-devel libICE-devel ``` #### 4. **更新 SPEC 文件关键配置** ```spec # 在 %build 部分添加 X11 支持 %build ./configure --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-pam \ --with-md5-passwords \ --with-tcp-wrappers \ --with-x \ --with-ssl-engine make %{?_smp_mflags} # 添加 x11-ssh-askpass 支持 Source1: x11-ssh-askpass-1.2.4.1.tar.gz %prep %setup -q -n openssh-%{version}p%{release} %setup -T -D -a 1 -n openssh-%{version}p%{release} # 添加此行处理第二个源码包 ``` #### 5. **完整的构建流程** ```bash # 1. 准备环境 sudo dnf groupinstall -y "Development Tools" sudo dnf install -y rpm-build openssl-devel pam-devel zlib-devel \ libX11-devel libXt-devel libSM-devel libICE-devel # 2. 设置构建目录 rpmdev-setuptree # 3. 下载源码 cd ~/rpmbuild/SOURCES wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.0p1.tar.gz wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f11e01c41285c7b6ce813d06/x11-ssh-askpass-1.2.4.1.tar.gz # 4. 创建修正后的 SPEC 文件(内容参考上述修正点) # 5. 构建 RPM cd ~/rpmbuild/SPECS rpmbuild -bb --target=aarch64 openssh.spec ``` #### 6. **安全安装指南** 安装前务必备份: ```bash # 备份关键文件 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sudo mv /usr/sbin/sshd{,.bak} sudo mv /usr/bin/ssh{,.bak} sudo mv /usr/bin/ssh-keygen{,.bak} ``` 安装后操作: ```bash # 恢复配置文件 sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config # 验证版本 ssh -V ``` ### 关键注意事项 1. **安全更新**: OpenSSH-10.0p1 存在 CVE-2024-6387 漏洞,建议使用更高版本[^3] 2. **依赖解决**: 使用 `dnf provides &#39;*/SMlib.h&#39;` 查找缺失头文件的包 3. **离线构建**: 如需离线环境,提前下载所有依赖: ```bash dnf download --resolve --source openssl-devel pam-devel zlib-devel ``` 4. **SELinux 支持**: 添加 `--with-selinux` 配置选项并安装 `libselinux-devel` ### 常见错误解决方案 | 错误类型 | 解决方案 | |---------|---------| | `bogus date in %changelog` | 修正日期格式为 `* Wed Jan 01 2023 Name <email>` | | `X11/SM/SMlib.h: No such file` | 安装 `libSM-devel` 包 | | `/var/tmp/rpm-tmp` 错误 | 检查构建日志中的具体错误位置 | | 文件冲突 | 使用 `--replacefiles` 参数强制安装 | > 提示:建议使用更高版本如 OpenSSH 10.0p2 修复已知漏洞[^4]。构建成功后,通过 `rpm -qi openssh` 验证包信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值