mhattaによる
2008年02月11日 10時00分の掲載
確かにHotfixだ部門より。
確かにHotfixだ部門より。
本家/.の記事より。Linuxカーネルのバージョン2.6.17から2.6.24.1までのvmsplice()システムコールに穴があり、それを利用するとroot権限が取得できてしまうようだ。検証用コードも存在する。
対策としては今の所vmsplice()を外してカーネルを再コンパイルすることしかないらしい。穴を突いて動作中のカーネルをオンメモリパッチするアレゲな解決方法も既に公開されている。
関連ストーリー
この議論は賞味期限が過ぎたので、保存されている。
新たにコメントを書くことはできない。
カーネルのリリース日 (スコア:5, 参考になる)
昨年……じゃないや一昨年の2006年6月17日ですね。(いまだに2007年脳)
2.6.24.1は今年の2月8日(ってまだ3日前か)にリリースされた最新版。
で、The Linux Kernel Archives [kernel.org]を見ると2.6.25 RC版が出ている模様。
参考:2.6.25 RC版のChangelog [kernel.org]
これには本件の修正も含まれているようです。
以下にChangelogから該当部分と思われる部分を、メールアドレス等の行は削除して引用。
>commit 8811930dc74a503415b35c4a79d14fb0b408a361
>Date: Fri Feb 8 08:49:14 2008 -0800
>
> splice: missing user pointer access verification
>
> vmsplice_to_user() must always check the user pointer and length
> with access_ok() before copying. Likewise, for the slow path of
> copy_from_user_mmap_sem() we need to check that we may read from
> the user region.
Re:カーネルのリリース日 (スコア:2, 興味深い)
ローカルだから比較的マシだとはいえ結構強烈な穴だなぁ・・・
第三者からコンテンツ、特に実行可能な物を受け付けるホスティング屋さんには頭の痛い話な気がします。
で、もしかして例のLinux+Apacheワーム [slashdot.jp]ってこの穴を利用されたとか?
誰も信じちゃいけない、裏切られるから。
私を信じないで、貴方を裏切ってしまうから。
親コメント
Re:カーネルのリリース日 (スコア:2, 参考になる)
>It appears that the initial patch checked the input to vmsplice_to_user,
>but the exploit used vmsplice_to_pipe which remained open to the attack.
追加の修正パッチも流れてるのでもうすぐでしょう。
親コメント
Vine Linux=勝ち組 (スコア:3, おもしろおかしい)
検証用コードを実行 (スコア:3, 参考になる)
Debian etch
> uname -a
Linux mercury 2.6.18-6-686 #1 SMP Wed Jan 23 03:23:22 UTC 2008 i686 GNU/Linux
> ./a.out
-----------------------------------
Linux vmsplice Local Root Exploit
By qaaz
-----------------------------------
[+] mmap: 0x0 .. 0x1000
[+] page: 0x0
[+] page: 0x20
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4020
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0xb7ecd000 .. 0xb7eff000
[+] root
#
Debian etch (x64)
> uname -a
Linux uranus 2.6.18-5-vserver-amd64 #1 SMP Wed Sep 26 05:17:25 UTC 2007 x86_64 GNU/Linux
./a.out
-----------------------------------
Linux vmsplice Local Root Exploit
By qaaz
-----------------------------------
[+] mmap: 0x100000000000 .. 0x100000001000
[+] page: 0x100000000000
[+] page: 0x100000000038
[+] mmap: 0x4000 .. 0x5000
[+] page: 0x4000
[+] page: 0x4038
[+] mmap: 0x1000 .. 0x2000
[+] page: 0x1000
[+] mmap: 0x2b94e846e000 .. 0x2b94e84a0000
Illegal instruction
>
x32の方は、はあっさりrootになれました。
x64のほうは大丈夫でした。コードがx64に対応していないのか、x64では問題がないのか、vserverカーネルだからこのコードでダメなのかはわかりません。
酷い脆弱性なのに (スコア:2, すばらしい洞察)
Re:酷い脆弱性なのに (スコア:2, すばらしい洞察)
人々もMS叩きぐらいしかやることが無いんだよ。
親コメント
Re:酷い脆弱性なのに (スコア:5, 参考になる)
これはいわゆる「local exploit」というやつで、本来ローカル権限しか与えられてないはずのユーザが、
このコードをコンパイルして実行すればroot権限をとれてしまうという問題なので。
既存のソフトウェアでvmspliceを使っていて、それをネットワーク越しにexploitされる
「remote exploit」とはちょっと話が違います。
が、既存のユーザ認証の仕組みを台無しにしてしまうと言う意味で、結構深刻な脆弱製と言えます。
親コメント
Re:酷い脆弱性なのに (スコア:4, 参考になる)
こちら [nikkeibp.co.jp]に記事があがっていますが、
デフォルトで動作しているものでなおかつ、カーネルのTCP/IPスタックレベルでの問題なので、
普通のセキュリティーソフトでは対応できなかっただろう、という話も…。
ムービーデモ [immunityinc.com]が公開されています。
# exploitコード動いたー(^o^)/
# 実際に動かしてみると恐怖が広がりますネ。
親コメント
Re:酷い脆弱性なのに (スコア:2, おもしろおかしい)
あ、アンタは知らないかもしれないけどねっ…
べ、別に(local exploitが見つかったのは)初めてだったってわけじゃないんだからっ!
勘違いしないでよっ! いままでだって何度も経験あるんだからねっ! [google.co.jp]
#と書くと初めてのような気がしてきた
# mishimaは本田透先生を熱烈に応援しています
親コメント
応急処置 (スコア:2, 参考になる)
$ uname -rm
2.6.18-53.1.6.el5 i686
https://bugzilla.redhat.com/show_bug.cgi?id=432251#c10 [redhat.com]
のカーネルモジュールをロードしたところ、私の環境では安定しているようです。
Re:応急処置 (スコア:5, 参考になる)
やっていることは vmsplice のシステムコールを ret命令(0xC3) で つぶしているだけです
仮にそのパッチが当たっても,システムコールが正常に動作しないので,アプリケーションは正常に動作しません.
アプリケーションの誤動作などでファイルが壊れるまえに,カーネルをアップグレードしましょう.
親コメント
Re:応急処置 (スコア:3, おもしろおかしい)
参考になった気分をつつく事ができるのです。
しかしモデレーションはあくまで主観にもとづいてつけられる
ポイントですし、嘘を嘘と見抜けない人にもモデレート権は与えられるのです。
なので「参考になる」モデは正しくは「参考になる(かもしれない)」
ポイントなのです。「面白おかしい」は確かに面白おかしく思った人が
いたということなので、「(一部の人には)面白おかしい」なのです。
いや、頼むからこの投稿には参考になるをつけないで! 全然参考にならないから!!
親コメント
Re:実際の所 (スコア:1)
deb 系だともっと簡単。
でも、なにか事情があるとかじゃなければ、普通はディストリビュータの更新を
信頼して任せとけば十分ですよ。
だって、何万、何十万というユーザーが、わざわざ手動でパッチをあてたりしな
くてもなくてもいいように、パッケージ管理システムというものが存在している
わけだし。
それに、手動でやると致命的なミスを犯すこともありますしね。
親コメント
Re:忘れ物をお届けにあがりました (スコア:1)
親コメント
Re:忘れ物をお届けにあがりました (スコア:1)
#あれ、違う?
親コメント