OpenSSLRCE漏洞影响群晖多款产品。台湾NAS制造商Synology最近披露了影响其产品的两个远程代码执行漏洞和一个DoSOpenSSL漏洞。CVE编号为CVE-2021-3711和CVE-2021-3712。CVE-2021-3711要解密SM2加密数据,应用程序需要调用API函数EVP_PKEY_decrypt()。通常,应用程序会调用此函数两次。第一次,函数out参数为NULL,outlen参数等于退出时解密明文所需的缓冲区大小。然后应用程序分配足够大小的缓存并再次调用EVP_PKEY_decrypt(),这次使用非空参数。该漏洞是SM2解密代码实现中的漏洞。具体来说,第一次调用EVP_PKEY_decrypt()计算出的明文解密所需的缓存大小可以小于第二次调用的实际大小。这将导致应用程序第二次调用EVP_PKEY_decrypt()时缓冲区溢出,因为缓冲区太小。可以向应用程序显示解密的SM2内容的恶意攻击者可以修改缓存数据的内容,导致最多62字节的溢出,改变应用程序行为或导致应用程序崩溃。缓存的位置和具体的应用有关,但都是堆分配的。此漏洞的CVSS3评分为8.1,影响OpenSSL版本1.1.1-1.1.1k。它已在OpenSSL版本1.1.1l中得到修复。CVE-2021-3712ASN.1字符串在OpenSSL中以ASN1_STRING结构的形式表示,其中包含一个表示字符串数据的缓存和一个表示缓存长度的字段。正常的C字符串以字符串数据的形式缓存,以NUL(0)字节结尾。虽然不是严格要求,但使用OpenSSL的内置d2i函数处理的ASN.1字符串和使用ASN1_STRING_set()函数设置的字符串将以NUL结尾。但是在ASN1_STRING数组中,应用程序可以直接设置data域和length域来构造一个有效的不以NUL结尾的ASN1_STRING结构。具体可以使用ASN1_STRING_set0()函数来实现。但是大多数打印ASN.1数据的OpenSSL函数都假定ASN1_STRING字符串数组以NUL结尾。当应用程序请求打印ASN.1结构,而ASN.1结构中包含不以NUL结尾的ASN1_STRING数据域时,会导致读缓冲区溢出。此问题也可能发生在证书处理中,包括X509_get1_email()、X509_REQ_get1_email()和X509_get1_ocsp()函数。如果恶意攻击者可以让应用程序直接构造一个ASN1_STRING,然后通过受影响的OpenSSL函数进行参与,就可能导致DoS攻击和应用程序崩溃。当应用于证书攻击时,可能会导致私钥、敏感明文信息等私有内存内容泄露。该漏洞影响OpenSSL1.1.1-1.1.1k和OpenSSL1.0.2-1.0.2y版本,已在OpenSSL1.1.1j和OpenSSL1.0.2za版本修复。受影响的产品受影响的产品包括SynologyDiskStationManager(DSM)、SynologyRouterManager(SRM)、VirtualNetworkPlusServer和VirtualServer,具体:本文翻译自:https://www.synology.com/zh-cn/security/advisory/Synology_SA_21_24转载请注明出处。
