最近公司在做等保,检查出一堆漏洞,主要是Apache、php和OpenSSL的,其中Apache需要升级到至少2.4.46,PHP至少7.1.24,OpenSSL至少1.1.1l才能保证没有漏洞。
系统用的是CentOS8,使用yum升级的版本都比较老,没办法只能编译,按照centos编译apache(httpd)和PHP 文中的办法编译升级之后(中间遇坑无数),Apache和PHP的漏洞都解决了。
但是OpenSSL下载并且按照网上的办法《openssl升级》编译最新版本1.1.1l,并覆盖原有的动态链接库之后却出现各种问题:
Traceback (most recent call last):
File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 14, in swig_import_helper
return importlib.import_module(mname)
File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 994, in _gcd_import
File "<frozen importlib._bootstrap>", line 971, in _find_and_load
File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
File "<frozen importlib._bootstrap>", line 571, in module_from_spec
File "<frozen importlib._bootstrap_external>", line 922, in create_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /lib64/libk5crypto.so.3: undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1bDuring handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/bin/yum", line 57, in <module>
from dnf.cli import main
File "/usr/lib/python3.6/site-packages/dnf/__init__.py", line 30, in <module>
import dnf.base
File "/usr/lib/python3.6/site-packages/dnf/base.py", line 29, in <module>
import libdnf.transaction
File "/usr/lib64/python3.6/site-packages/libdnf/__init__.py", line 8, in <module>
from . import error
File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 17, in <module>
_error = swig_import_helper()
File "/usr/lib64/python3.6/site-packages/libdnf/error.py", line 16, in swig_import_helper
return importlib.import_module('_error')
File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_error'
问题很严重,以至于主机都连不上,查了下,据说是CentOS自己修改了一部分OpenSSL代码,所以直接用原版OpenSSL编译是不行的。
又看了下,使用
yum update openssl
最高能将OpenSSL升级到1.1.1k,这时候剩下的漏洞只剩一个了 CVE-2021-3711
SM2解密代码中存在安全问题,第一次调用EVP_PKEY_decrypt() 返回的明文所需的缓冲区大小的计算可能小于第二次调用所需的实际大小。当应用程序第二次使用较小的缓冲区调用 EVP_PKEY_decrypt() 时,可能会导致缓冲区溢出。恶意攻击者如果能够向应用程序提供用于解密的SM2内容,将导致攻击者选择的数据溢出缓冲区最多 62 个字节,改变缓冲区后的其它数据内容,这将改变应用程序的行为或导致应用程序崩溃,但缓冲区的位置取决于应用程序,通常是堆分配的。
影响范围
OpenSSL1.1.1-1.1.1k
看了下修补的办法 Correctly calculate the length of SM2 plaintext given the ciphertext
主要是修改crypto/sm2/sm2_crypt.c等几个文件,可以将CentOS已有的1.1.1k的rpm下载到本地,然后修改c文件,再使用修改后的rpm包安装
OpenSSL的rpm包下载地址 RPM resource openssl