#3921: SASL passwords seemingly cropped to 127 characters
--------------------------------------------+----------------------
 Reporter:  ivucica                         |      Owner:  mutt-dev
     Type:  defect                          |     Status:  new
 Priority:  major                           |  Milestone:
Component:  mutt                            |    Version:  1.7.2
 Keywords:  authentication, sasl, password  |
--------------------------------------------+----------------------
 Hi,
 I've used the following Cyrus SASL plugin to authenticate against Gmail:
 https://github.com/moriyoshi/cyrus-sasl-xoauth2

 I've used my own mini-client to obtain the token, and verify that it
 works. However, the traffic generated by Mutt+cyrus-sasl-xoauth2 does not
 match what my client generates, and the authentication failed.

 The token generated by Google seems to be 129 characters; the base64
 encoding of the `XOAUTH2` token printed in `~/.muttdebug0` seemed a bit
 shorter. Decoding them and comparing them, last 2 characters were cropped.
 I verified this in a slightly safer fashion as follows:

 {{{
 set imap_user="usern...@gmail.com"
 set
 
imap_pass="1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij
 -----XXXXX"
 set imap_authenticators="XOAUTH2"
 }}}

 The following is `~/.muttdebug0`:

 {{{
 [2017-03-05 17:23:31] imap_authenticate: Trying method XOAUTH2
 [2017-03-05 17:23:31] SASL local ip: 2a03:b0c0:0:1010::41:200a;59982,
 remote ip:2a00:1450:400b:c03::6c;993
 [2017-03-05 17:23:31] External SSF: 256
 [2017-03-05 17:23:31] External authentication name: usern...@gmail.com
 [2017-03-05 17:23:31] mutt_sasl_cb_authname: getting authname for
 imap.gmail.com:993
 [2017-03-05 17:23:31] mutt_sasl_cb_pass: getting password for
 usern...@gmail.com@imap.gmail.com:993
 [2017-03-05 17:23:31] Authenticating (XOAUTH2)...
 [2017-03-05 17:23:31] 6> a0002 AUTHENTICATE XOAUTH2
 
dXNlcj11c2VybmFtZUBnbWFpbC5jb20BYXV0aD1CZWFyZXIgMTIzNDU2Nzg5MGFiY2RlZmdoaWoxMjM0NTY3ODkwYWJjZGVmZ2hpajEyMzQ1Njc4OTBhYmNkZWZnaGlqMTIzNDU2Nzg5MGFiY2RlZmdoaWoxMjM0NTY3ODkwYWJjZGVmZ2hpajEyMzQ1Njc4OTBhYmNkZWZnaGlqMTIzNDU2NwEB
 [2017-03-05 17:23:31] 6< a0001 NO [AUTHENTICATIONFAILED] Invalid
 credentials (Failure)
 }}}

 base64-decoded for your convenience:

 {{{
 base64 -d <<<
 
dXNlcj11c2VybmFtZUBnbWFpbC5jb20BYXV0aD1CZWFyZXIgMTIzNDU2Nzg5MGFiY2RlZmdoaWoxMjM0NTY3ODkwYWJjZGVmZ2hpajEyMzQ1Njc4OTBhYmNkZWZnaGlqMTIzNDU2Nzg5MGFiY2RlZmdoaWoxMjM0NTY3ODkwYWJjZGVmZ2hpajEyMzQ1Njc4OTBhYmNkZWZnaGlqMTIzNDU2NwEB
 user=username@gmail.comauth=Bearer
 
1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567890abcdefghij1234567
 }}}

 This is in 1.7.2 NeoMutt, latest available in Debian unstable.

 As far as I can tell, this version includes the 7c0bd34 changeset:
 https://github.com/neomutt/neomutt/blob/neomutt-20170113/imap/auth_sasl.c

 There is no difference in whether I put the token in `imap_pass` in
 `~/.muttrc` or if I paste it into the password prompt.

 I understand that this may be a NeoMutt-only issue, or that this might be
 in `cyrus-sasl-xoauth2`, or even in libsasl2. I grepped over `cyrus-sasl-
 xoauth2` and I cannot find a constant/magic number that has the value 127
 or 128. Digging a bit around `libsasl2`'s code, I also didn't find a
 relevant constant that would read 127 or 128.

 So back to Mutt itself. I think `account.h` is the most worrying thing: it
 has the structure `ACCOUNT` with field `char pass[128]`. Could this be the
 cause? :-)

 If so, could you guys, as a stopgap measure, increase the size of this
 field?

 Thanks!

--
Ticket URL: <https://dev.mutt.org/trac/ticket/3921>
Mutt <http://www.mutt.org/>
The Mutt mail user agent

Reply via email to