Alibaba Cloud Linux系统的CVE-2021-33909安全漏洞内核热补丁修复方案

本文为您介绍Alibaba Cloud Linux 2和Alibaba Cloud Linux 3系统的CVE-2021-33909安全漏洞内核热补丁修复方案。

问题描述

在符合如下条件的Alibaba Cloud Linux实例中,存在CVE-2021-33909安全漏洞,特定场景下会造成系统宕机,且出现如下调用栈信息。

  • Alibaba Cloud Linux 2系统

    • 镜像:Alibaba Cloud Linux 2.1903 LTS 64位。

    • 内核:kernel-4.19.91-24.al7及之前的内核版本。

  • Alibaba Cloud Linux 3系统

    • 镜像:Alibaba Cloud Linux 3.2104 64位。

    • 内核:kernel-5.10.60-7.al8(含)之前的内核版本。

[  415.961724] BUG: unable to handle kernel paging request at ffffb807c2f1aff6
[  415.963259] PGD 42f53b067 P4D 42f53b067 PUD 0
[  415.964201] Oops: 0002 [#1] SMP PTI
[  415.965026] CPU: 5 PID: 1537 Comm: seq_poc Kdump: loaded Tainted: G        W         4.19.91-23.al7.x86_64 #1
[  415.967154] Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
[  415.968353] RIP: 0010:__memcpy+0x12/0x20
[  415.969187] Code: 48 c1 e2 20 48 09 c2 48 31 d3 e9 68 ff ff ff 90 90 90 90 90 90 90 90 90 66 66 90 66 90 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
[  415.973070] RSP: 0018:ffffb80802097dd8 EFLAGS: 00010202
[  415.974159] RAX: ffffb807c2f1aff6 RBX: ffff8a85f9593450 RCX: 0000000000000001
[  415.975638] RDX: 0000000000000002 RSI: ffffffff9b0c231c RDI: ffffb807c2f1aff6
[  415.977097] RBP: ffffb80842f1b000 R08: ffffffff9b0c231c R09: 0000000000000001
[  415.978563] R10: ffffe41e47d4fa80 R11: ffffe41e47d4fac0 R12: ffffffff9b0a9cc2
[  415.980168] R13: ffff8a87a83eaa00 R14: ffffb80802097f10 R15: ffff8a87ad6de700
[  415.981664] FS:  00007f9ef5d86740(0000) GS:ffff8a87afb40000(0000) knlGS:0000000000000000
[  415.983464] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  415.984722] CR2: ffffb807c2f1aff6 CR3: 0000000279c40005 CR4: 00000000000606e0
[  415.986253] Call Trace:
[  415.986802]  prepend+0x23/0x30
[  415.987517]  dentry_path+0x7e/0xa0
[  415.988249]  seq_dentry+0x36/0xa0
[  415.988954]  show_mountinfo+0x203/0x280
[  415.989764]  seq_read+0x14a/0x3d0
[  415.990514]  vfs_read+0x89/0x130
[  415.991209]  ksys_read+0x4a/0xc0
[  415.991898]  do_syscall_64+0x5b/0x1b0
[  415.992661]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
[  415.993713] RIP: 0033:0x7f9ef5891a30
[  415.994450] Code: 0b 31 c0 48 83 c4 08 e9 be fe ff ff 48 8d 3d c7 c3 09 00 e8 42 8c 02 00 66 90 83 3d 8d d5 2d 00 00 75 10 b8 00 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 31 c3 48 83 ec 08 e8 de cc 01 00 48 89 04 24
[  415.998217] RSP: 002b:00007f9ef5d84f78 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
[  415.999792] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f9ef5891a30
[  416.001249] RDX: 0000000000000400 RSI: 0000000000603240 RDI: 0000000000000003
[  416.002794] RBP: 00007f9ef5d84ff0 R08: 0000000000603240 R09: 00007f9ef58fcc30
[  416.004310] R10: 00007f9ef5d849e0 R11: 0000000000000246 R12: 0000000000400c00
[  416.005786] R13: 00007ffcf5fdd070 R14: 0000000000000000 R15: 0000000000000000
[  416.007255] Modules linked in: sunrpc intel_rapl_msr intel_rapl_common iosf_mbi sb_edac crct10dif_pclmul crc32_pclmul mousedev ghash_clmulni_intel pcbc aesni_intel psmouse i2c_piix4 crypto_simd cryptd pcspkr glue_helper ip_tables ata_generic pata_acpi cirrus drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops ttm ata_piix uhci_hcd drm crc32c_intel libata serio_raw i2c_core floppy
[  416.014226] CR2: ffffb807c2f1aff6
[  416.014952] ---[ end trace 558647d5169dc4e0 ]---
[  416.015915] RIP: 0010:__memcpy+0x12/0x20
[  416.016733] Code: 48 c1 e2 20 48 09 c2 48 31 d3 e9 68 ff ff ff 90 90 90 90 90 90 90 90 90 66 66 90 66 90 48 89 f8 48 89 d1 48 c1 e9 03 83 e2 07 <f3> 48 a5 89 d1 f3 a4 c3 66 0f 1f 44 00 00 48 89 f8 48 89 d1 f3 a4
[  416.024072] RSP: 0018:ffffb80802097dd8 EFLAGS: 00010202
[  416.026964] RAX: ffffb807c2f1aff6 RBX: ffff8a85f9593450 RCX: 0000000000000001
[  416.030291] RDX: 0000000000000002 RSI: ffffffff9b0c231c RDI: ffffb807c2f1aff6
[  416.033583] RBP: ffffb80842f1b000 R08: ffffffff9b0c231c R09: 0000000000000001
[  416.036819] R10: ffffe41e47d4fa80 R11: ffffe41e47d4fac0 R12: ffffffff9b0a9cc2
[  416.040063] R13: ffff8a87a83eaa00 R14: ffffb80802097f10 R15: ffff8a87ad6de700
[  416.043332] FS:  00007f9ef5d86740(0000) GS:ffff8a87afb40000(0000) knlGS:0000000000000000
[  416.046754] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  416.049766] CR2: ffffb807c2f1aff6 CR3: 0000000279c40005 CR4: 00000000000606e0
[  416.052964] Kernel panic - not syncing: Fatal exception

