
Mailcow CVE-2022-31138 RCE
Mailcow용 RCE 및 도메인 관리자 권한 상승. CVE-2022-31245용 POC는 이 취약점과 함께 작동하도록 수정할 수 있습니다.
보고 및 수정: 2022-06
유형: 코드 삽입 (CWE-94), RCE, 도메인 탈취
영향을 받는 버전: 최소 2019 - 2022-06a
모든 최신 Mailcow 버전에는 시스템의 일반 사용자가 imapsync의 임의 regex 필드에서 perl 코드 삽입을 통해 셸을 얻기 위해 "Sync Job" 기능을 악용할 수 있는 결함이 존재합니다. 이 익스플로잇을 사용하면 공격자는 쉽게 데이터베이스로 피벗하고 Mailcow에서 "도메인 관리자" 역할로 권한을 상승시킬 수 있습니다.
이 익스플로잇은 Sync Job이 타이머로 실행되므로 기본적으로 지속성을 포함합니다.
이 익스플로잇은 전체 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
아래 단계를 사용하여 취약점을 재현할 수 있습니다.
셸 획득:
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 코드일 수 있습니다.Custom Parameters 예제 페이로드:
--debug --nosslcheck --regexmess=`touch\x{0020}test.txt`
PERL_CODE에는 공백, 따옴표 또는 슬래시가 포함될 수 없습니다. 공백 대신 \x{0020}을 사용하세요. 셸 명령을 실행하려면 `을 사용하세요.
권한 상승:
CVE-2022-31245와 동일한 단계를 따르세요.