GNU Guixに複数の重大なセキュリティ脆弱性が発見されました。悪意ある代替サーバーやネットワーク攻撃者がこれを悪用すると、リモートでの権限昇格やGuixストアの破損を引き起こしたり、ローカルの機密ファイルを露出させたりする恐れがあります。
これらの脆弱性はguix-daemonが使用するguix substituteヘルパーに影響するもので、guix pullとguix time-machineにも別の問題が見つかっています。
Guixプロジェクトはすべてのユーザーに対し、GuixおよびGuix-daemonの両方を直ちにコミット897832f374dcdc9eeaf19d01e70b9a92fccfc68c以降にアップグレードするよう強く呼びかけています。
デーモンがrootではない権限で動作しているシステムを含め、すべてのGuix環境が影響を受けます。ただしguix-daemonがroot権限で実行されている場合は影響がより深刻になります。
最も深刻な脆弱性は、ダウンロードしたバイナリ代替物を展開するGuixのシリアライズコード内の手続きrestore-fileに存在します。この関数はアーカイブの完全なハッシュ検証が完了する前、つまりダウンロードがまだ進行中の段階でアーカイブの中身を処理してしまっていました。
restore-fileが悪意あるアーカイブエントリを十分に検証していなかったため、代替サーバー、あるいはそれになりすました中間者攻撃者が、デーモンユーザーの書き込み権限が及ぶ任意の場所に任意のファイルを書き込める可能性があります。
Guixの説明によれば、デーモンをrootで実行しているシステムでは、/etc/passwdのような機密性の高いパスもこの対象に含まれる可能性があり、リモートでの権限昇格につながる経路となります。
HTTPSを使っていても悪用を完全には防げません。Guixは代替アーカイブのダウンロード時に証明書を検証していますが、narinfoと呼ばれる代替情報のメタデータを取得するプロセスでは、サーバー証明書の検証が行われていませんでした。
攻撃者はメタデータ内の代替URLを改ざんし、ダウンロード先を攻撃者の管理するエンドポイントへとリダイレクトさせることが可能です。最終的にアーカイブは整合性検証に失敗しますが、それは悪意あるコンテンツがすでに展開された後になります。
脆弱性のあるrestore-fileの機能は、信頼できない入力を処理する際にguix offload、guix archive --extract、guix challengeといったユーティリティにも影響を及ぼします。
fetch-narinfosにある2つ目の欠陥では、攻撃者が管理する代替サーバーが、要求されたものとは異なる、認可済みストアアイテムのメタデータを返すことが可能でした。これにより攻撃者は、正当な代替パッケージの代わりに古いパッケージや安全でないパッケージをGuixにインストールさせられる恐れがあります。
3つ目の問題では、デフォルトのguix-daemonソケットに接続する信頼できないクライアントがfile://形式の代替URLを指定できてしまいます。デーモンはシンボリックリンクをたどることができ、ローカルファイルを読み取ることも可能だったため、攻撃者はデーモンユーザーがアクセスできるファイルの読み取りを引き起こせる可能性があります。
対象のファイルに無効なnarinfoデータが含まれていた場合、Guixはエラーのバックトレースを返し、ファイルの一部がローカルクライアントに露出することがあります。この問題はまた、デーモンユーザーがアクセス可能なプロセス次第で、/proc/PID/fdを通じて露出しているファイルへの干渉を可能にする恐れもあります。
これとは別に、Guixの開発者はguix pullとguix time-machineにおけるパストラバーサルの問題も修正しました。悪意あるチャンネル名によって、チャンネル認証時に使用されるキャッシュキーが操作され、コマンドを実行しているユーザーが書き込み可能な場所にファイルが作成・上書きされる恐れがありました。
この問題による影響は主にサービス拒否(DoS)のリスクにとどまります。書き込まれる内容がSchemeのコメントとGitのコミット識別子に限られるためです。悪用には通常、Guixのリモートチャンネルファイル機構などを通じて、攻撃者がチャンネルファイルを制御している必要があります。
Guixはプルリクエスト#9665における11件のコミットを通じてこれらの問題に対処しました。今回の修正では、アーカイブ展開処理の堅牢化、信頼できないソースからの安全でないfile://URLの拒否、narinfoレスポンスの検証、そして整合性チェックが完了するまで代替物の復元処理を一時ディレクトリ内で行うようにする変更が行われています。
管理者は直ちにアップグレードを行い、guix-daemonを再起動してください。当面のリモート対策としては、デーモンやGuixコマンドに--no-substitutesを指定する方法があります。ただしこれはローカル攻撃者からの保護にはならず、アップグレード作業が複雑になる可能性もあります。
翻訳元: https://cyberpress.org/gnu-guix-flaws-remote-privilege-escalation/