セキュリティ

Ubuntuに特権ユーザーを誰でも簡単に作成できてしまう脆弱性が見つかる


Linuxディストリビューションとしてトップシェアを誇るUbuntuに、標準ユーザーから特権ユーザーを簡単に作成できてしまう脆弱性が見つかりました。

How to get root on Ubuntu 20.04 by pretending nobody’s /home - GitHub Security Lab
https://securitylab.github.com/research/Ubuntu-gdm3-accountsservice-LPE

Ubuntu fixes bugs that standard users could use to become root | Ars Technica
https://arstechnica.com/information-technology/2020/11/ubuntu-fixes-bugs-that-standard-users-could-use-to-become-root/

脆弱性を発見したGitHubのエンジニア・Kevin Backhouse氏は、特権ユーザーを作成する一連の流れをムービーにまとめて公開しています。

Ubuntu 20.04 local privilege escalation using vulnerabilities in gdm3 and accountsservice - YouTube


まずは標準ユーザー「junior」で「ln -s /dev/zero ~/.pam_environment」というコマンドを実行し、シンボリックリンクを作成。/dev/zeroはヌル文字を読み出せる特殊なファイルです。


続いて設定画面で言語を変更すると……


「accounts-daemon」という名称のデーモンが出現。


accounts-daemonのプロセスID「597」に対し、killコマンドでSIGSTOPシグナルを送信。accounts-daemonを一時停止状態にします。


accounts-daemonを一時停止した後、始めに作成したシンボリックリンクを削除します。


Backhouse氏が「重要なステップ」と語るコマンド「nohup bash -c "sleep 10s; kill -SIGSEGV 597; kill -SIGCONT 597"」を実行。このコマンドを実行することで、「10秒間待機した後、accounts-daemonでセグメンテーション侵害を引き起こした上でデーモンを再開する」という操作が行われます。


先ほどのコマンドがバックグラウンドで10秒間待機状態になっている間に、juniorユーザーからログアウト。


すると、Ubuntuインストール時に表示される初期設定画面が現れました。


初期設定で作成するユーザーは自動的に特権ユーザーとなるので……


標準ユーザーから特権ユーザーを作成しログインすることで、OSを自由に操作することができるようになってしまいました。


この特権ユーザー作成は2つの脆弱性をもとに実行されているとBackhouse氏は説明。1つ目の脆弱性はaccounts-daemonを生成する「accountsservice」パッケージに対し、Ubuntuが加えた独自処理に由来するものです。Ubuntuのaccounts-daemonは「.pam_environment」というファイルの有無を確認する処理が追加されており、その際に機密情報を保護するためにデーモン権限の降格が行われていました。この脆弱性を利用することで、標準ユーザーからaccounts-daemonのセグメンテーション侵害を引き起こすことができるようになります。


2つ目の脆弱性はUbuntuが採用しているディスプレイマネージャーGDM3に存在していたのこと。GDM3はユーザーが存在しない場合は初期設定画面を表示するようになっており、ユーザーの有無を判定するのにaccounts-daemonの応答を利用していました。しかし、accounts-daemonからの返答が無い場合、タイムアウトによってあらかじめ設定されている「ユーザー無し」の初期値が読み込まれるようになっていたとのこと。accounts-daemonのセグメンテーション侵害を引き起こすことでタイムアウトを発生させ、GDM3に初期値を読み込ませれば、初期設定画面を表示して特権ユーザーの作成が可能な状態でした。


Backhouse氏がこの脆弱性を発見したのはまったくの偶然だったようで、accountsserviceに関する脆弱性の調査時にたまたま「.pam_environment」をシンボリックリンクとする実験を行っており、たまたま非特権でaccounts-daemonにSIGSEGVシグナルを送信したところ、初期設定画面が表示され脆弱性の発見に至ったとのこと。なお、この脆弱性はUbuntu 16.04から20.10までのデスクトップバージョンに影響し、2020年11月3日に修正済みパッケージが公開されています。

この記事のタイトルとURLをコピーする

・関連記事
UNIX/Linuxの「デーモン」はこうやって作る - GIGAZINE

Windows 7が依然としてデスクトップOSのシェアで20%以上を占めておりWindows XPも根強く生き残っている - GIGAZINE

Windowsのパスワードを「chntpw」で強制リセットしてログインできなくなったPCを使えるようにする方法 - GIGAZINE

マテリアルデザインなデスクトップがヌルヌル動くLinuxのGNOME Shell拡張「Material Shell」レビュー - GIGAZINE

in ソフトウェア,   セキュリティ, Posted by log1n_yi

You can read the machine translated English article here.