问题原因

seq_buf_alloc函数的参数是size_t(unsigned long)类型为64位,其他内核函数在使用size_t(unsigned long)参数时,将该参数的类型修改为int类型,导致64位的数字被截断为32位,通过精心构造,该漏洞可实现代码任意执行。在主机内可以用于提权,容器内能够崩溃宿主机或者逃逸。更多说明,请参见官方文档说明

解决方案

当遇到该问题时,您可以参考以下方案处理:

  1. 登录ECS实例,详情请参见连接方式概述

  2. 执行以下命令,确认系统内核版本适用此方案。

    uname -r

    系统显示类似如下。

    • Alibaba Cloud Linux 2系统

      4.19.91-21.al7.x86_64
    • Alibaba Cloud Linux 3系统

      5.10.60-7.al8.x86_64
  3. 请根据系统内核版本,选择以下对应的解决方法:

    Alibaba Cloud Linux 2系统

    • 对于4.19.91-19.1.al7.x86_64(不含)版本

      1. 更新操作系统版本至最新的内核版本。

        yum update kernel
      2. 重启服务器生效。

        reboot
      3. 更新内核热补丁。

        若最新内核版本的操作系统同样存在该问题,请参见4.19.91-19.1.al7.x86_64(包含)到4.19.91-24.al7.x86_64(包含)之间版本的解决方案更新内核热补丁。

    • 对于4.19.91-19.1.al7.x86_64(包含)到4.19.91-24.al7.x86_64(包含)之间的版本,可通过安装内核热补丁解决,安装命令如下。

      yum install -y kernel-hotfix-5956925-`uname -r | awk -F"-" '{print $NF}'`

    Alibaba Cloud Linux 3系统

    • 对于kernel-5.10.60-8.al8(不含)之前的版本

      1. 更新操作系统版本至最新的内核版本。

        yum update kernel
      2. 重启服务器生效。

        reboot
      3. 更新内核热补丁。

        若最新内核版本的操作系统同样存在该问题,请参见kernel-5.10.60-7.al8(含)之前版本的解决方案更新内核热补丁。

    • 对于kernel-5.10.60-7.al8(含)之前的版本,可通过安装内核热补丁解决,安装命令如下。

      yum install -y kernel-hotfix-5956925-`uname -r | awk -F"-" '{print $NF}'`