Goobi viewerに遠隔コード実行の欠陥、修正版あり
デジタル資料公開用のWebアプリ Goobi viewer の 24.03 以降 26.05 未満に、外部サーバーの応答を悪用されると Tomcat 上で任意のコードを実行されるおそれのある欠陥が見つかりました。自組織で Goobi viewer を運用している場合は、修正版の 26.05 へ更新してください。実際の攻撃での悪用は公表されていませんが、深刻度は最高クラスです。
急ぎ度: 早めに
深刻度はCVSS 9.8と最高クラスで修正版も出ていますが、実際の攻撃での悪用は公表されておらず、攻撃にはGoobi viewerが悪意あるサーバーへ接続する必要があるためです。
関係があるか
図書館、文書館、博物館、大学などでGoobi viewerを自前のサーバーで運用している組織が対象です。Tomcat上で動かしている環境では、侵害されるとTomcatの実行ユーザーの権限で操作されます。
| 製品 | 影響を受ける版 | 直った版 |
|---|---|---|
| Goobi viewer(goobi-viewer-core) | 24.03以上26.05未満 | 26.05 |
確かめ方
- 1Goobi viewerを自組織で運用しているか、運用担当者または導入を依頼した事業者に確認します。
- 2稼働中の版を確認します。24.03以上26.05未満なら対象です。版の確認方法が分からない場合は、導入事業者または開発元のintrandaに問い合わせてください。
- 3Tomcatのサーバー上でgoobi-viewer-coreのファイルを探すと、ファイル名やディレクトリ名から版が分かる場合があります。
- 4Goobi viewerを動かしているサーバーが、どの外部サーバーへHTTPで接続できる状態かを、ネットワーク担当者に確認します。
何が起きたか
Goobi viewerは、デジタル化された資料をWebブラウザーで閲覧できるようにするWebアプリです。外部のサーバーからファイルを取得して保存する機能があり、その際の保存先ファイル名の扱いに問題がありました。取得先サーバーが返す情報の中のファイル名を、安全性を確かめずにそのまま使っていたためです。
悪意のあるサーバーが細工したファイル名を返すと、Goobi viewerは本来想定していない場所にファイルを書き込んでしまいます。Tomcatのプロセスが書き込める場所であればどこでも対象になります。Webアプリが配置されているディレクトリに書き込まれた場合は、TomcatのOSユーザーの権限でコードを実行されるおそれがあります。
技術的には、ExternalFilesDownloader.getFilename() がHTTP応答の Content-Disposition ヘッダーからファイル名を取り出し、ディレクトリ部分を取り除かずに Path.resolve() へ渡していました。絶対パスや ../ を含むファイル名がそのまま使われます。この種の欠陥はCWE-22(パストラバーサル)とCWE-73(ファイル名やパスの外部制御)に分類されています。版26.05で修正されています。
攻撃の流れ
-
1
外部取得の発生
Goobi viewerが外部のHTTPサーバーからファイルを取得します。
-
2
細工した応答
悪意あるサーバーが、パスを含む偽のファイル名を `Content-Disposition` ヘッダーで返します。
-
3
検査なしで利用
Goobi viewerはファイル名のディレクトリ部分を取り除かず、保存先の決定に使います。
-
4
任意の場所へ書込み
Tomcatが書き込める場所に、攻撃者が用意した内容のファイルが作られます。
-
5
コード実行
Webアプリの配置先に書き込まれると、tomcatユーザーの権限でコードが実行されます。
どう悪用されるか
攻撃には、Goobi viewerが攻撃者の管理するHTTPサーバーからファイルを取得することが前提になります。CVSSでは、認証不要、利用者の操作不要、ネットワーク経由で攻撃が成立するものとして評価されています(CVSS:3.1/AV:N/AC:L/PR:N/UI:N)。ただし、実際にどの機能や操作でGoobi viewerを悪意あるサーバーへ接続させられるかは公表されていません。取得先として信頼しているサーバーが乗っ取られた場合も、同じ状況になり得ます。
悪用が成功すると、Tomcatプロセスが書き込める場所に任意の内容のファイルを置かれます。Webアプリの配置先であれば、tomcatユーザーの権限でコードを実行されます。その結果、サーバー上のデータの閲覧や改ざん、サービス停止、同じネットワーク内の別の機器への足がかりに使われるおそれがあります。被害の範囲は、そのサーバーの権限設定とネットワークの分離状況に左右されます。
実際の攻撃での悪用が確認されたという公表は、現時点でありません。
今すぐやること
-
1
対象かどうかを確認する
Goobi viewerの稼働有無と版を確認します。複数の環境(本番、検証、公開用の複製など)がある場合は、すべて洗い出してください。
find / -name "goobi-viewer-core*" 2>/dev/null -
2
26.05へ更新する
対象の版であれば、バックアップを取ったうえで26.05に更新します。更新後は、閲覧や検索など主要な機能が動くことを確認してください。入手先と手順は開発元のリリース告知を参照します。
-
3
外向きの通信を絞る
Goobi viewerのサーバーから外部へのHTTP/HTTPS接続を、実際に必要な取得先だけに制限できないか検討します。更新までの間の被害を抑える効果があります。
-
4
Tomcatの書き込み権限を見直す
Tomcatの実行ユーザーが、Webアプリの配置先など不要な場所へ書き込めないようにします。侵害されたときの影響を小さくできます。
-
5
不審なファイルの有無を点検する
Webアプリの配置先やTomcatの関連ディレクトリに、心当たりのない新しいファイルがないかを確認します。見つかった場合は、更新作業より先にインシデントとして扱い、調査してください。
すぐ更新できないとき
開発元から、更新以外の公式な回避策は示されていません。すぐに更新できない場合は、次の一般的な対策でリスクを下げられます。ただし根本的な解決にはならないため、更新は必ず行ってください。
- Goobi viewerのサーバーから外部への接続を、信頼できる取得先だけに限定する
- 取得先として設定する外部サーバーを、信頼できるものだけにする
- Tomcatの実行ユーザーが書き込める範囲を最小限にする
背景
Goobi viewerは、図書館や文書館などが所蔵資料をデジタル化して一般に公開するときに使われる閲覧用のWebアプリです。インターネットに公開されることが多く、Tomcatのようなアプリケーションサーバー上で動きます。そのため、侵害されると公開サイトの改ざんだけでなく、同じサーバーや内部ネットワークへの侵入にもつながり得ます。
外部から受け取った値をファイル名やパスとして使うときに検査が足りず、意図しない場所へ書き込まれる問題は、パストラバーサルとして古くから知られています。多くのWebアプリで繰り返し見つかってきました。今回は利用者の入力ではなく、接続先サーバーが返す応答ヘッダーが出発点になっています。自分が接続する相手の返す情報も、信頼できるとは限らないという点が特徴です。
よくある質問
Q.Goobi viewerを使っていなければ対応は不要ですか。
Q.インターネットに公開していなければ安全ですか。
Q.すでに攻撃されていないかを確認するにはどうすればよいですか。
まだ分かっていないこと
- 実際の攻撃での悪用が確認されているかどうかは、公表されていません。
- Goobi viewerをどの機能や設定で悪意あるサーバーに接続させられるのかは、公表されていません。詳細は開発元のセキュリティアドバイザリを確認してください。
- 更新以外の公式な回避策や、侵害の有無を調べる公式の手順は、現時点で明らかになっていません。
この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。
影響パッケージ
| 種類 | パッケージ | 影響を受ける版 | 直った版 |
|---|---|---|---|
| intranda | goobi-viewer-core | — | — |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
The Goobi viewer is a web application that allows digitised material to be displayed in a web browser. From version 24.03 to before version 26.05, ExternalFilesDownloader.getFilename() extracts the destination filename from a server-supplied Content-Disposition response header and passes it directly to Path.resolve() without stripping directory components. This allows for a malicious HTTP server that the viewer fetches from to supply an absolute path or ../ traversal sequences as the filename, writing attacker-controlled content to an arbitrary path writable by the Tomcat process. When targeting the deployed web-application directory, this yields remote code execution as the tomcat OS user. This issue has been patched in version 26.05.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory github.com
- advisory github.com
- advisory nvd.nist.gov
- patch github.com
- web github.com