質問: 説明していただけるときの、参考になれば幸いです。 * Java SE(?)を使っている(SEとかあまりわかっていません) * `java.net.ServerSocket`を使ったことはある * これでも恥ずかしながらセキュリティスペシャリストの資格がある
回答: Javaの脆弱性で多いのは、サンドボックスという機能に関するものです。 Javaが出た当初、Javaアプレットというものがよく使われていました。これは、Javaのプログラムをブラウザ上で動作させるための仕掛けです。 インターネット上のウェブサイトに置かれたプログラムが勝手に動作すると、非常に危険です。たとえば、悪い人が作ったプログラムが、パソコンのローカルファイルの内容を読み書きできると、情報が簡単に漏洩します。このため、アプレットからはJavaのごく一部の機能だけが利用できるように制限されています。この制限機能のことを「サンドボックス」といいます。 このサンドボックス機能にしばしば脆弱性があり、「アプレットからはできないはずのことができてしまう」というのが、Javaの脆弱性の典型例です。この種の脆弱性は、ウェブサイト上の「ウイルスに感染する仕組み」として悪用されることが多く、「サイトを閲覧しただけでウイルスに感染する」という結果をもたらします。ただし、パソコン側でJREを無効化していたり、JREの脆弱性のないバージョンを使っている場合は問題ありません。 ウイルス感染が心配なのでJREを無効化しましょう、という意見がありますが、これは上記のような文脈からです。 追記します。 サーバー側でのJava本体の脆弱性による侵入というのは、あまりないと思います。 NTTデータ先端技術株式会社にて、さまざまな脆弱性の侵入実験を公表していますが、Javaに関するものは、すべて端末側で脆弱性が動いています。 site:www.intellilink.co.jp/article/vulner/ java - Google 検索 サーバーに関係するものとしては、古いですが、UTF-8の非最短形式の扱いに関するものがあります。 参考: 文字コードの脆弱性はこの3年間でどの程度対策されたか? この問題は、Java SE 5 Update 17 および Java SE 6 Update 11 で修正されています。 一応これはJavaの脆弱性として認識されているものですが、アプリケーション側でも対処は可能で、Javaとアプリケーションのどちらに責任があるかというと、グレーゾーンに属すると思います。