
Mailcow CVE-2022-31138 RCE
RCE y escalada de privilegios a Domain Admin para Mailcow. El POC de CVE-2022-31245 puede modificarse para funcionar con esta vulnerabilidad.
Reportado y corregido: 2022-06
Tipo: Code Injection (CWE-94), RCE, Domain Takeover
Versiones afectadas: al menos 2019 - 2022-06a
Existe una falla en todas las versiones recientes de Mailcow donde un usuario regular del sistema puede explotar la función "Sync Job" para obtener una shell mediante inyección de código perl en el campo de regex arbitrario de imapsync. Usando este exploit, un atacante puede luego moverse fácilmente a la base de datos y escalar privilegios al rol de "Domain Admin" en Mailcow.
Este exploit incluye persistencia por defecto, ya que los Sync Jobs se ejecutan con un temporizador.
Este exploit compromete toda la instancia de Mailcow. Probado y funcionando en la última versión disponible hasta 2022-06a.
Casi todas las expresiones regex en imapsync se evalúan usando la función eval, lo cual es altamente inseguro cuando los parámetros son proporcionados por el usuario. Como ejemplo, así es como se parsea --regexmess en imapsync (línea 14213):
sub regexmess
{
my ( $string ) = @_ ;
foreach my $regexmess ( @regexmess ) {
$sync->{ debug } and myprint( "eval \$string =~ $regexmess\n" ) ;
my $ret = eval "\$string =~ $regexmess ; 1" ;
En Mailcow, $regexmess es proporcionado por el usuario.
Los siguientes flags de imapsync (podría haber más) pueden usarse para lograr ejecución de código:
--regexmess
--skipmess
--regexflag
--delete2foldersonly
--delete2foldersbutnot
--regextrans2
Usando los pasos siguientes se puede reproducir la vulnerabilidad.
Obteniendo 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
Donde el campo "Custom Parameters" es el campo importante. PERL_CODE puede ser código perl arbitrario.Ejemplo de payload de Custom Parameters:
--debug --nosslcheck --regexmess=`touch\x{0020}test.txt`
PERL_CODE no puede contener espacios, comillas ni barras; usa \x{0020} en lugar de espacio. Usa ` para ejecutar comandos de shell.
Escalada de privilegios:
Sigue los mismos pasos que en CVE-2022-31245.