CVE-2018-14357
Description
An issue was discovered in Mutt before 1.10.1 and NeoMutt before 2018-07-16. They allow remote IMAP servers to execute arbitrary commands via backquote characters, related to the mailboxes command associated with an automatic subscription.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Mutt and NeoMutt before 2018-07-16 allow remote IMAP servers to execute arbitrary commands via backquote characters in mailbox names.
Vulnerability
An issue was discovered in Mutt before 1.10.1 and NeoMutt before 2018-07-16. The IMAP mailboxes command, which is used for automatic subscription (via $imap_check_subscribed) or manual subscribe/unsubscribe, fails to properly escape backquote characters () in mailbox names. A remote IMAP server can send a crafted mailbox name containing backquotes, which are not quoted when the mailboxes command is processed by mutt_parse_rc_line` [1][4]. This allows command injection within the client's configuration parsing [4].
Exploitation
An attacker with control over an IMAP server (or a man-in-the-middle position) sends a specially crafted mailbox name containing backquote characters to the client. When the client processes the LSUB response or a subscribe/unsubscribe command, it constructs a mailboxes string without properly escaping the backquotes. The crafted string is then passed to mutt_parse_rc_line, which interprets the backquotes as command substitution, executing arbitrary commands embedded in the mailbox name [4]. No authentication is required on the client side beyond connecting to the malicious IMAP server.
Impact
Successful exploitation allows the attacker to execute arbitrary commands on the affected client's system with the privileges of the user running Mutt/NeoMutt. This can lead to full compromise of the user's email and potentially the entire system, including information disclosure, file manipulation, or further lateral movement [1][3].
Mitigation
Mutt users should upgrade to version 1.10.1 or later, and NeoMutt users to the version released on or after 2018-07-16 [1][4]. Red Hat released updated packages for RHEL 6 and 7 via RHSA-2018:2526 [1]. Ubuntu released updates as part of USN-3719-3 [3]. The fix introduces a new function imap_quote_string_and_backquotes that escapes backquote characters [4]. No workaround is available; updating is the only mitigation.
AI Insight generated on May 26, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
13- osv-coords11 versionspkg:rpm/opensuse/mutt&distro=openSUSE%20Tumbleweedpkg:rpm/opensuse/neomutt&distro=openSUSE%20Tumbleweedpkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Desktop%2012%20SP3pkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Module%20for%20Basesystem%2015pkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Point%20of%20Sale%2011%20SP3pkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Server%2011%20SP3-LTSSpkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Server%2011%20SP3-TERADATApkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Server%2011%20SP4pkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Server%2012%20SP3pkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2011%20SP4pkg:rpm/suse/mutt&distro=SUSE%20Linux%20Enterprise%20Server%20for%20SAP%20Applications%2012%20SP3
< 2.0.7-2.2+ 10 more
- (no CPE)range: < 2.0.7-2.2
- (no CPE)range: < 20210205-3.3
- (no CPE)range: < 1.10.1-55.3.1
- (no CPE)range: < 1.10.1-3.3.4
- (no CPE)range: < 1.5.17-42.43.1
- (no CPE)range: < 1.5.17-42.43.1
- (no CPE)range: < 1.5.17-42.43.1
- (no CPE)range: < 1.5.17-42.43.1
- (no CPE)range: < 1.10.1-55.3.1
- (no CPE)range: < 1.5.17-42.43.1
- (no CPE)range: < 1.10.1-55.3.1
Patches
4ed9d7727dc70automatic post-release commit for mutt-1.10.1
3 files changed · +238 −1
ChangeLog+230 −0 modified@@ -1,3 +1,233 @@ +2018-07-13 14:25:28 -0700 Kevin McCarthy <kevin@8t8.us> (3d9028fe) + + * Check outbuf length in mutt_from_base64() + + The obuf can be overflowed in auth_cram.c, and possibly auth_gss.c. + + Thanks to Jeriko One for the bug report. + +M base64.c +M imap/auth_cram.c +M imap/auth_gss.c +M protos.h + +2018-07-13 13:05:22 -0700 Kevin McCarthy <kevin@8t8.us> (6962328c) + + * Check destlen and truncate in url_pct_encode(). + + Thanks to Jeriko One for the patch, which this commit is based upon. + +M url.c + +2018-07-13 12:35:50 -0700 Kevin McCarthy <kevin@8t8.us> (e57a8602) + + * Verify IMAP status mailbox literal count size. + + Ensure the length isn't bigger than the idata->buf. + + Thanks to Jeriko One fo the bug report and patch, which this commit is + based upon. + +M imap/command.c + +2018-07-13 12:24:58 -0700 JerikoOne <jeriko.one@gmx.us> (9347b5c0) + + * Handle NO response without message properly + +M imap/command.c + +2018-07-13 12:15:00 -0700 Kevin McCarthy <kevin@8t8.us> (3287534d) + + * Don't overflow tmp in msg_parse_fetch. + + Ensure INTERNALDATE and RFC822.SIZE field sizes fit temp buffer. + + Thanks to Jeriko One for the bug report and patch, which this patch is + based upon. + +M imap/message.c + +2018-07-13 11:33:16 -0700 Richard Russon <rich@flatcap.org> (31eef6c7) + + * Selectively cache headers. + + Thanks to NeoMutt and Jeriko One for the patch, which was slightly + modified to apply to the Mutt code. + +M imap/util.c + +2018-07-13 11:16:33 -0700 Kevin McCarthy <kevin@8t8.us> (6aed28b4) + + * Sanitize POP bcache paths. + + Protect against bcache directory path traversal for UID values. + + Thanks for Jeriko One for the bug report and patch, which this commit + is based upon. + +M pop.c + +2018-07-13 10:47:11 -0700 JerikoOne <jeriko.one@gmx.us> (e154cba1) + + * Ensure UID in fetch_uidl. + +M pop.c + +2018-07-12 21:41:17 -0700 Kevin McCarthy <kevin@8t8.us> (4d0cd265) + + * Fix buffer size check in cmd_parse_lsub. + + The size parameter to url_ciss_tostring() was off by one. + +M imap/command.c + +2018-07-12 20:46:37 -0700 Kevin McCarthy <kevin@8t8.us> (e0131852) + + * Fix imap_quote_string() length check errors. + + The function wasn't properly checking for dlen<2 before quoting, and + wasn't properly pre-adjusting dlen to include the initial quote. + + Thanks to Jeriko One for reporting these issues. + +M imap/util.c + +2018-07-07 19:32:57 -0700 Kevin McCarthy <kevin@8t8.us> (4ff007ca) + + * Mention $pgp_decode_command for $pgp_check_gpg_decrypt_status_fd + + It scans $pgp_decode_command for inline and application/pgp mime + types. + +M init.h + +2018-07-07 19:03:44 -0700 Kevin McCarthy <kevin@8t8.us> (18515281) + + * Properly quote IMAP mailbox names when (un)subscribing. + + When handling automatic subscription (via $imap_check_subscribed), or + manual subscribe/unsubscribe commands, mutt generating a "mailboxes" + command but failed to properly escape backquotes. + + Thanks to Jeriko One for the detailed bug report and patch, which this + commit is based upon. + +M imap/command.c +M imap/imap.c +M imap/imap_private.h +M imap/util.c + +2018-06-18 11:21:38 +0200 Philipp Gesang <philipp.gesang@intra2net.com> (df4affd1) + + * crypt-gpgme: prevent crash on bad S/MIME signature + + Inform the user about the fingerprint being unavailable instead + of crashing if the S/MIME signature is bad. + +M crypt-gpgme.c + +2018-06-04 21:31:33 -0700 Kevin McCarthy <kevin@8t8.us> (edb4ec84) + + * Add GnuPG status fd checks for inline pgp. + + The difficulty is that "BEGIN PGP MESSAGE" could be a signed and + armored part, so we can't fail hard if it isn't encrypted. + + Change pgp_check_decryption_okay() to return more status codes, with + >=0 indicating an actual decryption; -2 and -1 indicating plaintext + found; and -3 indicating an actual DECRYPTION_FAILED status code seen. + + Fail hard on -3, but change the message for -2 and -1 to indicate the + message was not encrypted. + +M pgp.c + +2018-06-04 15:40:57 -0700 Kevin McCarthy <kevin@8t8.us> (8ec6d766) + + * Add $pgp_check_gpg_decrypt_status_fd. + + If set (the default) mutt performs more thorough checking of the + $pgp_decrypt_command status output for GnuPG result codes. + + Ticket #39 revealed that GnuPG (currently) does not protect against + messages that have been manipulated to contain an empty encryption + packet followed by a plaintext packet. + + A huge thanks to Marcus Brinkmann for researching this issue, taking + the time to report it to us (and the GnuPG team), and taking even more + time to clarify exactly what needed to be checked for. + +M contrib/gpg.rc +M contrib/pgp2.rc +M contrib/pgp5.rc +M contrib/pgp6.rc +M init.h +M mutt.h +M pgp.c + +2018-06-03 14:52:37 -0700 Kevin McCarthy <kevin@8t8.us> (cb2329ae) + + * Revert showing real size for small files in mutt_pretty_size(). + + I thought the change made in 0fa64ba9 was small enough not to matter, + but at least one long-time user took the time to track down the change + and request it be reverted. + +M muttlib.c + +2018-06-03 14:40:31 -0700 Kevin McCarthy <kevin@8t8.us> (33290d12) + + * Switch build scripts to use `` instead of $() + + This is for older systems running Bourne shell as /bin/sh. + +M mkchangelog.sh +M mkreldate.sh +M version.sh + +2013-01-06 19:24:18 +0100 Oswald Buddenhagen <ossi@kde.org> (ec96f5f5) + + * fix inappropriate use of FREE() in ssl init error path + + OpenSSL structures need to be freed with dedicated functions. + +M mutt_ssl.c + +2018-05-19 10:57:10 -0700 Kevin McCarthy <kevin@8t8.us> (d55950a8) + + * automatic post-release commit for mutt-1.10.0 + +M ChangeLog +M VERSION +M po/bg.po +M po/ca.po +M po/cs.po +M po/da.po +M po/de.po +M po/el.po +M po/eo.po +M po/es.po +M po/et.po +M po/eu.po +M po/fr.po +M po/ga.po +M po/gl.po +M po/hu.po +M po/id.po +M po/it.po +M po/ja.po +M po/ko.po +M po/lt.po +M po/nl.po +M po/pl.po +M po/pt_BR.po +M po/ru.po +M po/sk.po +M po/sv.po +M po/tr.po +M po/uk.po +M po/zh_CN.po +M po/zh_TW.po 2018-05-17 12:24:31 -0700 Ivan Vilata i Balaguer <ivan@selidor.net> (70c9c89b) * Updated Catalan translation.
UPDATING+7 −0 modified@@ -8,6 +8,13 @@ http://www.mutt.org/doc/manual/ The keys used are: !: modified feature, -: deleted feature, +: new feature +1.10.1 (2018-07-16): + + ! Bug fix release. + + $pgp_check_gpg_decrypt_status_fd, when set (the default), checks + GnuPG status fd output more thoroughly for spooofed encrypted + messages. Please see contrib/gpg.rc for suggested values. + 1.10.0 (2018-05-19): ! $reply_self is now respected for group-reply, even with $metoo unset.
VERSION+1 −1 modified@@ -1 +1 @@ -1.10.0 +1.10.1
6a147a62cf39merge: NeoMutt 2018-07-16
41 files changed · +20281 −20118
auto.def+1 −1 modified@@ -14,7 +14,7 @@ use system cc cc-lib mutt-gettext mutt-iconv ############################################################################### # Names and versions define PACKAGE "neomutt" -define PACKAGE_VERSION "20180622" +define PACKAGE_VERSION "20180716" define BUGS_ADDRESS "neomutt-devel@neomutt.org" # Subdirectories that contain additional Makefile.autosetup files
ChangeLog.md+6 −0 modified@@ -1,3 +1,9 @@ +2018-07-16 Richard Russon <rich@flatcap.org> +* Features + - <check-stats> function +* Bug Fixes + - Lots + 2018-06-22 Richard Russon <rich@flatcap.org> * Features - Expand variables inside backticks
doxygen/doxygen.conf+1 −1 modified@@ -25,7 +25,7 @@ PROJECT_NAME = "NeoMutt" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2018-06-22 +PROJECT_NUMBER = 2018-07-16 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a
imap/auth_plain.c+2 −1 modified@@ -77,7 +77,8 @@ enum ImapAuthRes imap_auth_plain(struct ImapData *idata, const char *method) } if (rc == IMAP_CMD_RESPOND) { - mutt_str_strcat(buf + sizeof(auth_plain_cmd), sizeof(buf) - sizeof(auth_plain_cmd), "\r\n"); + mutt_str_strcat(buf + sizeof(auth_plain_cmd), + sizeof(buf) - sizeof(auth_plain_cmd), "\r\n"); mutt_socket_send(idata->conn, buf + sizeof(auth_plain_cmd)); } }
imap/imap.c+2 −2 modified@@ -1730,8 +1730,8 @@ int imap_subscribe(char *path, bool subscribe) mutt_buffer_init(&err); err.data = errstr; err.dsize = sizeof(errstr); - len = snprintf(mbox, sizeof(mbox), "%smailboxes ", subscribe ? "" : "un"); - imap_quote_string(mbox + len, sizeof(mbox) - len, path, true); + len = snprintf(mbox, sizeof(mbox), "%smailboxes ", subscribe ? "" : "un"); + imap_quote_string(mbox + len, sizeof(mbox) - len, path, true); if (mutt_parse_rc_line(mbox, &token, &err)) mutt_debug(1, "Error adding subscribed mailbox: %s\n", errstr); FREE(&token.data);
.mailmap+4 −1 modified@@ -61,6 +61,7 @@ Jakub Jindra <jakub.jindra@socialbakers.com> Jakub Jindra <j Jakub Wilk <jwilk@jwilk.net> Jakub Wilk <jwilk@jwilk.net> # @jwilk Jelle van der Waa <jelle@vdwaa.nl> Jelle van der Waa <jelle@vdwaa.nl> # @jelly Jenya Sovetkin <e.sovetkin@gmail.com> Jenya Sovetkin <e.sovetkin@gmail.com> # @esovetkin +JerikoOne <jeriko.one@gmx.us> JerikoOne <jeriko.one@gmx.us> # @jeriko-one Joey Pabalinas <joeypabalinas@gmail.com> Joey Pabalinas <joeypabalinas@gmail.com> # @alyptik Johannes Weißl <jargon@molb.org> Johannes Weißl <jargon@molb.org> # @weisslj Jonathan Perkin <jperkin@netbsd.org> Jonathan Perkin <jperkin@netbsd.org> # @jperkin @@ -80,6 +81,7 @@ Marcin Rajner <mrajner@gik.pw.edu.pl> Marcin Rajner <m Marcin Rajner <mrajner@gik.pw.edu.pl> Marcin Rajner <mrajner@lenovo> # @mrajner Marcin Rajner <mrajner@gik.pw.edu.pl> Marcin Rajner lenovo <mrajner@gik.pw.edu.pl> # @mrajner Marco Hinz <mh.codebro@gmail.com> Marco Hinz <mh.codebro@gmail.com> # @mhinz +Marco Sirabella <marco@sirabella.org> Marco Sirabella <marco@sirabella.org> # @mjsir911 Marius Gedminas <marius@gedmin.as> Marius Gedminas <marius@gedmin.as> # @mgedmin Mehdi Abaakouk <sileht@sileht.net> Mehdi ABAAKOUK <sileht@sileht.net> # @sileht Mehdi Abaakouk <sileht@sileht.net> Mehdi Abaakouk <sileht@sileht.net> # @sileht @@ -156,7 +158,8 @@ Andreas Jobs <unknown> Andreas Jobs <un Andrew Gaul <andrew@gaul.org> Andrew Gaul <andrew@gaul.org> Andrew Nosenko <awn@bcs.zp.ua> Andrew W. Nosenko <awn@bcs.zp.ua> Antoine Reilles <tonio@netbsd.org> Antoine Reilles <tonio@netbsd.org> -Anton Lindqvist <anton.lindqvist@gmail.com> Anton Lindqvist <anton.lindqvist@gmail.com> +Anton Lindqvist <anton@basename.se> Anton Lindqvist <anton.lindqvist@gmail.com> +Anton Lindqvist <anton@basename.se> Anton Lindqvist <anton@basename.se> Armin Wolfermann <aw@osn.de> Armin Wolfermann <aw@osn.de> Aron Griffis <agriffis@n01se.net> Aron Griffis <agriffis@n01se.net> Athanasios Douitsis <aduitsis@gmail.com> Athanasios Douitsis <aduitsis@gmail.com>
newsrc.c+2 −1 modified@@ -601,7 +601,8 @@ int nntp_add_group(char *line, void *data) return 0; /* These sscanf limits must match the sizes of the group and desc arrays */ - if (sscanf(line, "%1023s " ANUM " " ANUM " %c %8191[^\n]", group, &last, &first, &mod, desc) < 4) + if (sscanf(line, "%1023s " ANUM " " ANUM " %c %8191[^\n]", group, &last, + &first, &mod, desc) < 4) { mutt_debug(4, "Cannot parse server line: %s\n", line); return 0;
nntp.c+1 −1 modified@@ -1289,7 +1289,7 @@ static int nntp_fetch_headers(struct Context *ctx, void *hc, anum_t first, fc.restore = restore; fc.messages = mutt_mem_calloc(last - first + 1, sizeof(unsigned char)); if (fc.messages == NULL) - return -1; + return -1; #ifdef USE_HCACHE fc.hc = hc; #endif
pattern.c+8 −8 modified@@ -1885,13 +1885,13 @@ int mutt_pattern_exec(struct Pattern *pat, enum PatternExecFlag flags, case MUTT_SENDER: if (!h->env) return 0; - return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), 1, - h->env->sender)); + return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), + 1, h->env->sender)); case MUTT_FROM: if (!h->env) return 0; - return (pat->not ^ - match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), 1, h->env->from)); + return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), + 1, h->env->from)); case MUTT_TO: if (!h->env) return 0; @@ -1924,14 +1924,14 @@ int mutt_pattern_exec(struct Pattern *pat, enum PatternExecFlag flags, case MUTT_ADDRESS: if (!h->env) return 0; - return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), 4, - h->env->from, h->env->sender, + return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), + 4, h->env->from, h->env->sender, h->env->to, h->env->cc)); case MUTT_RECIPIENT: if (!h->env) return 0; - return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), 2, - h->env->to, h->env->cc)); + return (pat->not ^ match_addrlist(pat, (flags & MUTT_MATCH_FULL_ADDRESS), + 2, h->env->to, h->env->cc)); case MUTT_LIST: /* known list, subscribed or not */ if (!h->env) return 0;
po/bg.po+675 −670 modifiedpo/ca.po+675 −670 modifiedpo/cs.po+675 −670 modifiedpo/da.po+675 −670 modifiedpo/de.po+675 −670 modifiedpo/el.po+675 −670 modifiedpo/en_GB.po+674 −670 modifiedpo/eo.po+675 −670 modifiedpo/es.po+675 −670 modifiedpo/et.po+675 −670 modifiedpo/eu.po+675 −670 modifiedpo/fr.po+675 −670 modifiedpo/ga.po+675 −670 modifiedpo/gl.po+675 −670 modifiedpo/hu.po+675 −670 modifiedpo/id.po+675 −670 modifiedpo/it.po+675 −670 modifiedpo/ja.po+675 −670 modifiedpo/ko.po+675 −670 modifiedpo/lt.po+675 −670 modifiedpo/nl.po+675 −670 modifiedpo/pl.po+675 −670 modifiedpo/pt_BR.po+675 −670 modifiedpo/ru.po+675 −670 modifiedpo/sk.po+675 −670 modifiedpo/sv.po+675 −670 modifiedpo/tr.po+675 −670 modifiedpo/uk.po+675 −670 modifiedpo/zh_CN.po+675 −670 modifiedpo/zh_TW.po+675 −670 modifiedREADME.md+3 −1 modified@@ -2,7 +2,7 @@ [](https://github.com/neomutt/neomutt "Give us a Star") [](https://twitter.com/NeoMutt_Org "Follow us on Twitter") -[](#contributors "All of NeoMutt's Contributors") +[](#contributors "All of NeoMutt's Contributors") [](https://github.com/neomutt/neomutt/releases/latest "Latest Release Notes") [](https://github.com/neomutt/neomutt/blob/master/COPYRIGHT.md "Copyright Statement") [](https://travis-ci.org/neomutt/neomutt "Latest Automatic Code Build") @@ -137,6 +137,7 @@ Here's a list of everyone who's helped NeoMutt: [Jasper Adriaanse](https://github.com/jasperla "jasperla"), [Jelle van der Waa](https://github.com/jelly "jelly"), [Jenya Sovetkin](https://github.com/esovetkin "esovetkin"), +[JerikoOne](https://github.com/jeriko-one "jeriko-one"), [Joey Pabalinas](https://github.com/alyptik "alyptik"), [Johannes Frankenau](https://github.com/tsuflux "tsuflux"), [Johannes Weißl](https://github.com/weisslj "weisslj"), @@ -156,6 +157,7 @@ Here's a list of everyone who's helped NeoMutt: [Manos Pitsidianakis](https://github.com/epilys "epilys"), [Marcin Rajner](https://github.com/mrajner "mrajner"), [Marco Hinz](https://github.com/mhinz "mhinz"), +[Marco Sirabella](https://github.com/mjsir911 "mjsir911"), [Marius Gedminas](https://github.com/mgedmin "mgedmin"), [Mateusz Piotrowski](https://github.com/0mp "0mp"), [Matteo Vescovi](https://github.com/mfvescovi "mfvescovi"),
send.c+2 −1 modified@@ -1076,7 +1076,8 @@ struct Address *mutt_default_from(void) if (From) addr = mutt_addr_copy(From); - else { + else + { addr = mutt_addr_new(); if (UseDomain) {
e52393740334quote imap strings more carefully
5 files changed · +15 −12
imap/auth_login.c+2 −2 modified@@ -65,8 +65,8 @@ enum ImapAuthRes imap_auth_login(struct ImapData *idata, const char *method) mutt_message(_("Logging in...")); - imap_quote_string(q_user, sizeof(q_user), idata->conn->account.user); - imap_quote_string(q_pass, sizeof(q_pass), idata->conn->account.pass); + imap_quote_string(q_user, sizeof(q_user), idata->conn->account.user, false); + imap_quote_string(q_pass, sizeof(q_pass), idata->conn->account.pass, false); /* don't print the password unless we're at the ungodly debugging level * of 5 or higher */
imap/command.c+1 −1 modified@@ -499,7 +499,7 @@ static void cmd_parse_lsub(struct ImapData *idata, char *s) mutt_str_strfcpy(buf, "mailboxes \"", sizeof(buf)); mutt_account_tourl(&idata->conn->account, &url); /* escape \ and " */ - imap_quote_string(errstr, sizeof(errstr), list.name); + imap_quote_string(errstr, sizeof(errstr), list.name, true); url.path = errstr + 1; url.path[strlen(url.path) - 1] = '\0'; if (mutt_str_strcmp(url.user, ImapUser) == 0)
imap/imap.c+5 −5 modified@@ -464,25 +464,25 @@ static int compile_search(struct Context *ctx, const struct Pattern *pat, struct return -1; } *delim = '\0'; - imap_quote_string(term, sizeof(term), pat->p.str); + imap_quote_string(term, sizeof(term), pat->p.str, false); mutt_buffer_addstr(buf, term); mutt_buffer_addch(buf, ' '); /* and field */ *delim = ':'; delim++; SKIPWS(delim); - imap_quote_string(term, sizeof(term), delim); + imap_quote_string(term, sizeof(term), delim, false); mutt_buffer_addstr(buf, term); break; case MUTT_BODY: mutt_buffer_addstr(buf, "BODY "); - imap_quote_string(term, sizeof(term), pat->p.str); + imap_quote_string(term, sizeof(term), pat->p.str, false); mutt_buffer_addstr(buf, term); break; case MUTT_WHOLE_MSG: mutt_buffer_addstr(buf, "TEXT "); - imap_quote_string(term, sizeof(term), pat->p.str); + imap_quote_string(term, sizeof(term), pat->p.str, false); mutt_buffer_addstr(buf, term); break; case MUTT_SERVERSEARCH: @@ -495,7 +495,7 @@ static int compile_search(struct Context *ctx, const struct Pattern *pat, struct } } mutt_buffer_addstr(buf, "X-GM-RAW "); - imap_quote_string(term, sizeof(term), pat->p.str); + imap_quote_string(term, sizeof(term), pat->p.str, false); mutt_buffer_addstr(buf, term); break; }
imap/imap_private.h+1 −1 modified@@ -328,7 +328,7 @@ char *imap_get_qualifier(char *buf); int imap_mxcmp(const char *mx1, const char *mx2); char *imap_next_word(char *s); void imap_qualify_path(char *dest, size_t len, struct ImapMbox *mx, char *path); -void imap_quote_string(char *dest, size_t dlen, const char *src); +void imap_quote_string(char *dest, size_t dlen, const char *src, bool quote_backtick); void imap_unquote_string(char *s); void imap_munge_mbox_name(struct ImapData *idata, char *dest, size_t dlen, const char *src); void imap_unmunge_mbox_name(struct ImapData *idata, char *s);
imap/util.c+6 −3 modified@@ -798,9 +798,12 @@ void imap_qualify_path(char *dest, size_t len, struct ImapMbox *mx, char *path) * * Surround string with quotes, escape " and \ with backslash */ -void imap_quote_string(char *dest, size_t dlen, const char *src) +void imap_quote_string(char *dest, size_t dlen, const char *src, bool quote_backtick) { - static const char quote[] = "\"\\"; + const char *quote = "`\"\\"; + if (!quote_backtick) + quote++; + char *pt = dest; const char *s = src; @@ -874,7 +877,7 @@ void imap_munge_mbox_name(struct ImapData *idata, char *dest, size_t dlen, const char *buf = mutt_str_strdup(src); imap_utf_encode(idata, &buf); - imap_quote_string(dest, dlen, buf); + imap_quote_string(dest, dlen, buf, false); FREE(&buf); }
185152818541Vulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
10- access.redhat.com/errata/RHSA-2018:2526mitrevendor-advisoryx_refsource_REDHAT
- security.gentoo.org/glsa/201810-07mitrevendor-advisoryx_refsource_GENTOO
- usn.ubuntu.com/3719-1/mitrevendor-advisoryx_refsource_UBUNTU
- usn.ubuntu.com/3719-3/mitrevendor-advisoryx_refsource_UBUNTU
- www.debian.org/security/2018/dsa-4277mitrevendor-advisoryx_refsource_DEBIAN
- www.mutt.org/news.htmlmitrex_refsource_MISC
- github.com/neomutt/neomutt/commit/e52393740334443ae0206cab2d7caef381646725mitrex_refsource_MISC
- gitlab.com/muttmua/mutt/commit/185152818541f5cdc059cbff3f3e8b654fc27c1dmitrex_refsource_MISC
- lists.debian.org/debian-lts-announce/2018/08/msg00001.htmlmitremailing-listx_refsource_MLIST
- neomutt.org/2018/07/16/releasemitrex_refsource_MISC
News mentions
0No linked articles in our index yet.