
Нарушенный контроль доступа на сервере Confluence - CVE-2023-22515
Atlassian был проинформирован о возможной уязвимости, которая может быть использована для компрометации среды через административный доступ. 4 октября 2023 года Atlassian опубликовал предупреждение безопасности относительно CVE-2023-22515, которой была присвоена оценка 10.0. Уязвимость была внесена в версии 8.0.0 Confluence Server и Data Center и присутствует в версиях <8.3.3, <8.4.3, <8.5.2.
Злоумышленник может использовать уязвимость для создания дополнительной учетной записи в Confluence с полными административными привилегиями. Для эксплуатации уязвимости злоумышленнику не требуется предварительная информация. Считается, что уязвимость открывает другие неизвестные векторы атак, и ее следует исправить как можно скорее.
С помощью этой уязвимости злоумышленник может вернуться к этапу настройки конфигурации Confluence и создать нового пользователя с административным доступом. Это возможно потому, что Confluence построен на фреймворке Apache Struts, который зависит от пакета XWork. XWork позволяет определять Actions в виде Java-класса. Каждый Action может быть вызван через URL, и соответствующий Java-класс обработает запрос, выполнит необходимые действия и отправит ответ.
Эта проблема возникает в основном из-за class action, где мы можем вызывать атрибуты через URL.
Эксплуатация происходит в action ServerInfoAction, где мы можем манипулировать геттерами/сеттерами класса и сбросить конфигурацию настройки.
Если проанализировать код класса ServerInfoAction, вы увидите, что он расширяет класс ConfluenceActionSupport. Таким образом, он наследует все его методы. Один из таких методов — геттер, возвращающий объект BootstrapStatusProvider:
public class ConfluenceActionSupport extends ActionSupport implements LocaleProvider, WebInterface, MessageHolderAware {
public BootstrapStatusProvider getBootstrapStatusProvider() {
if (this.bootstrapStatusProvider == null)
this.bootstrapStatusProvider = BootstrapStatusProviderImpl.getInstance();
return this.bootstrapStatusProvider;
}
}
Нас интересует класс BootstrapStatusProvider, потому что у него есть еще один метод геттера, который мы можем использовать для получения объекта ApplicationConfiguration:
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
Этот объект содержит конфигурацию приложения, включая атрибут, который сообщает Confluence, завершена ли начальная настройка. Этот атрибут можно изменить с помощью сеттера в классе ApplicationConfig:
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
Если мы сможем вызвать setSetupComplete(false), мы сможем сбросить процесс настройки конфигурации, и мы можем сделать это, используя методы геттеров/сеттеров, как показано ниже:
http://10.10.227.86:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
Этот URL вызовет все методы, которые мы упомянули выше, и достигнет целевого метода, ответственного за сброс настройки.
getBootstrapStatusProvider().getApplicationConfig().setSetupComplete(false)
Ниже приведен пример сервера с уязвимой версией Confluence.
Давайте попробуем перезапустить процесс настройки, используя вызов метода, как описано выше;
http://atlassian.poc:8090/server-info.action?bootstrapStatusProvider.applicationConfig.setupComplete=false
После установки параметра setupcomplete в false мы получим ответ success. Это означает, что попытка изменить параметр была успешной.
Давайте попробуем создать новую учетную запись, перейдя по URL настройки, который мы пытались сбросить.
http://atlassian.poc:8090/setup/setupadministrator-start.action
Нам удалось сбросить процесс настройки и создать нового пользователя с административным доступом.
Уязвимость исправлена в версиях 8.3.3, 8.4.3 и 8.5.2. Все более новые ветки версий также должны быть безопасны.
Для получения дополнительных сведений Atlassian опубликовал подробности об этой уязвимости на своем сайте (Подробнее - Atlassian).