こんにちは。ニフティ)セキュリティチームの齊藤(貴)です。
ニフティグループのセキュリティに関すること全般を担当しています。
この記事はニフティグループ Advent Calendar 2018の23日目の記事です。
明日からクリスマス本番です。1年でもっともイベントが集中するときだけに、フィッシングメールも趣向を凝らしたものがいろいろ出てきます。楽しみですねぇ~~!!
##2018イチの脆弱性##
今回はセキュリティ担当の私が担当していますので、今年イチウケの脆弱性についてです。
セキュリティを担当していると脆弱性に関するリサーチ業務は欠かせません。
日々さまざまな脆弱性情報が出ている中で、自社に影響するような脆弱性について調査しその影響度を判断し、エンジニアの方々にアナウンスするのも大事なお仕事です。
そんな中で、今年イチウケなのが、ずばり
CVE-2018-19788:PolicyKitの脆弱性
です。
どんな脆弱性かと言うと・・・
まずはCVE番号はMITERが発行していますのでこちらの辞書を調べてみましょう。
Descriptionの部分をみると
「A flaw was found in PolicyKit (aka polkit) 0.115 that allows a user with a uid greater than INT_MAX to successfully execute any systemctl command. 」
となっておりだいたい予想がついてきました。
さらにReferencesの部分をみるといくつかのリンクがはられており、詳細な内容がわかります。
まずはこの脆弱性を利用するには条件があることがわかります。
・OSにログインできること
・ユーザID(uid)がintのMAX値より大きい値であること
###ポイント###
はい、今回の脆弱性のポイントはここです!
uidがintのmax値より大きい
つまり、uidが2,147,483,647より大きい数字で作っている場合。
・・・・んー、そんなuidをふる管理者っているのかな。
まぁIDをいくつかの数字の区分にわけてそれぞれに意味をもたせて作成することはあるにはあるんですが、LinuxのログインIDだし・・・。
仮に他の脆弱性があったとして、この脆弱性を利用するためにuidをint以上に指定してユーザを作成して・・・ってユーザを作成できる時点で管理者権限になってますので、もっと他のことができそうです。
##検証環境つくって実践##
では、さっそくこの脆弱性を試してみましょう。
まずは、Linuxを用意します。
(とあるクラウドサービスでCentOS7.5のイメージで立ち上げてみました。)
そして、対象モジュールのバージョンを確認。
「0.112」となっているので今回の脆弱性に該当していることがわかります。
最後に今回のポイントである特殊なuidをもつユーザを作成して準備完了です。
今回は違いを確認するために
・「2147483647」というuidをもつ「intmax」
・「2147483648」というuidをもつ「intover」
の2ユーザを作成してみました。
まずは正常な場合を実験します。
intmaxユーザでログインして、idがInt内に収まっていることを確認して
systemctlでsshdを落とそうとしてみます。
ちゃんとrootユーザのパスワードを要求されて拒否られました。
続いて、おもしろuidを持つユーザ。
systemctlとかで適当なデーモン落としてみましょうw
なんかエラーっぽいものが出ます。でも終了コードは「0」が返ってます
果たして成功したのか!!
sshd死んでます・・・。
実行方法も簡単ですしもうやりたい放題ですね。
ちまちまデーモンを落としてないで、シェルを手に入れましょう。
idをうつと「0」になってますね。rootです。
何でもできますね。
netcatなどを立ち上げてリモートからコマンドを打てるようにしても面白いかもしれません。
(※検証環境です)
いった感じで、今年でイチウケの脆弱性でした。
来年も目が離せないです!