
CVE-2023-22518 익스플로잇 분석: Atlassian Confluence Server용으로 설정, JAR diffing, 근본 원인, 그리고 관리자 접근 권한을 되찾기 위한 무단 복원을 다룹니다.
Exploit-CVE-2023-22518 Confluence의 CVE-2023-22518
CVE-2023-22518: 이 취약점은 “Confluence의 데이터베이스 및 서버에서 부적절한 권한 부여 취약점”으로 설명됩니다. 이 오류는 Atlassian 제품의 온프레미스 버전에 영향을 미칩니다.
환경 설정: 취약한 버전 8.0.4 사용. 다운로드 URL: https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Trial Installation을 선택한 다음 링크를 클릭하여 무료 평가판 키를 받으세요. 그런 다음 클러스터를 설정합니다: non-cluster 선택

그런 다음 데이터베이스 설정으로 이동 -> MySQL 선택

지침을 따르세요:
MySQL 드라이버를 다운로드합니다.
/home/lily/atlassian/confluence/confluence/WEB-INF/lib에 .jar 파일을 넣습니다.
Confluence를 다시 시작하고 설정 과정을 계속합니다.
데이터베이스 구성, 사용자 및 비밀번호 테이블 생성
CREATE DATABASE securedb CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'admin123'@'localhost' IDENTIFIED BY 'supersecure';
GRANT ALL PRIVILEGES ON securedb.* TO 'admin123'@'localhost';
GRANT SUPER ON *.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
그런 다음 edit /etc/mysql/my.cnf 를 편집합니다. 다음 줄을 추가하세요:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

그런 다음 MySQL과 Confluence를 다시 시작합니다. 그런 다음 localhost:8090의 설정 페이지로 이동하여 생성한 데이터베이스를 입력합니다.

연결 성공을 확인하고 Next를 클릭합니다. 그런 다음 Sign up 합니다.

** 두 버전의 jar 파일을 IntelliJ에서 Diff하기 **

SystemAdminOnly: 관리 기능을 관리자 계정으로만 제한하는 기능입니다. 이를 통해 권한이 부여된 계정만 시스템에 영향을 미치는 중요한 작업을 수행할 수 있습니다.
RestoreAction.class의 validate()에 중단점(breakpoint)을 설정합니다.

업로드된 파일을 저장하는 함수는 getRestoreFileFromUpload입니다.

GetExportDescriptor는 zip 파일의 압축을 풀고 내용을 읽는 데 사용됩니다.


하지만 디버깅 후에도 취약점의 근본 원인을 찾지 못했습니다.
CVE에 설명된 원인은 권한 부여 취약점입니다. 이로 인해 개발자가 권한을 부여하는 과정에서 Java 언어 취약점에 대한 연구에 주목하게 됩니다.
struts.xml 파일로 관심을 돌립니다. 이 파일은 작업(action)과 네임스페이스(namespace) 기반 라우팅, 그리고 인터셉터(interceptors)에 대한 정보를 포함합니다.



/json 네임스페이스가 /admin 네임스페이스의 기능을 확장하는 것을 볼 수 있습니다. 따라서 /admin 네임스페이스에 대해 생성된 경로는 /json 네임스페이스를 통해서도 접근할 수 있습니다.
/json 네임스페이스의 컨텍스트에서 요청 라우팅 프로세스는 일련의 인터셉터(interceptors)를 통과하는 것을 포함합니다. WebSudoInterceptor라고 하는 이 인터셉터 중 하나는 요청 URI에 따라 검사를 수행합니다.
구체적으로 WebSudoInterceptor는 다음 검사 단계를 수행합니다:
요청 경로가 /authenticate.action이면 무시됩니다. 요청 경로가 /admin이면 WebSudoNotRequired 속성이 비어 있는지 확인합니다.
'/json'으로 전송된 요청이 있으면 '/json/action' 요청은 '/setup/action' 및 'admin/action'으로 전달됩니다. 이 CVE에서 취약한 경로는 / 'json/setup-restore.action?synchronous=true'입니다.
Burp Suite로 요청을 캡처하여 GET /json/setup-restore.action을 보냈습니다. 그러나 "Method Not Allowed response"를 받았습니다. POST /json/setup-restore.action?synchronous=true로 시도했고 200 응답을 받았습니다.


xmlexport-200123123001.zip 파일을 업로드합니다.

요청을 보내고 응답을 받습니다.

이제 account admin :admin으로 로그인할 수 있습니다.

그리고 다음과 같은 결과를 얻습니다.
