こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。
07/20/2021にQualysからLinux Kernelの脆弱性(Important: CVE-2021-33909)とSystemdの脆弱性(CVE-2021-33910)に関するアドバイザリが公開されました。PoCの情報なども公開されており、今後更に情報が公開されていくようです。Red Hatからは、この脆弱性が含まれているかの検出ツールも提供されています。今回はこれらの脆弱性の概要と、各ディストリビューションの対応について簡単にまとめてみます。
【7/21/2021 05:00 更新】 Arch Linuxを加えました。
【7/26/2021 05:00 更新】 SWベンダ情報にAmazon(AWS)を加えました。
[過去の関連リンク]
全てのWifiデバイスや(WPA3を含む)プロトコルに対してのデザイン上の問題と実装上の問題(FragAttack)
Intel(R) PROSet/Wireless WiFi 製品の脆弱性(High: INTEL-SA-00402, Critical: INTEL-SA-00403)
Intel製CPUの脆弱性(“Platypus”: INTEL-SA-00389)
資格情報(Credential)が漏洩する可能性がある脆弱性 ( “ContainerDrip” : CVE-2020-15157 )
Bluetoothの鍵を上書きされる脆弱性(BLURtooth: CVE-2020-15802)
複数のgrub2 と関連するLinux Kernel の脆弱性 (BootHole (CVE-2020-1968, etc.))
INTELのセキュリティアドバイザリ(INTEL-SA-00320: Special Register Buffer Data Sampling Advisory (CVE-2020-0543))
Priority
CVE番号 | 影響するバージョン | 一次情報源 | Priority | CVSS Score / CVSS Vector |
---|---|---|---|---|
CVE-2021-33909 | 3.16 <= Linux Kernel | Qualys Security Advisory Sequoia: A deep root in Linux’s filesystem layer (CVE-2021-33909) | Red Hat: 7.0 Important | Red Hat: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
CVE-2021-33910 | v220 <= systemd | Qualys Security Advisory CVE-2021-33910: Denial of service (stack exhaustion) in systemd (PID 1) | Red Hat: 7.0 Important | Red Hat: CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
SWベンダの対応
修正方法
各ディストリビューションの情報を確認してください。
CVE概要(詳細はCVEのサイトをご確認ください)
- Linux Kernelの脆弱性(https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-33909)
- DoS又は権限昇格の可能性
- 概要:3.16以降のLinux Kernelのファイルシステムレイヤにsize_tからintへの変換の脆弱性が見つかりました。生成、マウント、削除を、トータルのパスの長さが1GBを超える深いディレクトリ階層で行うと、非特権の攻撃者が10バイトの文字列「//deleted」をカーネルバッファのvmalloc()された最初の一からちょうど-2GB-10Bの位置に書き込むことが出来ます。
Qualysはこの制御できない境界外書き込みを利用して、Ubuntu 20.04, Ubuntu 20.10, Ubuntu 21.04, Debian 11, Fedora 34 Workstationでのroot特権を得ることに成功しました。他のLinuxディストリビューションもおそらくは攻撃が可能と思われます。Qualysのexploitでは約5GBのメモリと1Mのinodeが必要になります。この攻撃手法に関しては、近い将来に公開する予定になっています。PoCの基本的なコンセプトはこのアドバイザリの最後に書かれています。
- 分析:一次情報源がわかりやすいため、敢えてこちらでは触れません。一次情報源を参考にして下さい。
- systemdの脆弱性(https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-33910)
- DoSの可能性
- 概要:v220以降のsystemdに問題が見つかりました。systemdは/proc/self/mountinfoをパースしてモニタしており、マウントポイントのパスをmount_setup_unit()に渡し、さらにunit_name_from_path()に渡され、Unit_name_path_escape()に渡されます。
------------------------------------------------------------------------ 1720 static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { .... 1727 r = libmount_parse(NULL, NULL, &table, &iter); .... 1731 for (;;) { .... 1735 r = mnt_table_next_fs(table, iter, &fs); .... 1742 path = mnt_fs_get_target(fs); .... 1751 (void) mount_setup_unit(m, device, path, options, fstype, set_flags); ------------------------------------------------------------------------ 1644 static int mount_setup_unit( 1645 Manager *m, 1646 const char *what, 1647 const char *where, 1648 const char *options, 1649 const char *fstype, 1650 bool set_flags) { .... 1683 r = unit_name_from_path(where, ".mount", &e); ------------------------------------------------------------------------ 512 int unit_name_from_path(const char *path, const char *suffix, char **ret) { ... 523 r = unit_name_path_escape(path, &p); ------------------------------------------------------------------------ 380 int unit_name_path_escape(const char *f, char **ret) { ... 386 p = strdupa(f); ------------------------------------------------------------------------
386行目で、unit_name_path_escape()はマウントポイントパスをstdupa()に引き渡します。このstrdupa()はstduo()に似ていますが、ヒープ内ではなくスタック上でメモリをアロケートします。
結果として、このマウントポイントのトータルのパス長が8MB(デフォルトのRLIMIT_STACK)を超えた場合、systemdはセグメンテーションフォルトを起こしてクラッシュし、systemdがPID 1のため、結果としてOSがクラッシュします。
- 分析:一次情報源がわかりやすいため、敢えてこちらでは触れません。一次情報源を参考にして下さい。
緩和策
- Linux Kernelの脆弱性(CVE-2021-33909)
以降の緩和策はQualysのExploitの実行を止めるものであり、完全な脆弱性の修正にはLinux Kernelのパッチ/更新が必要となります。
- /proc/sys/kernel/unprivileged_userns_cloneを0にすることで、攻撃者がユーザネーム空間に長いディレクトリをマウントすることを妨害します。しかしながら、攻撃者はFUSEを代わりに用いて長いディレクトリをマウントすることが可能です。これに関しては偶然systemdの脆弱性(CVE-2021-33910)を見つけたため、充分に確認をしている状態ではありません。
- /proc/sys/kernel/unprivileged_bpf_disabledを1にすることで、攻撃者がkernelにeBPFプログラムをロードすることを防ぎます。しかしながら、攻撃者は変わりに他のvmalloc()されたオブジェクトを狙えます。これに関しても、Qualysでは可能性を詳しく調査していません。
- systemdの脆弱性(CVE-2021-33910)
こちらは緩和策は見つかっていません。
主なディストリビューションの対応方法
詳細は、各ディストリビューションの提供元にご確認ください
- Debian
- Red Hat Enterprise Linux/CentOS
- Ubuntu
- SUSE/openSUSE
- Arch Linux
対処方法
各ディストリビューションの案内に従い、アップデートを行ってください。全てのRed Hat製品でパッチが行き渡っているかを確認するには、Red Hat SatelliteやKatello、Spacewalk等を使うと管理が便利でしょう。
また、OSの再起動が発生しますので、pacemakerなどOSSのクラスタ製品やLifeKeeperなどの商用のクラスタリング製品を使うとサービス断の時間を最小限にすることが出来ます。
[参考]
Qualys Security Advisory Sequoia: A deep root in Linux’s filesystem layer (CVE-2021-33909)
Qualys Security Advisory CVE-2021-33910: Denial of service (stack exhaustion) in systemd (PID 1)
セキュリティ系連載案内
- OSSセキュリティ技術の会による日経Linuxでの連載「IoT時代の最新SELinux入門」がITPro上で読めるようになりました。技術の会代表で第一人者である中村さん等による、最新のSELinuxの情報やコマンド類等も更新されているのでお薦めです。
- OSSセキュリティ技術の会によるThinkITでの連載「開発者のためのセキュリティ実践講座」がThinkIT上で開始しました。技術の会の中の人間で、最新の代表的なOSSセキュリティ技術を紹介していきます。
- OSSセキュリティ技術の会により、ThinkITでLinuxSecuritySummit 2018のレポートが紹介されています。
- OSSセキュリティ技術の会の面により、@ITで「OSS脆弱性ウォッチ」が連載されています。
- OSSセキュリティ技術の会の面により、@ITで「OpenSCAPで脆弱性対策はどう変わる?」が連載されています。
- OSSセキュリティ技術の会のメンバーにより、@ITで「Berkeley Packet Filter(BPF)入門」が連載されています。
CM
こちらで小学生の勉強支援サイトをオープンしました。算数のプリント(都度、自動生成)が無料でダウンロードできます。コンテンツは未だ少ないですが、徐々に増やしていきます。