脆弱性

問題 #13 - Unix 上で緩すぎるパイプ権限

影響を受けるバージョン

3.5.8 から 3.5.60 までのバージョン

重大度

致命的 機密データがバックエンド経由で渡され(3.5.57版以降のバージョンで可能)、かつバックエンドが「PIPE」に設定されている場合

説明

wrapper.backend.type=PIPE] を使用すると、Wrapper は権限が緩すぎる名前付きパイプを作成します。Windows エディションは影響を受けず、PIPE を安全に使用できます。

wrapper.app.property]プロパティを使用してバックエンド経由で機密データを渡すと、サーバーにアクセスできるすべてのユーザーがパイプの内容を表示できるため、セキュリティ上の懸念があります。

デフォルトの送信タイプでは SOCKET が使用されるため、この問題は発生しません。

回避策

Windows サービスに対して SeImpersonate 権限が有効

影響を受けるバージョン

3.5.58 未満のすべてのバージョン

重大度

警告

説明

旧バージョンの Windows との互換性を確保するため、Microsoft 社は Windows サービスにおいて「SeImpersonatePrivilege」をデフォルトで有効化することを決定しました。この特権は、サービス開始時にサービス コントロール マネージャー(SCM)によって「SERVICE」グループの動的な追加を通じて自動的に付与されます。

SeImpersonatePrivilege 」を使用すると、プロセスは別のユーザーの ID を借用できます。これは、異なるユーザーコンテキストにおけるプロセスの動作をテストするのに便利ですが、重大なセキュリティリスクも伴います。この特権は、Windows システムで最高レベルの特権を持つ LocalSystem アカウントに昇格することで悪用される可能性があります。

このセキュリティ問題は、「LocalSystem」以外のアカウントで実行するように設定されたサービスにのみ適用されます(それ以外の場合、サービスは既に最高特権を持っています)。ただし、ホスティングシステム上の Java アプリケーションへのアクセスを制限し、逆に他のサードパーティプロセスがアプリケーションや Wrapper ファイルにアクセスするのを防ぐため、専用のサービスアカウントで実行することが推奨される場合が多くあります。

ver. 3.5.58 以降、LocalSystemNT AUTHORITY\SYSTEM)以外のアカウントで Windows サービスとして実行されている場合、Wrapper は「SeImpersonatePrivilege」を無効にします。ほとんどの Java アプリケーションではこの特権は必要ありませんが、必要な場合は[wrapper.ntservice.impersonation]プロパティを使用して再度有効にすることができます。

回避策

問題 #11 - WrapperManager.log() メソッドと 「%」記号

影響を受けるバージョン

3.5.58 未満のすべてのバージョン

重大度

(以下の条件に当てはまる場合)

説明

Wrapper Java API は、ユーザーコードから指定されたログレベルでメッセージをログ出力できるようにする WrapperManager.log() メソッドを提供しています。ログ出力メッセージである第 2 引数に「%」文字が含まれている場合、Wrapper がクラッシュし、サービス拒否攻撃が発生する可能性があります。

最終的に WrapperManager.log() メソッドに渡されるユーザー入力を使用する場合、アプリケーションは危険にさらされます。

回避策

問題 #10 - 失効した証明書で署名された Windows バイナリ

影響を受けるバージョン

3.5.55

重大度

警告

説明

Windows バイナリは署名されていません。

回避策

アップグレードされた EV 証明書で署名された Wrapper ver. 3.5.56 を使用してください。

問題 #9 - 古い証明書で署名された jar ファイル

影響を受けるバージョン

3.5.44、 3.5.45

重大度

警告

説明

jar ファイルは、古いコード署名証明書で署名されています(タイムスタンプは 2027-06-27 まで有効ですが、有効期限は 2020-12-15 です)。

jar ファイルは安全に実行できます。

回避策

特別な操作は必要ありません。

問題 #8 - Windows バイナリが署名されていません

影響を受けるバージョン

3.5.44

重大度

説明

Windows バイナリ(wrapper.exe、wrapperw.exe、wrapper.dll)はデジタル署名されていません。

署名がないことはそれ自体がセキュリティ上の脅威となるわけではありませんが、デジタル署名のないバイナリの真正性と整合性を検証することはできません。そのため、Microsoft Defender SmartScreen は最初の実行をブロックし、セキュリティリスクを警告する場合があります。

