On May 3, 2010, at 11:42 AM, David Smith wrote:

> I'd be happy to check if I can still connect to iChat Server if someone gives 
> me a patched Adium.


I should have checked the code instead of the ticket; I left later-me some good 
details there.
jabber_auth_start_cyrus() for us includes:
{
        /* We have no mechs which can work.
         * Try falling back on the old jabber:iq:auth method. We get here if 
the server supports
         * one or more sasl mechs, we are compiled with cyrus-sasl support, but 
we support or can connect with none of
         * the offerred mechs. jabberd 2.0 w/ SASL and Apple's iChat Server 
10.5 both handle and expect
         * jabber:iq:auth in this situation.  iChat Server in particular offers 
SASL GSSAPI by default, which is often
         * not configured on the client side, and expects a fallback to 
jabber:iq:auth when it (predictably) fails.
         *
         * Note: xep-0078 points out that using jabber:iq:auth after a sasl 
failure is wrong. However,
         * I believe this refers to actual authentication failure, not a simple 
lack of concordant mechanisms.
         * Doing otherwise means that simply compiling with SASL support 
renders the client unable to connect to servers
         * which would connect without issue otherwise. -evands
         */
        js->auth_mech = NULL;
        jabber_auth_start_old(js);
        return JABBER_SASL_STATE_CONTINUE;
}


However, elsewhere in auth_cyrus, jabber_cyrus_handle_failure() has what 
appears to be better logic:

if (tried_gssapi_first) {
                        /* If we tried GSSAPI first, it failed, and it was our 
only shot, try jabber:iq:auth
                         * for compatibility with iChat 10.5 Server.
                         *
                         * iChat Server 10.5  offers SASL GSSAPI by default, 
which is often
                         * not configured on the client side, and expects a 
fallback to jabber:iq:auth when it (predictably) fails.
                         *
                         * Note: xep-0078 points out that using jabber:iq:auth 
after a sasl failure is wrong. However,
                         * I believe this refers to actual authentication 
failure, not a simple lack of concordant mechanisms.
                         * Doing otherwise means that simply compiling with 
SASL support renders the client unable to connect to servers
                         * which would connect without issue otherwise. -evands
                         */
                         sasl_dispose(&js->sasl);
                         js->sasl = NULL;
                         js->auth_mech = NULL;
                         jabber_auth_start_old(js);
                         return JABBER_SASL_STATE_CONTINUE;
                }

(comments expanded just-now by me).
In im.pigin.adium.1-4's 2fcd834324b05d3becf6878db8ce1c474578e720 I have removed 
the former, aggressive behavior and left the latter.  I think this should solve 
the problem presented while maintaining the workaround for iChat Server 10.5's 
apparent wrongness.


This is committed in adium-1.4's [6534647aece5289a0e5ac90c012bcbf75e3918f3].

A build for testing is uploaded at 
http://adiumx.cachefly.net/Adium_1.4b18-noJabberHack.dmg

The downgrade attack Joe mentions does still exist, but now if and only if 
((GSSAPI is the only offered SASL mech) && (GSSAPI fails)).  Further 
improvement would be a prompt as described in that setting; patches welcome.

Look forward to any feedback.

-Evan

Reply via email to