
CVE-2023-22518 in Confluence
CVE-2023-22518 : Esta vulnerabilidade é descrita como “uma falha de autorização inadequada no banco de dados e no servidor do Confluence”. O erro afeta as versões On-premises dos produtos Atlassian.
Configuração do ambiente Use 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

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

Em seguida, vá para setup database -> Selecione MySQL

Siga as instruções :

Configure o banco de dados, crie o usuário e a 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, edite /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 instalação em localhost:8090 e preencha com o banco de dados criado

Verifique se a conexão foi bem-sucedida, clique em Next. Em seguida, faça Sign up.

Depuração
*Diff Fiz o diff de dois arquivos jar de duas versões no IntelliJ. Especificamente, comparei as versões 8.0.4 e 7.19.16. Conforme a descrição, faça o diff do arquivo confluence.jar das duas versões entre si.

A diferença entre a versão corrigida e a não corrigida está em @WebSudoRequired e @SystemAdminOnly. websudorequired é um recurso para aumentar a segurança das sessões de administrador. Ao tentar acessar o admin, o sistema solicita que a senha seja inserida novamente, mesmo que você já tenha feito login. Ele adiciona uma etapa extra de autenticação para garantir o acesso administrativo.
SystemAdminOnly : é um recurso que limita a função administrativa apenas a contas de administrador. Isso ajuda a garantir que somente contas autorizadas possam executar operações importantes que afetam o sistema.
Defina um breakpoint em validate() em RestoreAction.class

a função salva o arquivo enviado usando getRestoreFileFromUpload

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


No entanto, após a depuração, 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 voltar a atenção para pesquisas sobre vulnerabilidades da linguagem Java durante o processo de atribuição de permissões pelo desenvolvedor.
Redirecione a atenção para o arquivo struts.xml. Esse arquivo contém informações sobre ações e roteamento com base em namespaces, bem como nos interceptadores (interceptors).




Vemos que o namespace /json potencializa o 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 da requisição envolve a passagem por uma cadeia de interceptadores (interceptors). Um desses interceptadores, chamado WebSudoInterceptor, realiza verificações com base no URI da requisição.
Especificamente, o WebSudoInterceptor executa as seguintes verificações:
Se o caminho da requisição for /authenticate.action, ele é ignorado. Se o caminho da requisição for /admin, ele verifica se o atributo WebSudoNotRequired está vazio.
Se uma requisição for enviada para '/json', então a requisição para '/json/action' será direcionada para '/setup/action' e 'admin/action'. Neste CVE, o caminho vulnerável é / 'json/setup-restore.action?synchronous=true'
Intercepte a requisição no Burp Suite, GET /json/setup-restore.action. No entanto, recebe-se uma resposta "Method Not Allowed response". Tente fazer um POST para /json/setup-restore.action?synchronous=true e receba a resposta 200


Faça upload do arquivo xmlexport-200123123001.zip

e receba a resposta

Agora podemos fazer login com a conta admin:admin

E o resultado é o seguinte
