Re: Cyrus imap 3.4.8: synchronizing local mailbox list with MUPDATE server does not work

Michael Menge <[email protected]>
Newsgroups gmane.mail.imap.cyrus
Message-ID <20240613124630.Horde.NOhfEN5_j7cckdUDDKclMwj@webmail.uni-tuebingen.de>
Hi

we did some debugging and want to share our findings, so that ist  
problem can be fixed ASAP.

I seams that error is triggered by the following changes to getxstring  
imap/imapparse.c:91
This function has been changed to fix CVE-2024-34055

@@ -149,12 +149,20 @@ EXPORTED int getxstring(struct protstrea
          }

          /* Literal */
-        isnowait = pin->isclient;
+        isnowait = !pin->isclient;
          buf_reset(buf);
          c = getint32(pin, &len);
-        if (c == '+') {
-            // LITERAL- says maximum size is 4096!
-            if (lminus && len > 4096) return EOF;
+
+        if (pin->isclient && c == '+') {
+            /* LITERAL- says maximum size is 4096! */
+            if (lminus && len > 4096) {
+                /* Fail per RFC 7888, Section 4, choice 2 */
+                fatal(error_message(IMAP_LITERAL_MINUS_TOO_LARGE),  
EX_PROTOCOL);
+            }
+            if (config_maxliteral && len >= 0 && (unsigned) len >  
config_maxliteral) {
+                /* Fail per RFC 7888, Section 4, choice 2 */
+                fatal(error_message(IMAP_LITERAL_TOO_LARGE), EX_PROTOCOL);
+            }
              isnowait++;
              c = prot_getc(pin);
          }

I do not understand why the logic for isnowait has been inverted, but  
this could be a red herring,
but as "ctl_mboxlist" is acting as a client i find it more suspicious  
that "pin->isclient" was 0 and
therefore the "if (pin->isclient && c == '+') {" block was skipped

Removing the "pin->isclient &&" from the condition did allow  
"ctl_mboxlist" to run successful
but i suspect that this is not a viable solution as it could/would  
reintroduce some of the problems
from CVE-2024-34055

Kind regards

    Michael Menge


Quoting Jean Charles Delépine via Info <[email protected]>:

> Quoting Ben Müller <[email protected]>:
>
>> Hello,
>>
>> we have a small test setup with Cyrus Murder version 3.4 on RHEL 8.
>>
>> With version 3.4.7 all works well, but with version 3.4.8 the  
>> backend server cannot synchronize its local mailbox list with the  
>> MUPDATE server anymore. The command "ctl_mboxlist -m" gives the  
>> error message: "couldn't do LIST command on mupdate server".
>>
>> Does anybody see the same error? What can we do to make it work?
>
> Same problem here vith murder 3.2.12 and backend 3.8.3.
> The initial ctl_mboxlist -m works fine but not the others, ending  
> with "couldn't  do LIST command on mupdate server" error.
>
>         Jean Charles Delépine
>
> -- 
> Service systèmes et réseaux - DISI
>
> Université de Picardie Jules Verne
> 5, rue du moulin neuf - 80000 Amiens
>
>
> ------------------------------------------
> Cyrus: Info
> Permalink:  
> https://cyrus.topicbox.com/groups/info/T5a7b6ffa3591f516-M29a7044fd59885b021526a31
> Delivery options: https://cyrus.topicbox.com/groups/info/subscription



--------------------------------------------------------------------------------
Michael Menge                          Tel.: (49) 7071 / 29-70316
Universität Tübingen                   Fax.: (49) 7071 / 29-5912
Zentrum für Datenverarbeitung          mail:  
[email protected]
Wächterstraße 76
72074 Tübingen


------------------------------------------
Cyrus: Info
Permalink: https://cyrus.topicbox.com/groups/info/T5a7b6ffa3591f516-M87a6286487b258473c547bf1
Delivery options: https://cyrus.topicbox.com/groups/info/subscription
smime.p7s (application/pkcs7-signature, 6.5 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.