贵城乡建设官方网站,crm管理系统软件哪家好,做网站年赚千万,wordpress运行php文件安全之安全(security)博客目录导读
ATF(TF-A)安全通告汇总
目录
一、ATF(TF-A)安全通告 TFV-10 (CVE-2022-47630)
二、CVE-2022-47630
2.1 Bug 1#xff1a;证书校验不足
2.2 Bug 2#xff1a;auth_nvctr()中缺少边界检查
2.3 可利用性分析
2.3.1 上游TF-A代码
2.3.…安全之安全(security²)博客目录导读
ATF(TF-A)安全通告汇总
目录
一、ATF(TF-A)安全通告 TFV-10 (CVE-2022-47630)
二、CVE-2022-47630
2.1 Bug 1证书校验不足
2.2 Bug 2auth_nvctr()中缺少边界检查
2.3 可利用性分析
2.3.1 上游TF-A代码
2.3.2 自定义镜像解析器 一、ATF(TF-A)安全通告 TFV-10 (CVE-2022-47630) Title 对X.509证书扩展的不正确校验可能导致读取越界。 CVE ID CVE-2022-47630 Date Reported on 12 Dec 2022 Versions Affected v1.2 to v2.8 Configurations Affected 启用可信启动的BL1和BL2使用get_ext()和auth_nvctr()接口的自定义下游用法。在上游TF-A代码中不可利用。 Impact 越界读 Fix Version fd37982a19a4a291 “fix(auth): forbid junk after extensions” 72460f50e2437a85 “fix(auth): require at least one extension to be present” f5c51855d36e399e “fix(auth): properly validate X.509 extensions” abb8f936fd0ad085 “fix(auth): avoid out-of-bounds read in auth_nvctr()” Note that 72460f50e2437a85 is not fixing any vulnerability per se but it is required for f5c51855d36e399e to apply cleanly. Credit Demi Marie Obenour, Invisible Things Lab
二、CVE-2022-47630 此安全通告描述了用于解析TF-A可信启动中的用来解析证书的X.509解析器中的一个漏洞精心制作的证书可能会导致内存读取越界围。 请注意上游平台不受此影响。只有当(且仅当)下文描述的接口在不同于上游代码的上下文中使用时下游平台才可能受影响。这类上下文的细节将在本文档的后续部分描述。 要全面理解本安全通告建议参考以下标准文档 1RFC 5280Internet X.509公钥基础证书Public Key Infrastructure Certificate和证书吊销列表Certificate Revocation List(CRL)配置文件。 2ITU-T X.690ASN.1编码规则BER (Basic encoding rules)、CER (Canonical encoding rules)和DER (Distinguished encoding rules)规范。
2.1 Bug 1证书校验不足 漏洞存在于drivers/auth/mbedtls/mbedtls_x509_parser.c源文件中。根据设计get_ext()不检查各种mbedtls_*()函数的返回值因为假定cert_parse()已经保证它们总是成功。但是它传递扩展的结尾作为这些函数的结束指针而cert_parse()传递TBSCertificate的结尾。此外cert_parse()不检查扩展的内容是否与扩展本身具有相同的长度。它也不检查扩展块是否扩展到TBSCertificate的末尾。 这是一个问题因为mbedtls_asn1_get_tag()在失败时使*p和*len未定义。在实践中这会导致get_ext()继续以不同于cert_parse()使用(和验证)的偏移量进行解析这意味着cert_parse()提供的in-bounds保证不再有效。结果是get_ext()有可能读取证书末尾之后的内存。这可能会潜在地访问具有危险读取副作用的内存或者泄漏微架构状态这些状态理论上可以通过一些侧信道攻击作为更复杂攻击的一部分来检索。
2.2 Bug 2auth_nvctr()中缺少边界检查 auth_nvctr()未检查所提供的缓冲区是否足够长以容纳ASN.1 INTEGER。由于auth_nvctr()只读取6个字节因此可以在缓冲区结束后最多读取6个字节。
2.3 可利用性分析
2.3.1 上游TF-A代码 在上游TF-A代码中auth_nvctr()的唯一调用者从get_ext()获取输入这意味着第二个bug是可利用的第一个也是。因此只需要考虑第一个bug。 TF-A源代码树(即在drivers/auth/下)中提供的所有标准信任链都要求在调用get_ext()或调用get_ext()的任何函数之前已经验证了证书的签名。从动态配置文件(如fdts/cot_descriptors.dtsi)获取信任链的平台也是安全的因为无论文件中属性的顺序如何签名验证总是在调用get_ext()或auth_nvctr()之前完成。因此不可能在上游TF-A中利用此漏洞进行预认证。 此外通过get_ext()读取的数据只由身份验证框架(drivers/auth/auth_mod.c)使用这大大减少了它将接收的输入范围从而减少了它所产生的影响。具体来说身份验证框架在三种情况下使用get_ext() 1. 从X.509证书中检索hash以检查子证书的完整性(参见auth_hash())。 2. 从X.509证书中检索签名详细信息以检查其真实性和完整性(参见auth_signature())。 3. 从X.509证书中检索安全计数器值以防止未经授权的证书回滚到以前的版本(参见auth_nvctr())。 这些都不使用身份验证框架写入越界内存因此不可能损坏内存。 总之有两个独立的问题——一个在get_ext()中另一个在auth_nvctr()中——但这两个问题都不能在TF-A上游代码的上下文中被利用。 只有在以下两种情况下我们才会在身份验证之前触发此漏洞 1该平台使用自定义信任链在加密认证方法(AUTH_METHOD_SIG)之前使用非易失性计数器认证方法(AUTH_METHOD_NV_CTR)。 2信任链使用自定义身份验证方法该方法在加密身份验证之前调用get_ext()。
2.3.2 自定义镜像解析器 如果平台使用自定义镜像解析器而不是证书解析器那么证书解析器中的错误显然与此无关。auth_nvctr()中的错误可能是相关的但前提是返回的数据是: 1从不受信任的来源获取(意味着在身份验证之前读取)。 2尚未被检查为原始编码的ASN.1标记。 特别是如果自定义镜像解析器实现在ASN.1 INTEGER中包装了一个32位整数则不会受到影响。
参考9.10. Advisory TFV-10 (CVE-2022-47630) — Trusted Firmware-A 2.9.0 documentation