最近公司在做等保,檢查出一堆漏洞,主要是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