- StarDictで、X11環境においてユーザーが選択したテキストを暗号化されていないHTTPで外部サーバーへ送信する重大なセキュリティ問題が見つかった
- この問題は、Debianのデフォルト設定でYouDaoおよびdict.cnプラグインが既定で有効になっていることで発生する
- これは、ユーザーが任意のテキストを選択すると自動的にサーバーへ送信されることを意味し、機密情報漏えいの危険がある
- パッケージ管理者は機能の無効化やプラグイン分離の提案を検討したが、根本的な解決策の適用は不十分だった
- この問題は過去にも複数回提起されていたが、完全な対応の欠如とセキュリティ意識の重要性をあらためて浮き彫りにした
StarDictの動作とセキュリティ問題の概要
- StarDictはGPLv3ライセンスのクロスプラットフォーム辞書プログラムで、多様な言語対応とプラグインエコシステムを備える
- Debianのデフォルト設定では、StarDict実行時にユーザーが選択したテキストが暗号化されていないHTTPを通じてyoudao.comとdict.cnの2つのリモートサーバーへ送信される
- この問題はoss-securityメーリングリストとDebianのバグトラッカーにも報告されている
問題の詳細
- StarDictの設計上、辞書ウェブサイトと通信するコード自体は自然な構成だが、「スキャン」機能が既定で有効になっている
- これは、ユーザーがマウスでテキストを選択すると自動で翻訳ポップアップを表示し、そのテキストが外部サーバーへ自動送信されることを意味する
- ユーザーがStarDictを常時バックグラウンドで実行している場合、問題は深刻になる
Linux環境ごとの差異
- Wayland環境では、StarDictは他アプリケーションのテキストを取得できず、スキャン機能も動作しないためセキュリティ問題は発生しない
- 従来のX11環境でのみこの問題が存在する
DebianおよびStarDict開発者の反応
- Debianパッケージ管理者のXiao Sheng Wenは、
"スキャン機能とYouDaoプラグインは無効化可能"として大きな問題とは認識していない
- しかし報告者のVincent Lefevreは、「プライバシー関連機能は必ず無効状態をデフォルトにすべきだ」と指摘した
- パッケージ説明によって機能を知らせることは可能だが、stardict-pluginの説明にはオンライン辞書の利用が記載されていない
- プラグイン分離などの改善策は提案されているものの、即時の措置は取られていない
機能の利便性とセキュリティ上の懸念
- スキャン機能は、外国語を読む際に素早く辞書を引きたい場合のStarDictの主要な利点である
- しかしユーザーが、その通信が暗号化されていないと予想するのは難しい。通信経路上の誰にでも機密テキストが露出する危険がある
過去の類似セキュリティ事故と対応
- 2009年と2015年にも類似事例が報告されている
- 2009年: ネットワーク辞書の無効化が一時的に既定値として適用された
- しかし2016年に追加されたYouDaoプラグインはその設定を無視した
- 2015年の問題は、2025年になってようやくプラグイン削除という形で解決された
- このように、問題の再発と対応の遅れ、保守担当者の交代や優先順位付けの不備が繰り返されている
ユーザー規模とセキュリティへの影響
- Debianの統計では現在およそ178人 בלבדがStarDictをインストールして利用しているが、統計に参加していないシステムなども考慮すると、長年にわたり多くのユーザーがテキスト漏えいの危険にさらされていた可能性がある
- パスワードのコピー、機密メール、文書編集中に選択したテキストなどがそのまま外部に露出する可能性がある
オープンソースエコシステムとセキュリティ課題
- Debianのような大規模ディストリビューションは膨大な数のパッケージを管理しており、更新漏れやソフトウェアの老朽化が頻繁に起きる
- 「十分に多くの人が見ればバグは浅い」というLinusの法則も、実際には誰かがバグを発見し、報告し、さらに保守担当者が問題として認識して修正して初めて成り立つ
X11からWaylandへの変化
- Waylandの導入は、この種のセキュリティ欠陥、特にアプリケーション間の情報漏えいの可能性そのものを減らすためでもある
- ただし、それに伴う機能面での不便さや新しい権限処理の方式も課題として残る
結論と示唆
- 発見され、診断され、報告されたセキュリティ問題が、いまだ未解決のまま残ったり再発したりする現実は懸念を呼ぶ
- Linuxのセキュリティ評価を維持するには、オープンソース開発者、パッケージ管理担当者、ユーザーによる継続的な問題意識と迅速な対応が不可欠である
1件のコメント
Hacker Newsのコメント
Xiaoが指摘しているように、ソフトウェアをインストールするユーザーはパッケージ説明を読めるし、実際にスキャン機能への言及もある。しかし、Debianメンテナがバグ報告に対してしばしば「すべての(依存関係としてインストールされる何百ものものまで含めた)パッケージ説明をきちんと読むべきだ」といった調子で返すのだが、正直、数日前に公開されたTrixieを基準にすべての説明とREADMEを読み始めたとしても、まだ読み終わっていないはずだ
もちろん、辞書プログラムならウェブサイトと通信するコードを含んでいてもおかしくないと思う人はいるだろう。でも apt-get で辞書をインストールしたなら、辞書全体が自分のコンピュータにあると期待してよいはずだ。実際、紙の辞書だって何百年も使われてきたのだから……。Stardictはオンラインベースではあるが、あり得るにしても、どこか罠のように感じる
dingプログラムはローカル辞書を非常によくサポートしている。Debianにも入っている dingリンクSamsungのスマホで、すべてのクリップボードデータが自分のSamsungアカウント上の全デバイスに共有され(パスワードまで含めて)、しかも履歴まで残ると知ってかなり驚いた。これがデフォルト設定だったのか、偶然同意してしまったのかは覚えていない。このデータはおそらくSamsungのサーバーを経由して配信されているのだと思う。共有機能はオフにしたが、クリップボード履歴は無効にならず、別のキーボードに切り替えてもSamsungキーボードへ戻すと昔のクリップボード履歴が全部残っている。次のスマホはSamsungを選ばないつもりだ
Waylandについての話は少し誤解を招く気がする。最後の要約は正確だ。「おそらくStarDictはWaylandで動作するために特別な権限を要求しただろうし、ユーザーは今そうしているようにそのデフォルト値をそのまま受け入れただろう」。つまり、その可能性は高く、インストール時点でその権限が自動的に付与されていた可能性もある。マルウェアは常に存在する。Waylandはある種の攻撃を防げるかもしれないが、ディストリビューションの一部としてインストールされたパッケージからは守ってくれない
dict.youdao.comとdict.cnに対して、何の保護もないHTTPでデータを送っており、その経路上の誰でもリクエスト内容を見られるクリップボードごとにローカル辞書を引くのは構わない。リモート辞書への問い合わせ機能を追加するのも問題ない。この2つの機能を特別なフラグなどで分離したうえで簡単に組み合わせられるようにしていたなら納得できたが、この2つをデフォルト設定で混ぜて使うのは、ほとんど悪意に近い
「当然、辞書プログラムにはウェブサイトと接続するコードがある」という話について言えば、実際には目的次第だ。私が提供しているフィンランド語辞書(
tsk)の最小バージョンは約30MBで、およそ25万語を含み、辞書そのものがバイナリに埋め込まれていて、起動のたびにprefix検索を再構築する。しかし、レンマ化や語源などを含む巨大なデータベースは数十GBまで膨らみ得る。私は完全に即時のキーボード入力単位の探索を目的にしていたので、こういう構造が必要だった。労力も非常にかかったため、後続バージョンからは有料化することに決めた tsk Github 有料版ホームページ(現在はWindows向けコード署名の問題で停止中)。他の大半のユースケースでは、サーバーに問い合わせる方がずっと楽だ。巨大な辞書を丸ごとダウンロードする理由はほとんどないので、混合型の構造(たとえば上位1万語だけローカルにキャッシュし、残りの希少語はサーバーと通信する)もかなり合理的だこういう件を見ると、悪意があるとしか思えない点が多い。メンテナは「ユーザーが『スキャン』機能を自分で有効にし、テキストを選択すると翻訳動作がトリガーされる……なぜ機密データを翻訳クエリの対象として選ぶのか?」と返答していた
Debianに注がれている多大な努力には敬意を払うが、パッケージマネージャのこうした「最大主義」は昔から嫌いだった。たとえば foo をインストールしようとすると、関連しそうなソフトウェアを可能な限り一緒に入れ、ネットワークデーモンまであれば即座に起動してしまう、といった具合だ。「推奨パッケージ」のインストールを防ぐフラグがあるのは知っているが、デフォルト設定のほうがむしろユーザーに不便を強いているように感じる
/etc/apt/conf.d/でできるし、一時的になら--no-install-recommendsを使えばいいAPT::Install-Recommendsのデフォルトは false で、Debian 6.0 Squeeze(2011-02-06)で true に変わった。当時はDebianやUbuntuで不要なパッケージが大量に入るのが嫌だった。今振り返ると、推奨と提案の区別が曖昧だった面もあり、「推奨」をデフォルトでインストールし、ユーザーが opt-out できるようにしたのは良かったのかもしれない。それでも私が自分で管理しているシステムでは、推奨パッケージの自動インストールは今でも無効にしている--install-recommendsがデフォルトなのは問題ない。Recommends は「私たちの大多数はこれを欲しがる」、Suggests は「少数向け機能」という微妙な差を持たせるのは悪くない。しかし私も、個々のメンテナがRecommendsフィールドを乱用するのは問題だと思う。たとえば圧縮ツールを入れるのに特定のinitシステムまで強制されるのはおかしい(file-rollerやgnome関連チームのことを見ている)なぜこれらすべての機能がオフラインでないのか理解できない。中国語辞書全体でも40万語未満で、1語あたり1KBと見積もっても400MBで足りる。ローカルで十分実装可能なのに、ネットワーク接続に依存するのは単なる設計不足だ
こういう問題を見ると猛烈に腹が立つ。これは絶対に許容されるべきではない