回避策

問題 #7 - 非 ANSI エンコードと「%」記号を含む JVM 出力

影響を受けるバージョン

3.5.35 から 3.5.40 までのバージョン

重大度

(wrapper.lang.windows.encoding を使用する場合)

説明

Wrapper ver. 3.5.35 より、[wrapper.lang.windows.encoding]ではプロセスで使用されるロケールのエンコーディングを変更できるようになりました。これは、例えばログ出力を「UTF-8」で出力したり、特定のエンコーディングを使用したりする場合に便利です。

[wrapper.lang.windows.encoding]が設定されている場合、Wrapper は JVM 出力を別のモードで読み取ります。このモードには、JVM 出力にパーセント文字「%」が含まれていると Wrapper がクラッシュする可能性があるというバグがあります。

クライアントのユーザー入力がログに記録されてしまう場合、アプリケーションは特に危険にさらされ、サービス拒否攻撃に対して脆弱になります。

回避策

問題 #6 - Windows で極端に大きい UTF-8 出力メッセージ

影響を受けるバージョン

3.5.35

重大度

説明

wrapper.lang.windows.encoding]プロパティを使用すると、Wrapper プロセスで使用されるロケールのエンコーディングを変更できます。UTF-8 文字列は、4096 文字の固定サイズバッファーを使用する別の関数で処理されます。この幅を超える JVM 出力はバッファーオーバーフローを引き起こします。

大量のユーザー入力がログに記録されると、Wrapper がクラッシュし、サービス拒否攻撃につながる可能性があるため、アプリケーションは特に危険にさらされます。

[wrapper.lang.windows.encoding]がデフォルト値の「ANSI」のままになっている場合、または UTF-8 以外のエンコーディングが使用されている場合、Wrapper は影響を受けません。

回避策

問題 #5 - Unix デーモン用のデフォルト umask が「0000」に設定される

影響を受けるバージョン

3.5.8 から 3.5.11 までのバージョン

重大度

致命的

説明

UNIX プラットフォームでは、デーモンプロセスとして実行されているときに、デフォルトの umask は親プロセスから値を継承するのではなく、「0000」に設定されます。

ログファイルおよびその他のファイルは、グローバルな読み取り/書き込みアクセス権を持ちます。

Java プロセスのデフォルトの umask も「0000」であり、Java アプリケーションによって作成されたファイルも、明示的に新しい権限を設定しない限り、すべて「0000」になります。

アンカーファイルが使用されている場合、誰でも削除でき、Wrapper が停止する可能性があります。

回避策

問題 #4 - 厳格な SELinux セキュリティポリシーによる失敗

影響を受けるバージョン

3.3.7 未満のすべてのバージョン

重大度

警告

説明

厳格な SELinux セキュリティポリシーにより、Wrapper がライブラリを読み込みできない可能性があります。

この問題は、SELinux が有効になっているシステムで実行する場合にのみ発生します。

回避策

問題 #3 - Unix のシステムシグナルによるサービス拒否

影響を受けるバージョン

3.3.0 未満の全てのバージョン

重大度

説明

64 ビット UNIX では、システムシグナルがトラップされたときにネイティブ同期の問題によってクラッシュが発生する場合があります。参照:バグ #1614010

この脆弱性は、第三者プロセスによってサービス拒否攻撃を試みられる可能性があります。

32 ビットバイナリ、または Windows は影響を受けていません。

回避策

問題 #2 - レジストリに保存された「wrapper.ntservice.password」

影響を受けるバージョン

3.0.0 から 3.1.2 まで、または 3.2.2 から 3.2.3 までのバージョン

重大度

説明

サービスのインストール時にコマンドラインでパスワードを指定した場合、 [wrapper.ntservice.account]や[wrapper.ntservice.password]の値はレジストリ内にプレーンテキスト形式で保存されていました。

回避策

問題 #1 - JVM 出力と「%」記号

影響を受けるバージョン

Wrapper ver. 2.2.6 未満のすべてのバージョン

重大度

説明

JVM 出力内のパーセンテージ記号「%」により Wrapper がクラッシュする可能性があります。

クライアントのユーザー入力がログに記録されてしまう場合、アプリケーションは特に無防備になり、サービス拒否攻撃に対して脆弱になります。

回避策