この記事は
- Linuxカーネルのやばげな脆弱性CVE-2016-7117の対応をした時のメモです
CVE-2016-7117
この辺によると、
Linux Kernel の net/socket.c の __sys_recvmmsg 関数には、解放済みメモリの使用 (Use-after-free) により、任意のコードを実行される脆弱性が存在します。
で、
基本値: 10.0 (危険) [NVD値]
攻撃元区分: ネットワーク
攻撃条件の複雑さ: 低
攻撃前の認証要否: 不要
機密性への影響(C): 全面的
完全性への影響(I): 全面的
可用性への影響(A): 全面的[参考] CVSS v3 による深刻度
基本値: 9.8 (緊急) [NVD値]
攻撃元区分: ネットワーク
攻撃条件の複雑さ: 低
攻撃に必要な特権レベル: 不要
利用者の関与: 不要
影響の想定範囲: 変更なし
機密性への影響(C): 高
完全性への影響(I): 高
可用性への影響(A): 高
なんかやばそうですね。。
再現・影響チェック
reproducerツール
- RedhatのBugzillaを見ていたところ、この投稿にreproducerツールがついていました。
- これを使うことで、脆弱性の再現=チェックができるようです
ツールのコンパイル
- 下記の手順でコンパイルします
# wget https://bugzilla.redhat.com/attachment.cgi?id=1227131 -O try_recvmmsg.c
# yum install -y glibc-static
# gcc -Wall -Werror -pthread -static try_recvmmsg.c -o try_recvmmsg
- 若干warningが出たりしますが、try_recvmmsgという実行ファイルがカレントディレクトリに出力されます
ツールの実行
- 単発で実行してみます
# ./try_recvmmsg
++ running!
++ no panic? got hello!.
- このメッセージが出た時点でだめっぽいです
- 下記のように大量実行すると、数分後にサーバがハングして謎のメッセージがたくさん出ました
# while true;do ./try_recvmmsg; done
カーネルアップデート
- アップデートします
# yum update
ツールの再実行
- 再度実行してみると何もメッセージが出なくなっていました。直ったのでしょう。
# ./try_recvmmsg
(何も出ない)