Linuxでプロセスの権限を設定するpolkit、7年以上前から存在した特権昇格の脆弱性が見つかる 38
ストーリー by headless
時間差 部門より
時間差 部門より
多くのLinuxディストリビューションに標準でインストールされるシステムサービス「polkit」に7年以上前から存在していた特権昇格の脆弱性が修正された(The GitHub Blogの記事、 The Registerの記事、 Computingの記事、 CVE-2021-3560)。
polkitは非特権プロセスが特権プロセスと通信するためのポリシーを定義し、認証処理を行うツールキットだ。systemdがpolkitを使用するため、systemdを使用するLinuxディストリビューションはpolkitも使用することになる。今回発見された脆弱性は、polkitが認証処理を行っている最中にリクエスト元のプロセスを終了させることで、rootプロセスからのリクエストとして認証してしまうというものだ。
この脆弱性が導入されたのは2013年11月のコミット(バージョン0.113)だが、メジャーなLinuxディストリビューションの多くに脆弱性のあるpolkitが含まれるようになったのはずっと最近のことのようだ。
Fadoraの場合は2014年12月リリースのFedora 21に脆弱性のあるpolkitが含まれているが、Red Hat Enterprise Linux(RHEL)が脆弱性を含むFedora 28ベースになったのは2019年5月リリースのRHEL 8となる。Debianはpolkitのフォークを使用しているが、脆弱性のあるバージョンを含む安定版はリリースされておらず、現在テスト中の次期リリースDebian 11 「Bullseye」にのみ脆弱性のあるバージョンが含まれる。一方、DebianベースのUbuntuは昨年4月リリースのUbuntu 20.04以降に脆弱性が含まれるとのこと。いずれの場合も、脆弱性は最新版で修正されている。
polkitは非特権プロセスが特権プロセスと通信するためのポリシーを定義し、認証処理を行うツールキットだ。systemdがpolkitを使用するため、systemdを使用するLinuxディストリビューションはpolkitも使用することになる。今回発見された脆弱性は、polkitが認証処理を行っている最中にリクエスト元のプロセスを終了させることで、rootプロセスからのリクエストとして認証してしまうというものだ。
この脆弱性が導入されたのは2013年11月のコミット(バージョン0.113)だが、メジャーなLinuxディストリビューションの多くに脆弱性のあるpolkitが含まれるようになったのはずっと最近のことのようだ。
Fadoraの場合は2014年12月リリースのFedora 21に脆弱性のあるpolkitが含まれているが、Red Hat Enterprise Linux(RHEL)が脆弱性を含むFedora 28ベースになったのは2019年5月リリースのRHEL 8となる。Debianはpolkitのフォークを使用しているが、脆弱性のあるバージョンを含む安定版はリリースされておらず、現在テスト中の次期リリースDebian 11 「Bullseye」にのみ脆弱性のあるバージョンが含まれる。一方、DebianベースのUbuntuは昨年4月リリースのUbuntu 20.04以降に脆弱性が含まれるとのこと。いずれの場合も、脆弱性は最新版で修正されている。
目がいっぱいあったから気づけた! (スコア:1)
*ただし7年以上かかった!
Re: (スコア:0)
目がいっぱいあればを単純に論拠にするのはまあ限界でしょうね。公開されていても見られない部分は見られない。
Re: (スコア:0)
7年もたっているのにDebianの安定版にはまだ採用されていなかったのか。枯れすぎだろ、Debian。
ざっと読む限り (スコア:1)
「要求してる奴のUIDを調べて0(=root)ならそのまま実行、それ以外は認証してOKなら続行、NGなら中止」みたいな処理をしてる所の「要求してる奴のUID調べる」の段階でエラーを適切にハンドルしてないせいみたいね
要求してる奴のUID調べる->要求元のプロセスが死んでるのでエラーが返る->エラーをチェックしてないせいでuidの値が不正な0(or不定?)でそのままrootからの要求と間違えて無条件に処理を続行
sudoとかでもちょいちょい「これは酷い…」的な奴出てるけどこれもなかなかに酷い
Re: (スコア:0)
この理屈だとsetuidされたプログラムを起動しまくってpidを再利用させる事ができれば、
setuidされていて実行可能なプログラムがある任意のuidに偽装可能だったりしそうな気も……
ハンドルで捕まえてれば平気かもしれんが。
しかしこういうモジュールが5年以上前のバージョン積んでる事があるってのもすごい話だ。
ちゃんとセキュリティに関わる更新が無いこと確認の上で古いバージョン使い続けていたのだろうか?
Re: (スコア:0)
ありがちなのは脆弱性修正関連の修正だけ入れるやつ。もちろんこれだと新しいバージョンではそもそも起きない脆弱性が無視されがち。
知ってた (スコア:0)
Linuxが脆弱なのは
Re: (スコア:0)
Linuxは結構な脆弱性が隠されていたりするから、あながち間違いではないけれど
そこを理解してつかいわけするとまぁ悪くはないね。
(セキュリティアプライアンス製品になるとベースがLinuxってことが大半だから
普通にLinuxとして使われる場合よりもアプライアンスとして動くときがやべーんですわ)
Re: (スコア:0)
カーネルとかに手を加える使い方をする場合、GPLの制限があるLinuxを避けて、
BSDベースにするアプライアンスもあるな
また、たとえLinuxベースにする場合でも、GPLv3汚染を避けて、GPLv3ライセンスのアプリはつかわないようにしたり
Re:知ってた (スコア:1)
Re: (スコア:0)
自分もセキュリティアプライアンス=*BSDって印象(BSDのが枯れてるイメージ)なんですが
> セキュリティアプライアンス製品になるとベースがLinuxってことが大半
ってどっかにデータありましたっけ?
Re: (スコア:0)
JVNとかでLinux系の脆弱性が出たあとで、雪崩のように出てくるアプライアンス名をさがしてみえけれ。
実施自分はそれぞれ物を持っているので実機をみるだけでもわかるけど、、、
Re: (スコア:0)
BSDベースのアプライアンスって今も残ってましたっけ?
Re: (スコア:0)
っ pfSence
Re: (スコア:0)
その通りですね。
ただ、現在の規模で脆弱性のないOSというのはなかなか想定できないので、どのOSでも脆弱性はあると想定して活用するのが望ましいと思います。
Re: (スコア:0)
脆弱性のないOSと脆弱なOSは違いますよ
Re: (スコア:0)
真逆ですものね。
Re: (スコア:0)
!脆弱性のないOSと脆弱なOSも違いますよ
Re: (スコア:0)
脆弱:そうであるか否か
脆弱性:無い、少ない、多い、あるいは具体的な数
ですもんね
まあ、「脆弱性が無い」なら「脆弱でない」くらいは言えるでしょうが
Re: (スコア:0)
Re: (スコア:0)
これ、Linuxの問題か?
多くのLinuxディストリビューションで使われているサービスの問題だろ。
Re: (スコア:0)
じゃあLinuxの問題だね
Re:知ってた (スコア:1)
systemdの問題です。Linuxの問題ではありません。
故に余は叫ぶ、systemd滅ぶべし
Re: (スコア:0)
Linuxを滅ぼせば解決❤
Re: (スコア:0)
なんでsystemdを悪く言う人ってこの程度の理解度で騒ぐのかね。
書いてある通り、polkitは独立したサービスで、systemdは利用してるだけ。
そして、なんでrootからのリクエストとみなされるかというと、想像だけど、プロセスが終了するときに親であるinitが引き取るから。
システムコールの最中に死ぬと親の終了処理がブロックさせるからこういうことになるんでしょう。
完全にlinux(というかUNUX全般)の構造の問題だよ。
Re: (スコア:0)
完全に妄想で草。
PoCでもshellからバッググラウンドで実行したdbus-sendをkillしてるだけなのに、initとか言い出す意味が分からんわ。
Re: (スコア:0)
間違いでは?Slackware は systemd 使ってないけど polkit のアラート出てる。
Re: (スコア:0)
systemdの問題です。Linuxの問題ではありません。
そうですsystemdはLinuxをも内包するのです
# 次回、物理キーボードの攻防!お楽しみに♪
Re: (スコア:0)
systemdなんて使う方が悪い
Re: (スコア:0)
=Linuxなんて使う方が悪い
Re: (スコア:0)
Linix以外のOSでも広く使われているならその言い訳も通るが
>systemdはLinux用に設計され、Linux API専用にプログラミングされている
完全アウトでしょ
最後にこれを書けば安心 (スコア:0)
悪用されたという報告は現在のところ確認されていない
Re: (スコア:0)
悪用したという報告も現在のところ確認されていない
特権とは (スコア:0)
我流の勉強しかしてないので正しくはどうなのかわからないけど、特権昇格ってなんかOS(カーネル)が使うCPUの特権モードになれるみたいな印象があるな。rootになれるというのとはちょっと違う。
まあ、rootになれればその先でOSのレベルにまで手を出すこともできるけど。
現在のバージョンを見てみたら (スコア:0)
0.119らしい。0.のバージョン番号はまだ正式なリリースではないですよ、ベータ版ですよ、だからバグとか入っているかもしれないですよ、使用は自己責任でね…という意味かと思っていたが、今ではそうでもないのだろうか。
Re: (スコア:0)
まるでバージョンが1になったらバグがなくなるみたいな言い方だな。
>今ではそうでもないのだろうか。
今ではも何も、semverに従いますとかでもない限り、バージョン番号なんて数字以上の意味はない。
Re: (スコア:0)
プログラムの成熟は、バグの過多ではないと思うぞ。0.とわざわざつけているのはそれなりの意味があると思うな。少なくとも作者にとっては。