
Atlassian Confluence의 CVE-2023-22518 익스플로잇. 취약점에 대한 상세한 설명을 제공하며, 환경 설정, diffing을 통한 근본 원인 분석, 관리자 접근 권한 획득을 위한 익스플로잇 단계를 포함합니다.
CVE-2023-22518 in Confluence
CVE-2023-22518 : 이 취약점은 "Confluence 데이터베이스 및 서버의 부적절한 권한 부여 취약점"으로 설명됩니다. 이 오류는 Atlassian 제품의 On-premises 버전에 영향을 미칩니다.
취약한 버전 8.0.4 사용 다운로드 URL : https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

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

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

안내에 따라 진행 :
데이터베이스 구성, 사용자 및 비밀번호 테이블 생성
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;
그런 다음 /etc/mysql/my.cnf 편집. 다음 줄 추가 :
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

그런 다음 MySQL과 Confluence 재시작. 그런 다음 localhost:8090에서 설치 페이지로 이동하여 생성한 데이터베이스 정보 입력

연결 성공 확인 후 Next 클릭. 그런 다음 가입.

*Diff 두 버전의 jar 파일을 IntelliJ에서 비교. 구체적으로 8.0.4와 7.19.16 두 버전을 비교했습니다. 설명에 따라 두 버전의 confluence.jar 파일을 비교

패치된 버전과 패치되지 않은 버전의 차이는 @WebSudoRequired와 @SystemAdminOnly입니다. websudorequired는 관리자 세션의 보안을 강화하는 기능입니다. 관리자 페이지에 접근하려고 하면 시스템에 이미 로그인되어 있어도 비밀번호를 다시 입력하도록 요구합니다. 이는 관리 액세스 권한을 보장하는 추가 인증 단계입니다.
SystemAdminOnly : 이 기능은 관리 기능을 관리자 계정으로만 제한합니다. 이는 권한이 있는 계정만 시스템에 영향을 미치는 중요한 작업을 수행할 수 있도록 보장합니다.
RestoreAction.class의 validate()에 중단점 설정

업로드된 파일을 저장하는 함수는 getRestoreFileFromUpload

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


그러나 디버그 후에도 취약점의 근본 원인을 아직 찾지 못했습니다.
CVE에 설명된 원인은 권한 부여 취약점입니다. 이로 인해 우리는 개발자가 권한을 분리하는 과정에서 Java 언어의 취약점에 대한 연구에 주목하게 됩니다.
struts.xml 파일로 주의를 돌립니다. 이 파일은 네임스페이스 및 인터셉터를 기반으로 한 액션 및 라우팅 정보를 포함합니다.




네임스페이스 /json이 /admin 네임스페이스의 기능을 확장하는 것을 볼 수 있습니다. 따라서 /admin 네임스페이스에 대해 생성된 라우트는 /json 네임스페이스를 통해서도 접근할 수 있습니다.
/json 네임스페이스의 맥락에서 요청 라우팅 과정은 일련의 인터셉터를 통과하는 것을 포함합니다. 이러한 인터셉터 중 하나인 WebSudoInterceptor는 요청 URI를 기반으로 검사를 수행합니다.
구체적으로 WebSudoInterceptor는 다음과 같은 검사 단계를 수행합니다:
요청이 '/json'으로 전송되면 '/json/action' 요청은 '/setup/action' 및 'admin/action'으로 전달됩니다. 이 CVE에서 취약한 경로는 '/json/setup-restore.action?synchronous=true'입니다.
Burp Suite로 요청 캡처: GET /json/setup-restore.action. 그러나 "Method Not Allowed" 응답을 받습니다. POST /json/setup-restore.action?synchronous=true를 시도하면 200 응답을 받습니다.


파일 xmlexport-200123123001.zip 업로드

그리고 응답 수신

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

결과는 다음과 같습니다.
