Fess 15.5に向けたセキュリティ強化

Fess 15.4のリリースに向けて、セキュリティ面でのさまざまな強化を行いました。より安全な運用を実現するための改善点をまとめて紹介します。

暗号化関連の改善

SAML署名アルゴリズムの更新

SAML認証で使用する署名アルゴリズムのデフォルトをRSA-SHA256に更新しました。Azure AD、Okta、OneLoginなど主要なIdPはSHA-256を標準としてサポートしており、より堅牢な認証連携が可能になります。

暗号化アルゴリズムの設定警告

DES、Blowfish、MD5などレガシーな暗号化アルゴリズムが設定されている場合に、起動時に警告ログを出力するようにしました。AESやSHA-256への移行を促すメッセージが表示され、より安全なアルゴリズムへの移行を支援します。

設定プロパティ名の統一

セキュリティという感じではないですが、暗号化アルゴリズム関連の設定プロパティ名を app.cipher.algorithmapp.digest.algorithm に統一しました。

認証・認可の強化

パスワードポリシーの設定

パスワードポリシーを設定できるようになりました。以下の項目を fess_config.properties で設定可能です。

  • password.min.length: 最小文字数(デフォルト: 8)
  • password.require.uppercase: 大文字を必須にするか
  • password.require.lowercase: 小文字を必須にするか
  • password.require.digit: 数字を必須にするか
  • password.require.special.char: 特殊文字を必須にするか

管理画面でのユーザー作成、プロフィールでのパスワード変更、パスワードリセット時にポリシーが適用されます。

LDAPエスケープ処理の追加

LDAP認証で使用するフィルタやプリンシパルの構築時に、RFC 4515に準拠したエスケープ処理を行うようにしました。バックスラッシュ、アスタリスク、括弧などの特殊文字が適切に処理されます。

メモリ上のパスワードクリア

ユーザー作成・更新処理の完了後、Userエンティティに一時的に保持された平文パスワードをメモリからクリアする処理を追加しました。

ファイル操作の改善

アトミックファイル操作

サムネイル生成処理で、Java NIOのアトミック操作を使用するように改善しました。Files.deleteIfExists()Files.createDirectories() を使用することで、マルチスレッド環境でのファイル操作がより堅牢になります。

パストラバーサル対策

管理画面のデザインファイルアップロード、JSP編集、ログファイルダウンロードにおいて、パスの検証を強化しました。.. シーケンスの除去、パス区切り文字の正規化、ホワイトスペースの除去などを行い、意図しないディレクトリへのアクセスを防止します。

監査・ログ機能の強化

スクリプト実行の監査ログ

Groovyスクリプトの実行を監査ログに記録する機能を追加しました。スクリプトの種類、内容、実行元、ユーザー、実行結果がログに記録されます。script.audit.log.enabled 設定で有効/無効を切り替えられます。

機密情報のマスキング

デバッグログ出力時に、環境変数やシステムプロパティの中で機密性の高い値(PASSWORD、SECRET、TOKEN、KEYなどを含むキー)を自動的にマスキングするようにしました。パターンは app.log.sensitive.property.pattern で設定可能です。

SAMLログの機密情報軽減

SAMLログアウト時の警告ログで、SamlUserオブジェクト全体ではなくユーザー名のみを出力するように変更しました。

シリアライズの安全性向上

Kryoシリアライザで、クラス登録を必須とする設定に変更しました。プリミティブ型、コレクション、日付などの許可されたクラスのみがデシリアライズ可能となり、ガジェットチェーン攻撃のリスクを軽減します。

まとめ

これらの改善により、Fessはより堅牢なセキュリティを備えた検索プラットフォームになります。特にエンタープライズ環境での運用において、監査ログやパスワードポリシーなどの機能が有用です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です