Telegram Desktop vulnerability allowed any user's file to be stolen
Telegram Desktop 취약점으로 임의 파일 탈취와 계정 탈취 가능
Telegram Desktop의 단일 실행 프로세스 간 통신에서 명령 구분자를 이스케이프하지 않아 링크에 명령을 끼워 넣을 수 있었습니다. 내부 파일 전송 기능의 권한 검사 부재와 결합해 임의 파일 탈취와 계정 탈취로 이어졌으며, 7.2.9에서 수정됐습니다.
- 주제
AI 요약
Telegram Desktop에서 링크를 한 번 클릭하면 로컬 파일을 공격자에게 보내고 계정까지 탈취할 수 있는 취약점이 발견됐습니다. 대상 버전은 7.2.8까지이며, Windows에서 동작을 확인했습니다. 취약점 번호는 CVE-2026-107181이고 CVSS 3.1 점수는 8.1점입니다. Telegram Desktop 7.2.9에서 수정됐습니다.
링크를 명령으로 바꾸는 직렬화 오류
Telegram Desktop은 이미 실행 중인 프로세스가 있을 때 새 프로세스를 띄운 뒤 로컬 소켓으로 링크를 전달합니다. 전달 형식은 OPEN: 뒤에 URL을 붙이고 세미콜론으로 명령을 끝내는 자체 문자열 형식입니다. 송신 측은 URL 안의 세미콜론을 이스케이프하지 않지만, 수신 측은 세미콜론마다 문자열을 나눠 각각 명령으로 처리합니다.
따라서 tg://x?a=1;CMD:quit처럼 세미콜론을 넣은 링크는 수신 측에서 OPEN:과 CMD: 두 명령으로 갈라집니다. CMD: 자체는 앱을 표시하거나 종료하는 제한된 기능만 제공하지만, 같은 방식으로 OPEN: 명령을 추가하면 다른 내부 기능까지 호출할 수 있습니다.
권한 검사 없는 내부 파일 전송 기능
문제의 기능은 interpret: URI 스킴입니다. Telegram 개발 빌드에서 릴리스 파일과 설명을 채널에 올리는 스크립트가 사용하던 기능으로, 지시 파일에 적힌 로컬 파일을 읽어 지정한 채널이나 슈퍼그룹으로 보냅니다. 호출자의 권한을 확인하거나 사용자에게 전송을 묻는 과정이 없습니다. 원래 명령줄에서만 실행됐다면 공격자가 이미 컴퓨터에 접근해야 했지만, 소켓 명령 주입으로 링크에서 호출할 수 있게 되면서 원격 공격 경로가 생겼습니다.
공격자는 먼저 그룹에 지시 파일을 첨부합니다. Telegram Desktop은 기본 설정에서 그룹의 8MiB 이하 파일을 자동으로 내려받으며, 파일은 보낸 사람이 정한 이름으로 예측 가능한 폴더에 저장됩니다. 상대 경로를 쓰면 Windows 사용자 이름을 몰라도 파일 경로를 지정할 수 있습니다. 지시 파일에서 from: 항목을 빼면 계정 확인도 건너뜁니다. 공격자는 피해자가 외부 브라우저에서 여는 HTTPS 링크를 만든 뒤, 서버가 이를 악성 tg:// 링크로 리디렉션하게 합니다. 피해자가 링크를 클릭하면 지시 파일이 실행되고 지정한 파일이 공격자 그룹으로 전송됩니다.
세 파일로 세션 탈취
공격자는 SSH 개인 키나 브라우저 비밀번호 저장소처럼 임의 파일을 노릴 수 있습니다. 계정 탈취에는 Telegram의 로컬 데이터도 이용합니다. 기본 설정에서는 로컬 암호가 없으므로 tdata/key_datas에 저장된 솔트와 암호화된 DEK를 이용해 데이터 암호화 키를 복구할 수 있습니다. 이 키로 MTProto 인증 정보를 복호화하면 피해자의 세션을 열 수 있습니다. 계정 데이터 파일과 인덱스 파일까지 함께 가져오면 새 tdata 폴더에서 피해자 세션을 불러옵니다. 공격에는 피해자의 클릭 한 번이 필요하며, Telegram 안에서 클릭한 tg:// 링크는 소켓 전달 경로를 거치지 않아 이 공격에 쓰이지 않습니다.
수정과 완화
수정 버전 7.2.9은 interpret: 스킴과 InterpretSendPath를 제거했습니다. 소켓으로 전달하는 값의 세미콜론도 퍼센트와 16진수 형식으로 이스케이프해 명령 경계로 오인되지 않게 했습니다. 같은 연결에 OPEN:이 있으면 CMD:와 CTRL: 레코드를 건너뛰고, 비로컬 URL이 나타난 뒤에는 로컬 파일 경로도 버립니다. 글에 따르면 수정 커밋은 2026년 9월 16일에 반영됐고, 7.2.9은 다음 날 공개됐습니다.
업그레이드가 가장 확실한 조치입니다. 그 외에는 파일을 받을 때마다 저장 위치를 묻도록 설정하면 자동 다운로드를 막을 수 있습니다. 그룹에 나를 추가할 수 있는 사람을 연락처로 제한하면 공격자가 파일을 보낼 장소를 마련하기 어려워집니다. 로컬 암호는 탈취된 세션을 바로 쓸 수 없게 하지만, 파일 탈취 자체를 막지는 않습니다.
Hacker News 반응
- @g-b-r — 이 링크는 이미 다른 제목으로 올라왔지만, 이전 제목은 취약점으로 디스크에서 사용자가 접근할 수 있는 파일도 탈취할 수 있다는 점을 드러내지 않았습니다. 글에서도 계정 탈취에 주로 초점을 맞춰 이 부분을 충분히 강조하지 않습니다. 파일 유출도 다시 올릴 만한 내용이라고 봅니다. 취약점의 핵심이 Telegram이 자체 릴리스를 채널에 게시하려고 추가한 내부 URL 스킴에서 비롯됐다는 점은 다소 놀랍습니다. Telegram 개발자들은 파일을 지정해 업로드하는 내부 도구를 추가하는 것보다 나은 방법을 찾지 못했습니다. 다른 개발자들은 스크립트로 앱을 게시하는데 말입니다. 공격 과정이 다소 복잡하긴 해도 명백히 위험한 기능입니다. 어쨌든 Telegram Desktop에서 링크를 클릭하는 것만으로 파일을 빼내고 계정에 접근하거나 탈취할 수 있었습니다.
- @arjie — 구현 방식은 말도 안 되지만 그럴듯하게 부인할 여지도 있다는 점에서 JiaTan급 기능입니다.
- @Panzerschrek — 엄밀히 말하면 Telegram만의 취약점은 아닙니다. 현대 데스크톱 운영체제라면 사용자 권한으로 실행된 어떤 프로세스든 사용자 파일을 읽고 쓸 수 있다는 취약점입니다. 이상적으로는 프로그램을 운영체제의 파일 시스템에서 격리하고, 자기 파일과 프로그램별 데이터 폴더만 읽게 해야 합니다.
- @g-b-r — 몰래 파일을 어딘가로 올리는 프로그램은 모두가 아닙니다. 운영체제가 그런 격리를 지원해야 한다는 점에는 동의하지만, Telegram이 이 취약점의 책임을 운영체제 탓으로 돌릴 수는 없습니다.
- @nvme0n1p1 — 취약점이 아니라고 생각한다면 Telegram이 메시지 데이터베이스를 공격자에게 올리도록 속여 사적인 대화를 전부 유출하는 것도 괜찮다고 생각해야 합니다. 어쨌든 그 파일은 Telegram 소유니까요.
- @Panzerschrek — 취약점이 아니라고 말한 적은 없습니다. 분명 취약점입니다. 다만 이런 취약점이 앱 데이터보다 더 큰 피해를 내도록 허용하는 것은 운영체제 취약점이라고 봅니다.
- @yjftsjthsd-h — 아닙니다. 분명 Telegram의 취약점입니다. 방어 심층화가 부족해 피해가 커질 수는 있지만, Telegram 자체가 취약하지 않았다면 문제도 없었을 겁니다.
- @usr1106 — 저는 Telegram Desktop이나 Windows를 쓰지 않습니다. 그래서 Linux에서 Firefox를 firejail 샌드박스로 실행합니다. 브라우저에는 다운로드 폴더만 접근하게 합니다. 브라우저를 신뢰할 수 없는 프로그램으로 보고, 그 폴더에 파일을 오래 두지 않습니다.
- @g-b-r — Firefox 이야기는 이 취약점과 무슨 관련인지 잘 모르겠습니다. Telegram이 단일 인스턴스로 실행되면서 직렬화가 필요했고, 세미콜론을 이스케이프하지 않아 공격의 한 부분이 됐다는 얘기입니다.
원문: BeakSec / 번역·요약: Trawling