GoAnywhere CVE-2023-0669: zero-day в MFT, и мы нашли его у клиента в DMZ
CVE-2023-0669 - активно эксплуатируемый zero-day в GoAnywhere MFT. Рассказываем, как нашли незащищённый инстанс в DMZ клиента и что делать, когда патча ещё нет.
CVE-2023-0669 GoAnywhere MFT zero-day - активная эксплуатация начиная с января 2023, CVSS 7.2, RCE через административный интерфейс без аутентификации
Не прошло и месяца с истории с ESXiArgs, как на радаре появилась следующая история - CVE-2023-0669 в GoAnywhere MFT от Fortra (бывшая HelpSystems). Zero-day, активная эксплуатация, вендор выпустил только advisory с workaround-ом, патча ещё нет. Типичный сценарий января 2023.
Мы отработали по той же схеме, что и с ESXi: сразу пробежались по клиентским инфраструктурам - что вообще у нас есть из Managed File Transfer решений. И вот тут выяснилось, что GoAnywhere в одном из контуров стоит. В DMZ. Без обновлений.
Что за уязвимость
CVE-2023-0669 - это RCE в GoAnywhere MFT через административный интерфейс. CVSS 7.2. Эксплуатация требует доступа к этому интерфейсу, который по умолчанию живёт на порту 8000 или 8001. Вектор - десериализация Java-объектов, классика жанра для enterprise-продуктов на Java. Злоумышленник, имеющий сетевой доступ к admin-интерфейсу, может выполнить произвольный код без аутентификации.
Fortra опубликовала advisory 30 января, сослалась на уже идущую эксплуатацию. Патча нет - есть workaround: отключить возможность создания license response servlet через конфиг. Плюс очевидное - закрыть admin-интерфейс от лишних сетей.
MFT-продукты как класс - лакомый кусок для атакующих. Через них ходят файлы: документы, выгрузки из ERP, всё что организация передаёт партнёрам и клиентам. Компрометация MFT часто означает не просто RCE на одном сервере, а доступ к данным, которые через него текут.
Что мы нашли
Инвентаризация по клиентским инфраструктурам дала неожиданный результат быстро. У одного из клиентов GoAnywhere MFT стоял в DMZ-сегменте - там он обменивался файлами с несколькими внешними партнёрами. Продукт поставили года три назад, тогда же настроили и в основном не трогали.
Версия. Инстанс оказался на версии, которая вышла в 2021 году. Два года без обновлений. За это время GoAnywhere закрыл немало других CVE - не критических, но тем не менее. Ситуация стандартная для «поставил и работает» - особенно для инструментов, которые не на каждодневном виду у команды.
Сетевой периметр. Admin-интерфейс на порту 8001 был открыт из DMZ в сторону внутренней сети - для того чтобы администраторы могли заходить без VPN. Снаружи, из интернета, этот порт был закрыт - и это единственное, что спасало ситуацию. Но в контексте CVE-2023-0669 «закрыт снаружи» не означает безопасно: если атакующий попал во внутреннюю сеть другим путём, admin-интерфейс был бы доступен из большой части корпоративной инфраструктуры.
Пользовательский интерфейс на 443. Открыт наружу - это и есть суть продукта, партнёры ходят через него. Сам по себе CVE-2023-0669 через пользовательский интерфейс не эксплуатируется, но это отдельный вектор, который надо держать в голове.
Что делали - протокол экстренного реагирования
Когда патча нет, а уязвимость активно эксплуатируется, набор действий выглядит так.
Первое - изолировать admin-интерфейс. На межсетевом экране закрыли доступ к порту 8001 от всех, кроме jump-хоста администраторов. Не «внутренняя сеть», а конкретные IP. Это заняло двадцать минут и убрало основной вектор для CVE-2023-0669 в этой конфигурации.
Второе - применить workaround от вендора. Fortra описала конкретный шаг: удалить или отключить InitialAccountSetup.xhtml из деплоя. Сделали, перезапустили сервис, проверили что продукт функционирует.
Третье - проверить логи на признаки компрометации. GoAnywhere ведёт логи в нескольких местах. Прошлись по access-логам admin-интерфейса за последние недели - подозрительных запросов к license servlet не обнаружили. Это не гарантия чистоты, но маркер отсутствия.
Четвёртое - поставить на контроль. Подписались на security-рассылку Fortra, добавили в мониторинг алерт на появление входящих соединений к порту 8001 откуда-либо кроме jump-хоста. Патч появится - применим немедленно, в тот же день.
Паттерн, который нас раздражает
Это не первый крупный инцидент с MFT-продуктами - достаточно вспомнить атаки на Accellion FTA в конце 2020 - начале 2021. Что общего: продукты стоят на периметре, через них ходят реальные данные, их не обновляют потому что «работает», их admin-интерфейсы доступны шире чем нужно.
GoAnywhere в этом смысле не исключение - у него просто популярная версия и активно написанный эксплойт. Завтра будет другой MFT, или другой enterprise-продукт на Java с десериализацией.
Из этого вытекает практическое следствие для аудита: MFT-продукты нужно явно включать в периметр проверки - с инвентаризацией версий, проверкой сетевой доступности admin-интерфейсов и статусом обновлений. Это категория ПО, которая традиционно выпадает из внимания: не сервер приложений, не СУБД, не гипервизор - и поэтому оказывается наименее ухоженной.
Патч Fortra обещает выпустить в ближайшие дни. До тех пор workaround плюс сетевая изоляция admin-интерфейса - это минимум, который должен быть сделан прямо сейчас, не после следующего совещания.