Issue with dovecot v2.3.4.1 and mail_crypt plugin. Email received, but not encrypted on disk until moved out of root Maildir folder. IMAP child crashes when mail is read from folder message was moved to.

Ben Burk ben at burk.tech
Sun May 23 02:52:27 EEST 2021


Recently I attempted enabling the mail_crypt plugin on a per user basis 
as summarized below:


uname -a

Linux smtp 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 
GNU/Linux


dovecot --version

2.3.4.1 (f79e8e7e4)


$ cat /etc/dovecot/conf.d/10-mailcrypt.conf


mail_attribute_dict = file:%h/Maildir/dovecot-attributes
mail_plugins = $mail_plugins mail_crypt

plugin {
   mail_crypt_curve = secp521r1
   mail_crypt_save_version = 2
   mail_crypt_require_encrypted_user_key = yes
}


cat dovecot-sql.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=VVVVV user=WWWWWW password=XXXXXX
user_query = SELECT user, \
   concat('*:bytes=', quota) AS quota_rule, \
   '/mail/%d/%n' AS home, \
   uid, gid \
   FROM virtual_users WHERE user='%u';
password_query = SELECT user, password, crypt as 
userdb_mail_crypt_save_version, '%w' AS 
userdb_mail_crypt_private_password FROM virtual_users WHERE user='%u';


dovecot -n

# 2.3.4.1 (f79e8e7e4): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.4 ()
# OS: Linux 4.19.0-16-amd64 x86_64 Debian 10.9
# Hostname: smtp.burk.tech
auth_verbose = yes
mail_attribute_dict = file:%h/Maildir/dovecot-attributes
mail_location = maildir:~/Maildir:LAYOUT=fs
mail_plugins = quota mail_crypt
mail_privileged_group = mail
namespace inbox {
   inbox = yes
   location =
   mailbox Drafts {
     auto = subscribe
     special_use = \Drafts
   }
   mailbox Junk {
     auto = subscribe
     special_use = \Junk
   }
   mailbox Sent {
     auto = subscribe
     special_use = \Sent
   }
   mailbox Trash {
     auto = subscribe
     special_use = \Trash
   }
   prefix =
   type = private
}
passdb {
   driver = pam
}
plugin {
   mail_crypt_curve = secp521r1
   mail_crypt_require_encrypted_user_key = # hidden, use -P to show it
   mail_crypt_save_version = 2
}
protocols = imap
service auth {
   unix_listener /var/spool/postfix/private/auth {
     group = postfix
     mode = 0660
     user = postfix
   }
   unix_listener auth-userdb {
     mode = 0777
   }
}
service lmtp {
   unix_listener /var/spool/postfix/private/dovecot-lmtp {
     group = postfix
     mode = 0600
     user = postfix
   }
}
ssl = required
ssl_cert = </etc/dovecot/fullchain.cer.pem
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
ssl_min_protocol = TLSv1.2
ssl_prefer_server_ciphers = yes
userdb {
   driver = passwd
}
verbose_ssl = yes
protocol lmtp {
   hostname = smtp.burk.tech
   postmaster_address = postmaster at burk.tech
}
protocol imap {
   mail_max_userip_connections = 50
}



The issue I've noticed occurs when the following settings above are 
enabled and mail is received into the root of the Maildir fs, then mail 
is moved to another folder (including a file being deleted). Upon a 
client's retrieval of messages from the folder where mail was moved to, 
the log spits out the following:


