JDK security vulnerability

Javaの脆弱性がちょっと話題になってますね。リンクをクリックするだけで感染するなんて、かなり怖いです。北村聡士 @satooshi_jp です。

さて、自分のMacにインストールしていたJDKのバージョンはいくつだったかな?と思い調べてみるとまさかのJDK6!そういえばAppleはJDK7を提供しないことになり、Oracleが提供することになったのでした。なので、JDK7をインストールしてみました。

で、結論から言うと、タイトルの通りですが、

  • Appleの提供しているJDK6は決してアンインストールしてはいけない

です。理由はよく分かりませんでした。試したのはMacBook Pro 13 Retina(OS X 10.8.2)です。

How it works

MacにおけるJDKのインストールパスは実は3種類あります。

  1. /System/Library/Java/JavaVirtualMachines
  2. /Library/Java/JavaVirtualMachines
  3. /Users/yourname/Library/Java/JavaVirtualMachines

それぞれ、

  1. Apple JDKのパス
  2. 追加でインストールするJDKのパス
  3. ユーザー毎にインストールするJDKのパス

という役割になっているみたいです。1はApple提供のものなので、JDK6がインストールされていて、Oracle提供のJDK7は2にインストールされます。自分の環境では3はありませんでした。

ちょっとややこしいのが次のパスにも似たようなものが置いてある点。

  • /System/Library/Frameworks/JavaVM.framework

どうやらMacはここを見て、どのJDKを使用するかを判断してそうなんですが、さらに/usr/libexec/java_homeなんてコマンドもあったりして、結局良く分かりません。。

Java app won't work if I remove JDK under /System/Library/Java/JavaVirtualMachines

で、本題の話ですが、1のパスを削除すると、JDK7がインストールされていたとしても、Javaアプリ(Dockから起動できるタイプのデスクトップアプリ)は起動しなくなります。

Java6が必要です(キリッ

みたいなメッセージが出たと思います。-vmでJDK7の方を指定してもだめぽげ。

さらに、/System/Library/Frameworks/JavaVM.frameworkを消してみると、すでに新しいバージョンがインストールされています、というメッセージが出て、Apple JDKの再インストールすらできなくなります。危ないですね。。

ちなみに、他のブログで良く見かける/Application/Utilities/のJava preferencesは10.8だとありませんのでご注意を。これがあるのは、たぶんアップグレードした場合だけじゃないかと思います。

あ、肝心のwebブラウザのJavaを無効にする方法は、この辺に載ってます。

Reference