ディストリビューションがWebKitGTK+のアップデートを行わず、脆弱性を残したままにしている
GNOMEのWebKitGTK+プロジェクトで活動しているMichael Catanzaro氏が私見であるとしながらも、WebKitGTK+をアップデートしてもWebKitGTK+を配布しているディストリビューションやコミュニティーがアップデートされたWebKitGTK+をユーザーに配布せず、脆弱性や不具合をそのままにしている、と警鐘を鳴らしています。- On WebKit Security Updates(2016/2/1)
WebKitとGTK+
まずは、GTK+とWebKitの関係です。WebKitとは
WebKitとは、HTMLを解釈してユーザーに整形した文章や画像などを表示するソフトウェアです。このようなソフトウェアのことを、「HTMLレンダリングエンジン」と言います。
「HTMLレンダリングエンジン」は、ブラウザーにとって要となるソフトウェアです。
ユーザーから見ると、サイトが正しく表示されるか、パフォーマンスは良いか、メモリの使用量は適切か、といった視点で見ることが多いでしょう。
ブラウザーは「HTMLレンダリングエンジン」を実装しています。
「HTMLレンダリングエンジン」には、いくつか種類があります。
WebKitも「HTMLレンダリングエンジン」の1つです。
WebKitといえばSafari
WebKitを実装しているブラウザーと聞いて真っ先に候補に上がるのがSafariでしょう。SafariはOS Xのデフォルトのブラウザーです。
Webkitは、Appleが2001/6/25にKDEのHTMLレンダリングエンジンである「KHTML」と、同様にKDEのJavaScriptエンジンである「KJS」をフォークして開発したものです。
その後2005/6/7にWebKitはオープンソースとして公開されます。
Webkit2へ
2010/4/8、WebKitプロジェクトはWebKitを再設計したWebKit2を開発するとアナウンスしました。2011/7/20、Safari 5.1でWebKit2に移行しました。
ここではまとめてWebkitと表現します。
Google ChromeもWebKitを採用していた
「Google Chrome」も 「HTMLレンダリングエンジン」にWebKitを採用していました。2013/4/3に開発方針の違いからWebKitをフォークし、Blinkへ移行しています。
WebKitとGTK+
GTK+はユーザーインターフェースを構築するためのフレームワークです。GTK+はGNOMEが主体となって開発しているフレームワークです。
GNOMEが開発するアプリの多くは、このGTK+を利用してユーザーインターフェースを構築しています。
Ubuntuでデフォルトでインストールされるアプリの多くは、GNOMEが提供しているアプリです。
Ubuntuでも多くの場面でGTK+が使用されています。
このGTK+でWebkitを利用できるように移植を行っているプロジェクトが、WebKitGTK+です。
WebKitGTK+は、GNOME環境における標準的な 「HTMLレンダリングエンジン」です。
例えば Epiphany(GNOME Web)やMidoriは、WebKitGTK+を利用したブラウザーです。
他にも様々なアプリでWebKitGTK+が利用されています。
- Anjuta
- Banshee
- Bijiben (GNOME Notes)
- Devhelp
- Empathy
- Evolution
- Geany
- Geary
- GIMP
- gitg
- GNOME Builder
- GNOME Documents
- GNOME Initial Setup
- GNOME Online Accounts
- GnuCash
- gThumb
- Liferea
- Midori
- Rhythmbox
- Shotwell
- Sushi
- Yelp (GNOME Help)
WebKitGTK+の種類
GTK+がそうであるように、WebKitGTK+には複数の種類(メジャーバージョン)が存在しています。WebKitGTK+ | 概要 |
---|---|
webkitgtk-1.0 | GTK+2向けWebKit1 |
webkitgtk-3.0 | GTK+3向けWebKit1 |
webkit2gtk-3.0 | GTK+3向けWebKit2 |
webkit2gtk-4.0 | GTK+3向けWebKit2 |
「webkitgtk-X.0」は、2014/3に「WebKitGTK+ 2.4」がリリースされた後、削除されました。
2014/9にリリースされた「WebKitGTK+ 2.6」では、「webkit2gtk-4.0」のみリリースされました。
WebKitGTK+を利用するアプリがどのWebKitGTK+を利用するかにより、サポート状況が変わります。
推奨されるのは、「webkit2gtk-4.0」の利用です。
UbuntuとWebKitGTK+
Ubuntuでは、公式のリポジトリーでWebKitGTK+を提供しており、ユーザーはWebKitGTK+を簡単にインストールできます。しかしWebKitGTK+が配置されているリポジトリーは「universe」リポジトリーであり、「universe」リポジトリーに配置されているソフトウェアはサポートの対象になりません。
WebKitGTK+に脆弱性が見つかりWebKitGTK+がアップデートされても、アップデートされたWebKitGTK+が配布されるとは限りません。
ブラウザー(HTMLレンダリングエンジン)の脆弱性は致命的な問題につながります。
WebKitGTK+を使用したブラウザーを利用する場合は、この点に注意する必要があります。
FirefoxやThunderbird
Ubuntuにデフォルトでインストールされるブラウザーやメールクライアントアプリは「Firefox」や「Thunderbird」であり、これらのソフトウェアは「main」リポジトリーにあります。「main」リポジトリーにあるソフトウェアは、サポートの対象になります。
また「HTMLレンダリングエンジン」はWebKitGTK+ではなくGeckoを採用しています。
「Firefox」のサポートは以下のようになっています。
同様に「Thunderbird」のサポートは以下のようになっています。
以下Ubuntuに関する部分の意訳です。
注意:
この投稿の内容は私見であり、私の雇用者やWebKitGTK+プロジェクトの公式見解ではない。
主要なブラウザーは、セキュリティーアップデートをユーザーに直接配布している。
なので多くのユーザーは、セキュリティーアップデートに関する心配をしなくても良い。
しかしLinuxディストリビューションのユーザーは、ディストリビューションのアップデートポリシーに影響を受ける。
WebKitGTK+の開発元が脆弱性を修正したWebKitGTK+をリリースしても、ディストリビューションがその修正されたWebKitGTK+をタイムリーに配布するとは限らない。
昨年AppleはWebkitの100を超える脆弱性を修正した。
Appleは修正されたセキュリティーアップデートをタイムリーに配布するため、Appleのユーザーはセキュリティーアップデートに関する心配をしなくても良い。
WebKitGTK+も同様に修正されたWebkitを取り込み、リリースを行っている。
歴史的にWebKitGTK+では、セキュリティーアップデートとというリリース方式を採用していない。
もちろん不具合や脆弱性の修正を行ったWebKitGTK+をリリースしていたが、脆弱性を識別するCVEを発行していなかった。
開発者は、セキュリティーの問題をCVEで追跡する。
CVEがないということはセキュリティーの問題がないということであり、ディストリビューションはいくつかの例外を除き修正されたWebKitGTK+をユーザーに配布しなかった。
この状況は、多くのアプリにとってそれほど問題のある話ではない。
しかしウェブブラウザーやメールクライアントアプリからすれば、致命的な問題である。
そこで我々はこの状況の改善するため、2015/1/26に初めてセキュリティアドバイザリーをCVEの識別子と共に発行した。
このセキュリティアドバイザリーの発行により、各ディストリビューションが修正されたWebKitGTK+をユーザーに配布してくれることを期待した。
その後Web Engines Hackfestイベントでの結果から、2回目のセキュリティアドバイザリーを2015/12/28に発行した。
このセキュリティアドバイザリーには、130を超える脆弱性が報告されている。
ディストリビューションやコミュニティーが気づけるよう、oss-securityメーリングリストにこの件を投稿した。
これが今から1ヶ月前の出来事である。(2016/1)
[Ubuntuの対応]
UbuntuのWebKitGTK+のアップデートには一貫性がない。
Ubuntu 14.04リリース時、インストールできるWebKitGTK+のバージョンは「2.4.0」であった。
その後アップデートされ、「2.4.8」がインストールできるようになった。
しかし8ヶ月以上前にリリースされた「2.4.9」は未だにUbuntuのユーザーに配布されていない。
Ubuntu 15.10リリース時、インストールできるWebKitGTK+のバージョンは「2.8.5」であった。
その後アップデートされたWebKitGTK+はUbuntuのユーザーに配布されていない。
最新版のWebKitGTK+と比較すると、「2.8.5」には約40の脆弱性が残ったままになっている。
Ubuntuでは、WebKitGTK+が「main」リポジトリーではなく「universe」リポジトリーにあり、セキュリティーサポートの対象から外されている。
Ubuntuの多くのアプリで使用されているWebKitGTK+が「universe」リポジトリーにあることにUbuntuユーザーは驚くだろう。
[WebKit API]
WebKit2のAPIに対応したWebKitGTK+ 2.0は、2013/5に安定版をリリースした。
WebKitGTK+ 2.0には、以下の3種類のAPIを含んでいる。
- webkitgtk-1.0(GTK+2向けWebKit1)
- webkitgtk-3.0(GTK+3向けWebKit1)
- webkit2gtk-3.0 (GTK+3向けWebKit2)
2014/5にWebKitGTK+ 2.4をリリースした後、WebKit1 APIを削除した。
WebKit1 APIを利用していたアプリは、WebKit2 APIへ移行する期間が丸1年あった。
2014/9にリリースしたWebKitGTK+ 2.6では、webkit2gtk-4.0のみリリースしている。
webkit2gtk-4.0はwebkit2gtk-3.0とAPI/ABIの互換性があり、ほぼ同じだ。
できればGTK+ 4.0までこの互換性を確保するつもりだ。
WebKit1 APIを利用しているアプリをWebKit2 APIに対応させるには、それ相応のコストが必要だ。
まずGTK+2で動作するアプリは、GTK+3に移行する必要がある。
WebKit2 APIではWebViewにGTK+ウィジェットを埋め込むことはできない。
似たような動作を提供するには、HTML5で書き直す必要がある。
さてご存知の通りWebKit2 APIに移行していないアプリがたくさんある。
ディストリビューションがWebKitGTK+ 2.4を提供しないとなると、動作しなくなるアプリが出てくる。
そこでディストリビューションは、WebKitGTK+ 2.4と新しいバージョンのWebKitGTK+ を提供する。
しかしWebKitGTK+ 2.4は昨年の5月以降アップデートしておらず、約130の脆弱性が残ったままだ。
[どうすれば]
WebKitGTK+ 2.4から新しいWebKitGTK+に移行していないアプリのためにどうすればよいのだろうか?
いくつか考えられることがある。
1.WebKitGTK+ 2.4にもセキュリティーの修正を適用する(バックポートする)
この方法は非常に時間がかかる作業であり、負担が大きい。
この方法は困難だ。
2.webkitgtk-1.0とwebkitgtk-3.0を復活させる
現在のWebKitGTK+に廃止になったwebkitgtk-1.0とwebkitgtk-3.0を復活させる方法だ。
これも大変な作業だ。
元々これらのメンテナンスコストを削除するために廃止したのだ。
3.WebKitGTK+ 2.4以前のパッケージを削除する
ディストリビューションがWebKitGTK+ 2.4以前のパッケージを提供しない方法だ。
この方法は、アプリのWebKit2 APIへの移行を強要する。
ただ多くのアプリは、WebKit2 APIへの移行に人手を割けないだろう。
結果、移行できないアプリは利用できなくなってしまう。
しかしこの方法が最も現実的な方法だろう。