## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-LY1G3-MAILCOW-CVE-2022-31138
# Mailcow CVE-2022-31138
RCE и повышение привилегий до Domain Admin для Mailcow. POC для CVE-2022-31245 может быть изменен для работы с этой уязвимостью.
Сообщено и исправлено: 2022-06
## Code Injection, RCE
Тип: Code Injection (CWE-94), RCE, Domain Takeover
Затронутые версии: начиная с 2019 по 2022-06a
Уязвимость существует во всех последних версиях Mailcow, где обычный пользователь системы может использовать функцию «Sync Job» для получения оболочки с помощью внедрения Perl-кода в произвольное поле регулярного выражения в imapsync. Используя этот эксплойт, злоумышленник может затем легко переключиться на базу данных и повысить привилегии до роли «Domain Admin» в Mailcow.
Этот эксплойт по умолчанию включает сохранение, так как Sync Jobs выполняются по таймеру.
Этот эксплойт компрометирует весь экземпляр Mailcow. Протестировано и работает на последнем выпуске по состоянию на 2022-06a.
### Технический обзор
Почти все регулярные выражения в imapsync вычисляются с помощью функции `eval`, что крайне небезопасно, когда параметры задаются пользователем. В качестве примера, вот как `--regexmess` разбирается в imapsync (строка 14213):
root@kitploit:~
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 (возможно, их больше) могут быть использованы для выполнения кода:
root@kitploit:~
--regexmess
--skipmess
--regexflag
--delete2foldersonly
--delete2foldersbutnot
--regextrans2
Используя приведенные ниже шаги, уязвимость может быть воспроизведена.
Получение оболочки:
1. Перейдите на страницу входа в Mailcow (не SOGo)
2. Войдите как обычный пользователь
3. Перейдите в Sync Jobs
4. Установите следующие значения: `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-кодом.
5. Нажмите сохранить и подождите 1 минуту, пока команда выполнится.
Пример полезной нагрузки для Custom Parameters:
root@kitploit:~
--debug --nosslcheck --regexmess=`touch\x{0020}test.txt`
PERL_CODE не может содержать пробелы, кавычки или косые черты, используйте `\x{0020}` вместо пробела. Используйте ``` для выполнения команд оболочки.
Повышение привилегий:
Следуйте тем же шагам, что и в CVE-2022-31245.