
Mailcow CVE-2022-31138 RCE
Mailcow の RCE および Domain Admin 権限昇格。この脆弱性で動作するように CVE-2022-31245 の POC を変更することができます。
報告および修正: 2022-06
タイプ: コードインジェクション (CWE-94)、RCE、ドメイン乗っ取り
影響を受けるバージョン: 2019 - 2022-06a
最近のすべての Mailcow バージョンには、システムの一般ユーザーが「Sync Job」機能を悪用して、imapsync の任意の正規表現フィールドへの perl コードインジェクションによりシェルを取得できるという欠陥が存在します。このエクスプロイトを使用すると、攻撃者はその後簡単にデータベースへピボットし、Mailcow 内の「Domain Admin」の役割に権限を昇格させることができます。
このエクスプロイトは、Sync Jobs がタイマーで実行されるため、デフォルトで永続化を備えています。
このエクスプロイトは 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 と同じ手順に従ってください。