[Java, Security] A Bug in Kerberos used by Java's HTTP

原文はこちら。
https://blogs.oracle.com/wangwj/entry/a_bug_in_kerberos_used

先頃JDK-802835が直接報告されて初めて、Oracle Forumのスレッドに気付きました。ごめんなさい。
Java SE Ver 7 Uxx locking out domain user account failing Kerberos PreAuth
https://community.oracle.com/thread/2547044
JWS doesn't get authenticated when using kerberos auth proxy (JDK-8028351)
https://bugs.openjdk.java.net/browse/JDK-8028351
調査の結果、このバグはJava SE 7u60とJava SE 8で修正されます。遅すぎる解決でないことを願っています。
Windows認証を控えるWebページは実際のところKerberosならびにNTLMで保護されており、クライアントがサポートするどちらの認証スキームでもアクセス可能です。JDK 7では、ドメインに参加している(正確には以下をご覧下さい)WindowsマシンではKerberosが標準で動作するため、常にKerberos認証をまず最初に試行します。ところが、allowtgtsessionkeyというレジストリキーを設定していない場合、Javaはログインにパスワードを必要とします。
allowtgtsessionkey Registry Key
http://www.javaactivedirectory.com/?page_id=93
(JAASを直接プログラミングしていないかぎり)このパスワードを入手する方法はないので、Javaは空パスワードで試行します。当然ながらKDC(Windowsドメインコントローラ)はこの試行を拒否し、複数回試行すると当該ユーザーをブロックします。
スレッドでは .java.login.config のトリックについて言及されています。Javaはファイルを使いたいけれども見つけることができない場合、ログインの試行を全くせずに失敗します。このバグレポートには、Kerberosの事前認証の無効化が回避策との記載があります。この場合、暗号化されたタイムスタンプを送信しないので、KDCはクライアントが正しいパスワードを持っていることを知る機会がありません。
いずれにせよ、Kerberos認証は常に失敗し、JavaはNTLM認証にフォールバックするため、Webページには到達します。しかし、恐ろしい事に、空のパスワードの場合は、最初はアクセスしてページを読むことができますが、何度もアクセスすると、最終的にアカウントがブロックされてしまい、NTLM認証も機能しなくなってしまいます。

0 件のコメント:

コメントを投稿