May 22 19:18:15 smtp dovecot: imap-login: Login: user=<ben>, 
method=PLAIN, rip=XXX.XXX.XXX.XXX, lip=YYY.YYY.YYY.YYY, mpid=31682, TLS, 
session=<7oASZPPCkN9EdIVp>
May 22 19:18:15 smtp dovecot: imap(ben)<31682><7oASZPPCkN9EdIVp>: Error: 
Mailbox Trash: Saving mail: save: read() failed: 
read(/mail/burk.tech/ben/Maildir/Receipts/cur/1621724316.M515979P30417.smtp,S=2903,W=2964:2,S) 
failed: Private key not available: Cannot decrypt key 
f9e7a6b9dd24535a29915fb46336047b07ae5b9fea5eda8e03cf9a8fa009f88b: Cannot 
decrypt key 
876c6bfbc355a86c3c924a5841bb2e5c6e1b0c5496d5116c4fcb9c511f803c87: 
Password not available
May 22 19:18:15 smtp dovecot: imap(ben)<31682><7oASZPPCkN9EdIVp>: Error: 
Mailbox Trash: copy: i_stream_read() failed: 
read(/mail/burk.tech/ben/Maildir/Receipts/cur/1621724316.M515979P30417.smtp,S=2903,W=2964:2,S) 
failed: Private key not available: Cannot decrypt key 
f9e7a6b9dd24535a29915fb46336047b07ae5b9fea5eda8e03cf9a8fa009f88b: Cannot 
decrypt key 
876c6bfbc355a86c3c924a5841bb2e5c6e1b0c5496d5116c4fcb9c511f803c87: 
Password not available
May 22 19:18:15 smtp dovecot: imap(ben)<31682><7oASZPPCkN9EdIVp>: Error: 
Mailbox Trash: Saving mail: read() failed: 
read(/mail/burk.tech/ben/Maildir/Receipts/cur/1621724316.M515979P30417.smtp,S=2903,W=2964:2,S) 
failed: Private key not available: Cannot decrypt key 
f9e7a6b9dd24535a29915fb46336047b07ae5b9fea5eda8e03cf9a8fa009f88b: Cannot 
decrypt key 
876c6bfbc355a86c3c924a5841bb2e5c6e1b0c5496d5116c4fcb9c511f803c87: 
Password not available (read reason=)
May 22 19:18:15 smtp dovecot: imap(ben)<31682><7oASZPPCkN9EdIVp>: Panic: 
file ostream-encrypt.c: line 631 (o_stream_encrypt_close): assertion 
failed: (estream->finalized || estream->ctx_sym == NULL || 
estream->ostream.ostream.stream_errno != 0)
May 22 19:18:15 smtp dovecot: imap(ben)<31682><7oASZPPCkN9EdIVp>: Error: 
Raw backtrace: /usr/lib/dovecot/libdovecot.so.0(+0xdb73b) 
[0x7fdb3ce7273b] -> /usr/lib/dovecot/libdovecot.so.0(+0xdb7d1) 
[0x7fdb3ce727d1] -> /usr/lib/dovecot/libdovecot.so.0(+0x4a199) 
[0x7fdb3cde1199] -> /usr/lib/dovecot/libdovecot.so.0(+0x49276) 
[0x7fdb3cde0276] -> /usr/lib/dovecot/libdovecot.so.0(+0xffd5e) 
[0x7fdb3ce96d5e] -> 
/usr/lib/dovecot/libdovecot.so.0(o_stream_destroy+0x16) [0x7fdb3ce96d86] 
-> /usr/lib/dovecot/libdovecot-storage.so.0(maildir_save_finish+0x18d) 
[0x7fdb3cfa946d] -> 
/usr/lib/dovecot/libdovecot-storage.so.0(mailbox_save_cancel+0x4d) 
[0x7fdb3cf8167d] -> 
/usr/lib/dovecot/libdovecot-storage.so.0(mail_storage_copy+0x122) 
[0x7fdb3cf73f22] -> /usr/lib/dovecot/libdovecot-storage.so.0(+0x5badc) 
[0x7fdb3cf81adc] -> 
/usr/lib/dovecot/libdovecot-storage.so.0(mailbox_move+0x31) 
[0x7fdb3cf81c11] -> dovecot/imap(+0x128f5) [0x563bd267a8f5] -> 
dovecot/imap(command_exec+0x70) [0x563bd2687dc0] -> 
dovecot/imap(+0x1e3f2) [0x563bd26863f2] -> dovecot/imap(+0x1e494) 
[0x563bd2686494] -> dovecot/imap(client_handle_input+0x1b5) 
[0x563bd2686845] -> dovecot/imap(client_input+0x7e) [0x563bd2686d6e] -> 
/usr/lib/dovecot/libdovecot.so.0(io_loop_call_io+0x6f) [0x7fdb3ce88bef] 
-> /usr/lib/dovecot/libdovecot.so.0(io_loop_handler_run_internal+0x136) 
[0x7fdb3ce8a1e6] -> 
/usr/lib/dovecot/libdovecot.so.0(io_loop_handler_run+0x4c) 
[0x7fdb3ce88c8c] -> /usr/lib/dovecot/libdovecot.so.0(io_loop_run+0x40) 
[0x7fdb3ce88df0] -> 
/usr/lib/dovecot/libdovecot.so.0(master_service_run+0x13) 
[0x7fdb3ce09123] -> dovecot/imap(main+0x325) [0x563bd2678bf5] -> 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xeb) [0x7fdb3cbf209b] 
-> dovecot/imap(_start+0x2a) [0x563bd2678d8a]
May 22 19:18:15 smtp dovecot: imap-login: Debug: SSL alert: close notify
May 22 19:18:15 smtp dovecot: imap(ben)<31682><7oASZPPCkN9EdIVp>: Fatal: 
master: service(imap): child 31682 killed with signal 6 (core dumps 
disabled - https://dovecot.org/bugreport.html#coredumps)


My keys for the user are as follows:


ben at smtp.burk.tech :~$ doveadm mailbox cryptokey list -U
doveadm(ben): Error: net_connect_unix(/var/run/dovecot/stats-writer) 
failed: Permission denied
Folder Active Public ID
        yes 876c6bfbc355a86c3c924a5841bb2e5c6e1b0c5496d5116c4fcb9c511f803c87



I've checked and it appears that the mail as its received into the root 
of Maildir is not initially encrypted. It is stored plaintext. However, 
when the mail is moved, it is then properly encrypted.


ben at smtp.burk.tech :~/Maildir/cur$ file 1621726534.31820_1.smtp\:2\,
1621726534.31820_1.smtp:2,: SMTP mail, ASCII text


ben at smtp.burk.tech :~/Maildir/Receipts/cur$ file 
1621726595.M343917P30832.smtp\,S\=2927\,W\=2988\:2\,S
1621726595.M343917P30832.smtp,S=2927,W=2988:2,S: MailCrypt



-- 
Ben Burk
BURK.TECH System Administrator



More information about the dovecot mailing list