
Confluence Server의 취약한 접근 제어 - CVE-2023-22515
Atlassian은 관리자 액세스를 통해 환경을 손상시킬 수 있는 잠재적 취약점에 대해 통보받았습니다. 2023년 10월 4일, Atlassian은 CVSS 점수 10.0을 받은 CVE-2023-22515에 대한 보안 권고를 발표했습니다. 이 취약점은 Confluence Server 및 Data Center 에디션의 8.0.0 버전에서 도입되었으며 <8.3.3, <8.4.3, <8.5.2 버전에 존재합니다.
공격자는 이 취약점을 악용하여 Confluence에 전체 관리자 권한을 가진 추가 계정을 생성할 수 있습니다. 공격자는 이 취약점을 악용하기 위해 사전 정보가 필요하지 않습니다. 이 취약점은 다른 알려지지 않은 공격 벡터를 가능하게 할 것으로 여겨지므로 가능한 한 빨리 패치해야 합니다.
이 취약점을 통해 공격자는 Confluence 구성의 설정 단계로 돌아가 관리자 액세스 권한을 가진 새 사용자를 생성할 수 있습니다. 이것이 가능한 이유는 Confluence가 XWork 패키지에 의존하는 Apache Struts 프레임워크로 구축되었기 때문입니다. XWork를 사용하면 Java 클래스 형태로 Action을 정의할 수 있습니다. 각 Action은 URL을 통해 호출할 수 있으며, 해당 Java 클래스가 요청을 처리하고 Action이 요구하는 작업을 수행한 후 응답을 반환합니다.
이 문제는 주로 URL을 통해 액션 클래스의 속성을 호출할 수 있는 액션 클래스로 인해 발생합니다.
공격 과정은 ServerInfoAction 액션에서 이루어지며, 여기서 클래스의 getter/setter를 조작하고 설정 구성을 재설정할 수 있습니다.
ServerInfoAction 클래스의 코드를 분석하면 ConfluenceActionSupport 클래스를 상속한다는 것을 알 수 있습니다. 상속을 통해 해당 클래스의 모든 메서드도 상속받습니다. 그러한 메서드 중 하나는 BootstrapStatusProvider 객체를 반환하는 getter입니다:
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 객체를 가져오는 데 사용할 수 있는 또 다른 getter 메서드가 있기 때문입니다:
public class BootstrapStatusProviderImpl implements BootstrapStatusProvider, BootstrapManagerInternal {
public ApplicationConfiguration getApplicationConfig() {
return this.delegate.getApplicationConfig();
}
}
이 객체에는 초기 설정이 완료되었는지 Confluence에 알려주는 속성을 포함한 애플리케이션 구성이 들어 있습니다. 이러한 속성은 ApplicationConfig 클래스의 setter를 사용하여 수정할 수 있습니다:
public class ApplicationConfig implements ApplicationConfiguration {
public synchronized void setSetupComplete(boolean setupComplete) {
this.setupComplete = setupComplete;
}
}
setSetupComplete(false)를 호출할 수 있다면 설정 구성 과정을 재설정할 수 있으며, 아래와 같이 getter/setter 메서드를 사용하여 이를 수행할 수 있습니다.
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로 설정하면 성공 응답을 받게 됩니다. 이는 매개변수 변경 시도가 성공했음을 의미합니다.
설정 프로세스를 재설정하려는 setup URL에 접근하여 새 계정을 생성해 보겠습니다.
http://atlassian.poc:8090/setup/setupadministrator-start.action
설정 프로세스를 재설정하고 관리자 액세스 권한을 가진 새 사용자를 생성할 수 있었습니다.
이 취약점은 8.3.3, 8.4.3 및 8.5.2 버전에서 수정되었습니다. 이후의 모든 최신 버전 브랜치도 안전해야 합니다.
자세한 내용은 Atlassian이 웹사이트에 공개한 이 취약점에 대한 정보를 참조하세요 (자세히 보기 - Atlassian).