1.5.9.1 の変更点
リリース日: 2026年10月23日。1.5.9.0 からの変更です。LDAP 認証で、条件によってパスワードの検証を経ずにログインを許可する問題を修正しています。
1.5.8系には、同等のLDAP認証修正を入れた先行対策版 1.5.8.2 が2026年10月13日に配布されています。1.5.8.2と1.5.9.1は修正を含み、通常版の1.5.9.0は含まない、という関係です。
機能追加・仕様変更
機能追加・仕様変更はありません。直前の機能追加は 1.5.9.0 にまとめています。
不具合修正
- 認証・セキュリティ — LDAP 認証で、特定条件下にパスワードを正しく検証せずログインを許可する問題を修正。
修正の詳細
LDAP サーバーへ接続する前に空のパスワードを拒否する
Ldap.Authenticate() の冒頭に、パスワードが null または空文字列なら false を返す処理が加わりました。OS やプロバイダーによる振り分けより前に判定するので、どちらの LDAP 実装にも進みません(Ldap.cs)。
同じ判定が LdapNovellDs.Authenticate() にも加わっています。こちらは接続設定を順に試す foreach より前に戻るため、ユーザー検索・ユーザー DN での Bind・利用者情報の同期を実行しません(LdapNovellDs.cs)。
| 段階 | 1.5.9.0 | 1.5.9.1 |
|---|---|---|
| 共通の認証入口 | パスワードの空判定なしでプロバイダーへ振り分ける | null・空文字列なら失敗を返す |
| Novell 実装の入口 | 空判定なしで接続設定を走査する | null・空文字列なら接続前に失敗を返す |
| 空でないパスワード | LDAP のユーザー検索と Bind で検証する | 既存の検証処理へ進む |
Novell 実装では、同期用の資格情報でユーザーを検索した後、検索結果の DN と入力されたパスワードで con.Bind() を実行し、例外がなければユーザー情報を同期して成功を返します。今回の修正は、その処理へ空のパスワードを渡すことを入口で防ぎます。前版で問題が起きるかは LDAP サーバー側の応答にも依存するため、すべての LDAP 構成でログインが成立していたとは断定できません(旧版の認証処理)。
IsNullOrEmpty() は string.IsNullOrEmpty() を呼びます。空白だけの文字列を除去する処理や、入力パスワードを Trim() する処理ではありません(Strings.cs)。
適用される環境と設定
共通入口は、Authentication.json の DsProvider が Novell なら Novell 実装を選び、それ以外は OS が Windows なら LdapDs、それ以外なら LdapNovellDs を選びます。修正を Novell 専用と考えず、LDAP 認証を使う環境では更新対象として確認します(プロバイダーの選択)。
有効化する追加パラメータはありません。版間のソース差分は LDAP の 2 ファイルと各プロジェクトの版表記で、配布パラメータ、DB 列定義、SiteSettings JSON の変更はありません。バージョン間機能比較でも 1.5.9.0 と比較できます。
更新後に確認すること
検証用の LDAP 利用者で、次の結果を確認します。
| 入力・操作 | 確認する結果 |
|---|---|
| 正しいパスワードでログイン | 従来どおりログインできる |
| 誤ったパスワードでログイン | ログインできない |
| パスワードを空にしたログイン | 認証に成功せず、ログインできない |
| 正常なログイン後の利用者情報 | 従来の同期結果と整合する |
このページは対象タグのソース差分を確認した解説です。LDAP サーバーを接続した実機検証は行っていません。