
CVE-2016-0728(Linux の参照カウント漏洩/オーバーフローのバグ)のテストベッド
このリポジトリには、CVE-2016-0728(Linux の参照カウント漏れとオーバーフローにより use-after-free を引き起こすバグ)のテストプログラムが含まれています。
このバグは Perception Point によって発見・解説されました。私は彼らとは一切関係ありません。
Welcome to the CVE-2016-0728 testbed
sizeof(struct msg_msg) == 0x30, sizeof(struct key) == 0xb8
PID: 27673, UID: (1000/1000)
Keyring: 1b66e5d6, "test-1a328d6e"
Usage: 1
Press a key: (f)ork (i)ncref (a)uto-incref (r)evoke (h)eap-spray (s)hell (q)uit
私のテストシステムでは、以下の方法で root シェルを取得できました。
revoke を呼びます。execl("/bin/sh", "sh", NULL) を実行します。状況を確認するには watch -n0.1 cat /proc/keys を実行すると便利でした。
このコードは x86-64 でのみテスト済みですが、他のアーキテクチャでも動作するはずです。マジックオフセットは使わず、Linux ヘッダから構造体定義をコピーして sizeof を使用しているためです(ただし、prepare_kernel_cred と commit_creds のアドレスはハードコードしています)。