
Element Desktop v1.12.29 - High - Local - File - vector: protocol이 asar jail 외부의 Windows 파일을 읽음
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · element-vector-drive-letter
Element Desktop v1.12.29 - Element Creations Ltd
분류: 파일 읽기 도달 범위: 로컬
apps/desktop/src/electron-main.ts는 vector:를 특권 파일 프로토콜로 등록합니다. 감옥(jail)은 path.normalize(path.join(...pathname.split("/").slice(2))) 이후의 relTarget.startsWith("..") 뿐입니다. Windows에서 C:, Windows, win.ini를 join하면 이미 C:\Windows\win.ini입니다. 절대 경로는 ..로 시작하지 않으므로 이 검사는 통과시킵니다. Electron 자체의 커스텀 프로토콜 관련 문서도 path.isAbsolute를 거부합니다. POSIX path.join은 C:를 절대 경로로 취급하지 않으므로 Linux와 macOS는 이 잔재에 해당하지 않습니다. will-navigate는 vector:를 통과시킵니다.
렌더러 XSS, DevTools 또는 다른 로컬 프로세스가 fetch("vector://vector/webapp/C:/Windows/win.ini")를 호출하여 Element 프로세스가 열 수 있는 파일을 읽을 수 있습니다.
| ID | 아직 CVE 없음 |
| CWE | CWE-22 / CWE-73 |
| CVSS | 높음: 8.3 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N |
| 제품 | element-web Desktop (apps/desktop) |
| 영향받는 버전 | v1.12.29 (2d90d6b7b601ecb9ccdf81239a43b4396b4b0c9e). Windows 전용. |
| 인증 | 로컬 렌더러 (DevTools / XSS) |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
vector:에 접근할 수 있는 렌더러 XSS, DevTools 또는 다른 로컬 프로세스. 네이티브 Windows Element Desktop은 실행되지 않았습니다. 이 가젯은 해당 핀의 URL 파서를 복사하고 Node path.win32를 사용합니다.
| 권한 | 메서드 / 싱크 | 정찰 / 무결성 / 가용성 | 랩 입증 또는 추론 |
|---|---|---|---|
| Element 프로세스가 열 수 있는 파일 읽기 | fetch("vector://vector/webapp/C:/Windows/win.ini"). 감옥은 relTarget.startsWith("..") 뿐입니다. 드라이브 문자 join은 절대 경로이므로 검사를 통과합니다. path.win32.resolve(asar, relTarget)은 C:\Windows\win.ini입니다 | 정찰 | URL 파서 가젯에서 랩 입증. 본문은 ELEMENT-VECTOR-DRIVE-LETTER-WITNESS. 네이티브 Desktop은 실행되지 않음 |
동일 ACL 상의 electron-config, 프로필, 다른 사용자 파일에 대한 동일한 읽기 | 동일한 vector://vector/webapp/C:/... fetch | 정찰 | 추론. 랩에는 실제 비밀이 아닌 win.ini를 심었음 |
| 디스크에 이미 존재하는 공격자 HTML을 메인 프레임이 로드할 경우 Matrix ATO | will-navigate가 vector:를 통과시킵니다. vector://vector의 악성 HTML이 preload / window.electron(토큰, Seshat, clearStorage)을 획득합니다 | 무결성 | webcontents-handler.ts와 preload로부터 추론. 랩은 BrowserWindow를 탐색하지 않았음 |
asar 트리의 ../ 트래버설 | vector://vector/webapp/../ | n/a | 여기서는 닫힘. WHATWG URL이 이를 축약하고 핸들러는 FILE_NOT_FOUND (-6)를 반환 |
| POSIX / macOS / Linux 드라이브 문자 fetch | path.posix.join은 C:/Windows/win.ini를 asar 아래에 둡니다 | n/a | 여기서는 닫힘. 가젯 posix 404, 증거 없음 |
| OS RCE / LPE | nodeIntegration: false, app.enableSandbox() | n/a | 닫힘. 이 잔재가 아님 |
동일 핀의 잔재: fragment guest wipe, Univention ICS javascript: href.
2026년 9월 22일 GitHub 릴리스 이후 element-hq/element-web v1.12.29를 핀했습니다. 타임라인 XSS, HTML 내보내기 XSS (GHSA-wqmv), 홈페이지 HTML (GHSA-wrcp), 위젯 미디어 토큰 (GHSA-3jm3), Element Call 키 (GHSA-69q3)는 이 태그에서 닫혀 있습니다. Desktop 커스텀 프로토콜은 여전히 startsWith("..")만 검사합니다.
new URL("vector://vector/webapp/C:/Windows/win.ini")는 C:를 경로 세그먼트로 유지합니다. path.win32.join("C:", "Windows", "win.ini")는 C:\Windows\win.ini입니다. Node path.win32.join(asar, abs)는 연결하고, path.win32.resolve는 asar 루트를 버립니다.
이미 기록된 잘못된 방향: ../를 잔재로 취급하기 (WHATWG가 이를 축약하고 핸들러는 404를 반환); POSIX C:를 같은 버그라고 부르기 (posix join은 asar 아래에 머무름); 파일 읽기를 OS RCE로 부풀리기 (샌드박스와 nodeIntegration: false는 계속 켜져 있음). 리버스 셸. 연극.
URL 파서의 가젯. Node path.win32 대 path.posix. Windows Element Desktop 프로세스는 없음. 심어둔 /lab/oracle/win.ini가 C:\Windows\win.ini를 대신합니다. /lab/asar/index.html이 asar 감옥입니다.
python3 element-vector-drive-letter-Abraxas-Labs.py
또는
cd lab
./run.sh
대상은 오직 http://127.0.0.1:19610. Compose 프로젝트 element-vector-drive-letter. 실행 후 스택은 해체됩니다.
SUCCESS element-vector-drive-letter how=gadget win32-drive-letter=200 posix-drive-letter=404 control-dotdot=404 patched-isabs=404 ELEMENT-VECTOR-DRIVE-LETTER-WITNESS
normalize 이후 path.isAbsolute(relTarget)를 거부하고 path.resolve(baseDir, relTarget)가 path.resolve(baseDir) 아래에 머무르도록 요구하세요 (path.relative, .. 거부).
electron-main.ts (registerFileProtocol)webcontents-handler.ts (will-navigate)GNU Affero GPL v3.0. LICENSE 참조. 루프백 랩 전용. 보증 없음.