
Análise do exploit CVE-2023-22518 para Atlassian Confluence Server abordando configuração, diffing de JARs, causa raiz e restauração não autorizada para recuperar o acesso de administrador.
Exploit-CVE-2023-22518 CVE-2023-22518 no Confluence
CVE-2023-22518: Esta vulnerabilidade é descrita como “vulnerabilidade de autorização inadequada no banco de dados e nos servidores do Confluence”. O erro afeta as versões On-premises dos produtos Atlassian.
Configure o ambiente usando a versão vulnerável 8.0.4. URL de Download: https://product-downloads.atlassian.com/software/confluence/downloads/atlassian-confluence-8.0.4-x64.exe

Escolha Trial Installation, depois clique no link para obter a free trial key. Em seguida, configure o cluster: escolha non-cluster

Em seguida, vá para a configuração do banco de dados -> Escolha MySQL

Siga as instruções:
Baixe o driver MySQL
Coloque o arquivo .jar em /home/lily/atlassian/confluence/confluence/WEB-INF/lib
Reinicie o Confluence e continue o processo de configuração.
Configure o banco de dados, crie o usuário e a tabela de senha
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;
Em seguida, edit /etc/mysql/my.cnf . Adicione as seguintes linhas:
transaction-isolation = READ-COMMITTED
log_bin_trust_function_creators = 1

Em seguida, reinicie o MySQL e o Confluence. Depois, acesse a página de configuração em localhost:8090 e use o banco de dados criado para preencher

Verifique se a conexão foi bem-sucedida, clique em Next. Depois, cadastre-se.

** Faça o diff dos arquivos jar das duas versões no IntelliJ **

SystemAdminOnly: é um recurso que limita as funções administrativas apenas a contas de administrador. Isso ajuda a garantir que somente contas autorizadas possam realizar operações importantes e que afetam o sistema.
Coloque um breakpoint em validate() em RestoreAction.class

A função que salva o arquivo enviado usa getRestoreFileFromUpload

GetExportDescriptor é usado para descompactar e ler o conteúdo do arquivo zip


Porém, após depurar, ainda não foi possível encontrar a causa raiz da vulnerabilidade
A causa descrita no CVE é uma vulnerabilidade de autorização. Isso nos leva a direcionar a atenção para pesquisas sobre vulnerabilidades da linguagem Java durante o processo de atribuição de permissões pelos desenvolvedores
Redirecione a atenção para o arquivo struts.xml. Este arquivo contém informações sobre ações e roteamento baseado em namespaces, bem como os interceptadores (interceptors).



Vemos que o namespace /json estende a funcionalidade do namespace /admin. Portanto, as rotas criadas para o namespace /admin também podem ser acessadas por meio do namespace /json.
No contexto do namespace /json, o processo de roteamento de requisições envolve passar por uma cadeia de interceptadores (interceptors). Um desses interceptadores, chamado WebSudoInterceptor, realiza verificações com base na URI da requisição.
Especificamente, o WebSudoInterceptor executa as seguintes verificações:
Se o caminho da requisição for /authenticate.action, ele será ignorado. Se o caminho da requisição for /admin, ele verifica se a propriedade WebSudoNotRequired está vazia.
Se uma requisição for enviada para '/json', então a requisição para '/json/action' será encaminhada para '/setup/action' e 'admin/action'. Neste CVE, o caminho vulnerável é '/json/setup-restore.action?synchronous=true'
Capture a requisição no Burp Suite, GET /json/setup-restore.action . No entanto, recebemos uma resposta "Method Not Allowed". Tente com POST /json/setup-restore.action?synchronous=true e receba a resposta 200


Carregue o arquivo xmlexport-200123123001.zip

Envie e receba a resposta

Agora podemos fazer login com account admin :admin

E obtemos o seguinte resultado
