Skip to content

1.5.9.1 の変更点 ​

第1版作成 最終更新 (日本時間)
確認バージョン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.01.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 サーバーを接続した実機検証は行っていません。

調査元 ​