KeePassXC の Debian 管理者、すべてのネットワーク機能を削除
(fosstodon.org/@keepassxc)- Debian の
keepassxcパッケージが最小機能パッケージに変更されると、従来の機能を維持したいユーザーはkeepassxc-fullへ移行する必要がある - 削除範囲はネットワーク機能にとどまらず、YubiKey、auto-type、ブラウザ統合、SSH agent、FDO secrets、favicon ダウンロード、HIBP まで含まれる
- Debian パッケージの説明では、基本の
keepassxcは “bare minimal functionality” のみを提供し、ネットワーク機能・SSH agent・ブラウザプラグイン・FDO secret storage をセキュリティ上の複雑性に分類している - 変更の告知は
NEWS.Debian.gzとapt-listchangesを通じて行われ、stable ユーザーはリリースノートを確認する必要がある - パッケージ名と移行方法はまだ調整の余地があり、Trixie 以降は
apt install keepassxcが2つの選択肢を表示する案が言及されている
Debian keepassxc パッケージの変更
- Team KeePassXC は Debian ユーザーに対し、
keepassxcパッケージ管理者が機能を大幅に削除しようとしていると告知 - 変更が testing/sid の外へ反映されると、従来の機能が必要なユーザーは
keepassxc-fullへ移行する必要がある - Debian のバグレポートではネットワーク機能の無効化のように見えるが、Team KeePassXC は実際の変更はネットワーク機能を超えた全面的な機能削除に近いと反論している
削除される機能の範囲
- Team KeePassXC が明らかにした削除対象は次のとおり
- YubiKey
- auto-type
- ブラウザ統合
- SSH agent
- FDO secrets
- ネットワーク機能
- favicon ダウンロード
- HIBP
Debian パッケージの説明と根拠
- Debian sid の
keepassxcパッケージ説明では、基本パッケージは最小限の機能だけを含むと案内している - 同説明では、ネットワーク機能、SSH agent、ブラウザプラグイン、FDO secret storage をセキュリティ上の複雑性と見なし、必要であれば
keepassxc-fullを使うよう案内している - 関連する Debian バグレポートとして #953529 - keepassxc: Compiling with disable networking support が共有されている
Debian 管理者の立場
- Debian 管理者は、予期しない変更を確認する最初の場所として
/usr/share/doc/<package>/NEWS.Debian.gzを挙げている - testing/unstable ユーザーは
apt-listchangesがインストールされていれば変更点を自動的に確認でき、stable ユーザーはリリースノートを読む必要がある - この決定は1年間議論されており、xz-utils 事件以降、デフォルトで含めるコードをできるだけ減らす方向に傾いたと説明している
- 管理者は Debian、KeePassXC、多機能なパスワードマネージャーを同時に求めるユーザー層が大きく重なるとは見ていない
- ローカル専用のパスワードマネージャーに「穴」を開けるのは筋が通らないと表現している
upstream と downstream のコミュニケーション問題
- あるユーザーは、議論に長い時間がかかっていたにもかかわらず、upstream 開発者が完全に驚いているように見える点を問題視した
- Debian 管理者は、これは Debian プロジェクト内部の問題であり、IRC で他の Debian 開発者に意見を求めたと答えた
- upstream の立場はすでに把握しており、upstream は数年前に IRC を離れていて、新バージョンのパッケージングだけでも余力が不足していると説明した
- Team KeePassXC と一部ユーザーは、downstream の決定によって upstream にバグレポートと混乱が集中する可能性を懸念している
パッケージ名と移行の方向性
- 複数のユーザーは、基本の
keepassxcを最小機能パッケージに変えるより、keepassxc-minimalやkeepassxc-lightのような名前を使い、従来のkeepassxcは全機能を維持するほうが混乱が少ないと提案した - ある提案は次の構成だった
keepassxc-lightkeepassxc-fullkeepassxcはkeepassxc-fullに依存する移行パッケージNEWS.Debianで変更を説明
- Debian 管理者は、名称変更は
ftpteamの承認にかかっており、Trixie の移行パッケージの方向性としてはその提案が最善かもしれないと答えた - Trixie 以降は移行パッケージをなくし、
apt install keepassxcが2つの選択肢を表示するようにする案も言及されている
1件のコメント
Hacker News のコメント
アップストリームがソフトウェアに入れている機能を大幅に削除したうえで同じ名前で配布するのは、よく見ても疑わしい
その方向でやりたいなら別名のフォークとして配布すべきで、そうすればアップストリームがユーザーからの問題報告に悩まされ続けることもない
以前 Debian の Chromium メンテナーが拡張機能のインストール機能を一方的に無効化し、結局そのパッチが差し戻された件を思い出す
さらにずっと前、Debian がネットワークカードにバイナリファームウェアをロードするカーネルインターフェースを削除して、自分のネットワークが壊れたことも思い出す
実際にやったことは XC_ALL ビルドパラメータを OFF に変更しただけで [0]、この値はアップストリームの CMakeLists.txt のデフォルト値でもある 1
アップストリームがこの機能をそれほど重要だと考えているなら、まずデフォルト値を直すべき
アップグレード後に機能が止まってユーザーが混乱する可能性はあるが、サフィックスのないパッケージがアップストリームのデフォルト値と一致していること自体は、かなり合理的
[0] https://salsa.debian.org/debian/keepassxc/-/commit/7d6d16e3f...
1 https://github.com/keepassxreboot/keepassxc/blob/develop/CMa...
メンテナーの役割は、アップストリームをコピーして貼り付ける以上のもの
ディストリビューションのエンドユーザーにとって何が適切かを判断する権限がある
この場合は妥当なセキュリティ上の根拠があるように見えるし、代替パッケージも提供されている
Debian はアップストリームを無視する奇妙な態度を持つ唯一のディストリビューションのように思える
自分が管理しているアップストリームプロジェクト2つでも、Debian が一方的にパッケージ名を変更した
1つはかなり後になって知ったし、もう1つは自分が明確に反対したにもかかわらず、まったく筋の通らない形で進められた
結局ユーザーに説明しなければならないのは自分
追記: ここで Debian 側の Julian の傲慢さを見ればいい: https://github.com/keepassxreboot/keepassxc/issues/10725#iss... — 自分が言っているのはこういうこと
アップストリームが作ったものを「えぐり取った」わけではない
プラグインなしのバージョンを配布し、プラグイン入りの -full 版を作ったということ
プラグインがデフォルトで挿さっているなら、それはプラグインではなく組み込み機能であり、このやり方が正しい
Apple が「セキュリティ上より良いと思うのであなたのアプリを修正した」と言ったら、人々は松明と熊手を持って出てきただろう
ところが deb メンテナーがやると論争の対象になる
セキュリティ問題があるなら、安全でないバージョンはそもそも提供されるべきではないが、今回の場合はそれでもない
App Store のような世界では、メンテナーの役割は変わるべき
やるべきことはソフトウェアをディストリビューション上で動くようにすることであって、名前は維持したまま自分の好みで擬似フォークを作ることではない
かなり合理的な判断に見える
ネットワーク機能とブラウザ統合は、大きな潜在的な穴であり攻撃の入口でもある
ネットワーク関連機能なしに信頼しているデータベースだけを実行するなら、脆弱性が見つかってもそのツールを悪用するのはほぼ不可能であるべきで、パスワードマネージャーのような重要なツールには非常に望ましい特性
元のメンテナーも同意している 1
ネットワークが有効なフルパッケージも Debian にあるので、望むユーザーは
apt install keepassxc-fullするだけで全ネットワーク機能を使えるただし、アップストリームを “crappy”[0] と呼ぶのはパッケージメンテナーとして建設的な態度ではないし、パッケージ名も
keepassxcとkeepassxc-fullよりはkeepassxc-liteとkeepassxc-fullのほうが Debian ユーザーには分かりやすかっただろう[0] https://github.com/keepassxreboot/keepassxc/issues/10725#iss...
1 https://github.com/keepassxreboot/keepassxc/issues/10725#iss...
「有用であること」はセキュリティを高めうる
パスワードマネージャーが使いにくければ、人々は使うのをやめてしまうから
もう少し見てみると、クリップボードの使用がブラウザ統合より必ず安全なのかも不明
コピー&ペーストのミスだけでも、ブラウザ統合のセキュリティ負担のかなりの部分を相殺しうる
ずっと前に大企業で契約業務をしたことがあるが、アカウントマネージャーたちのノートPCにはディスク暗号化パスワード、Windows ログインパスワード、AD ログインパスワードがあり、すべて異なる必要があり、数か月ごとに変更しなければならず、複雑さの要件も厳しかった
自分が見たすべてのノートPCには例外なく、3つのパスワードを書いた付箋が貼られていた
要点は、架空のセキュリティオタク的セキュリティは現実世界のセキュリティと同じではないということ
少なくとも常に同じではなく、ここには現実的なトレードオフが必要
本来そうすべきではなかったが、会社のITシステムを通すと官僚主義のせいで時間がかかりすぎ、こちらのほうがずっと速くて簡単だった。
そういうタイプの会社だった。
これ自体も当然「セキュリティリスク」だった。機密性の高い会社データが入ったノートPCを、コンピュータ店の任意の技術者が触るのは本来おかしいからだ。
ただ、守るべきものがそれほど多かったわけではないと思う。売上や顧客数程度で、ごく限られた人にしか役立たない情報だった。
ブラウザ統合には、手動のコピー&ペーストよりセキュリティを高める面が1つある。
ブラウザ拡張は認証情報を入力する前にページのURLを確認するが、手動コピー&ペーストはタイプミスしたドメインや同形文字によるフィッシングに弱い。
ネットワーク機能とブラウザ統合が大きな潜在的な穴であることには同意するが、GitHub Issue の参加者たちが言っていたように、完全ビルドに比べて縮小ビルドのテストがほとんどなく、任意のビルドフラグの組み合わせはまったくテストされていない点が重要だ。
他の場所でも出ていたように、無効化された「選択」フラグの1つが YubiKey サポートで、そのせいで新しく壊れたパッケージにアップグレードしたユーザーがパスワードマネージャーから締め出されている。
そのフラグ1つを戻すだけでも、実際には誰もテストしていない状態になる。
既存ユーザーを
keepassxc-fullに移したという前提なら、keepassxc-liteという名前なら問題を防げただろうという点には同意する。だが、まさにそこが核心だ。
最も安全な解をデフォルトにするのは合理的だが、メンテナーはアップストリームやユーザーが望まない限り既存機能を壊すべきではないし、特にユーザーをパスワードマネージャーから締め出してはならない。
GitHub に「crappy」と投稿したのはあまりに無礼で、自分が Debian を使っていたなら利用を考え直しただろう。
パッケージがそんなにひどい機能でいっぱいなら、なぜわざわざメンテナンスしているのか分からない。
いっそ削除して、ユーザーが正しくインストールする方法を自分で探すようにしたほうがいい。
KeePassXC の開発者たちが気の毒だ。オープンソースプロジェクトの維持だけでも大変なのに、こんなことまで背負わされている。
crappyという表現を見た瞬間、julian-klode への敬意はすぐに消えた。
drawks が提案した解決策は、明らかに正しい選択に見える:
https://github.com/keepassxreboot/keepassxc/issues/10725#iss...
なぜこれが明白な選択肢ではない可能性があるのか分からない。
メンテナーには自分の見解があり、明示的にデフォルトを変えたいと思っていたからだ。
それは明白な選択であるだけでなく、実際の Debian でまさにその通り起きた: https://salsa.debian.org/debian/keepassxc/-/commit/7d6d16e3f...
元の記事は、単によくないクリックベイトだ。
何も削除されておらず、
keepassxc-fullパッケージに移されただけだ。一方 Arch 側では、おそらくユーザー層ではかなり一般的にインストールされているfwupd パッケージが、ひっそり passim に依存するよう設定され、passim は明示的なユーザー同意なしに
0.0.0.0:275001 で開いたWebサーバーを立ち上げる。しかも passim は、穴の多さがスイスチーズ以上として有名な GnuTLS を使っている 2。
本当にあり得ないと思うし、チェーンのどこかに xz 型のエクスプロイトが潜んでいても驚かない気がする。
わざわざ fwupd を探すまでもない。
どこにでもある systemd-resolved は、要求時に5355番ポートで LLMNR サーバー、つまり mDNS とも呼ばれ、昔の Microsoft NetBIOS 系列にあたるものを開くことができる。
IoT のせいで誰もが私の LAN にアクセスできる時代になり、今や Linux もその混乱に加わらせようとしている。
fwupd の修正は、デフォルト設定ファイルの品質が低く、コメントアウトされたデフォルト値もないので、こうすればいい:
resolved の修正は
/etc/systemd/resolved.confでLLMNR=noとコメントアウトされており、おそらくDNSStubListener=noも望むだろう。まともなデフォルト値はこうだ:
知っておくとよい。
これは別記事として投稿されてもよさそうだ。
パッケージ管理者は最小驚きの原則に従って動くべきで、文書化された、あるいは少なくとももっともらしいリスクがない限り、コア機能を無効化すべきではないと思う。
このコメント欄では「プラグイン」という言葉が現時点で25回出てくるが、ここで話しているのはプラグインではない。
KeePassXCには機能が多いが、明示的なユーザー操作なしにそれ自体が脆弱性の有力な発生源になりそうなものは見当たらない。
ブラウザ統合は設定する前にまず有効化する必要があり、このフラグで無効化された他の機能もおそらく同様なので、
-minimalパッケージのほうが適切だったはずだ。不確実な将来にこの変更で恩恵を受けるごく少数のユーザーより、ブラウザ統合を使っていた人たちに生じる深刻な不便のほうがはるかに大きい。
ブラウザ統合は一般に、クリップボードアクセスよりずっと安全な機能でもある。
プロジェクトのビジョンとも合っていないように見える:
誰でも使える一方で、必要とする人には高度な機能も提供するアプリケーションを作ることが目標である。
既存ユーザーを壊さずにこの区分を作ることはできたのだから、Debianパッケージ管理者の悪い判断以外には見えにくい。
ネットワーク機能なしの KeepassXC を使えるのは確かに良いことだが、ブラウザ統合をニッチな機能と見るのはひどく現実離れしている。
今 Debian で KeepassXC を使っているユーザーの半数以上、おそらくはるかに多くが、今回のやり方によって予告なく無効化される機能を望んでいる、というほうに賭けてもいい。
結局、決定権は彼らにあるが、それが良い判断だという意味ではなく、私はそうは思わない。
KeePassXC 管理者の発言:
https://github.com/keepassxreboot/keepassxc/issues/10725#iss...
これは感情的な脅しのように聞こえる。
ハードウェア故障、OSを壊すアップデート、間違ったドライブへの
dd使用などで、どれだけすべてを失ってきたか分からない。ダウンストリームの管理者がアップストリームプロジェクトの意図と異なる形でパッケージを変更するなら、別の名前で配布し、その修正版によって生じるすべてのバグ報告を自分で処理すべきだと思う。
デフォルトビルドではネットワーキングは OFF である。
Yubikey、ブラウザ統合なども同様である。
-DWITH_XC_NETWORKING=[ON|OFF] Enable/Disable Networking support (e.g., favicon downloading) (default: OFF)https://github.com/keepassxreboot/keepassxc/blob/develop/INS...
WITH_XC_NETWORKINGビルドオプションはデフォルトでオフなので、開発者たちがこの構成を有効なビルド設定として意図しているのは明らかだ。通常はあまり守られていないことは分かっているが、本来の基本的な流れはそうなっている。
ディストリビューション提供のパッケージを使っていてバグに遭遇したら、そのディストリビューションのパッケージにバグを報告し、管理者が調べたうえでアップストリーム由来のバグであればアップストリームプロジェクトに上げる、という形であるべきだ。
この方式が有用な理由は、1. パッケージ管理者はそのパッケージに慣れているため初期の分類と分析ができ、アップストリームに行く前にその場で直せる場合もあること、2. 述べたとおりディストリビューションのパッケージはしばしばパッチを含むため、管理者が問題がパッケージングにあるのかアップストリームのソースにあるのかを確認する必要があることだ。
残念ながら、多くのユーザーはまずアップストリームに報告する。
だから現実的には心配するに値するが、本来はそうであってはならない。
あるいは、エンドユーザーにサポートされていないパッケージであることを示すべきだ。
たとえば KeePassXC-Debian や KeePassXC-Unsupported のように見せ、About から開発者の連絡先やウェブサイトを外して Debian のサポート情報に置き換える、といった形だ。
OSに合わせるためのダウンストリームの小さな変更は問題ない。
しかしアプリを変更してコア機能を削除し、アップストリーム開発者に大量の苦情が行くようにするのは問題だ。
リンク先の200字程度の記事すら読まずに、なぜコメントしているのか分からない。
管理者は
keepassxc-fullパッケージでネットワーク関連を含むすべてのプラグインを有効にし、keepassxcパッケージにははるかに良いセキュリティ態勢を持つ基本機能だけを入れるようにした。これは明らかに完全に問題なく、管理者の権限の範囲内である。
不満の全体は、これが変更であるという点にある。
関心のある人にとっては、GitHub のこの Issue に最新のコメントが含まれているようだ。
https://github.com/keepassxreboot/keepassxc/issues/10725
Debian 管理者 Julian Klode の見解はかなり刺々しい:
タイトルが間違っている。
元の記事は、管理者がネットワーク機能だけでなくすべての機能を削除したと述べており、実際にすべてのオプション機能、完全にオフラインの機能までビルド時にオフにされたため、その表現は正しかった。