Telegram Desktop vulnerability allowed any user's file to be stolen

Anatomi Eksploitasi: Dari Penanganan File Menuju Account Takeover

Kerentanan baru pada Telegram Desktop yang memungkinkan pencurian file lokal hingga pengambilalihan akun secara penuh (Account Takeover / ATO) lewat interaksi satu klik kembali menelanjangi masalah fundamental dalam arsitektur aplikasi desktop: isolasi proses yang lemah dan ketergantungan berlebih pada mekanisme blacklist.

Target akhir dari eksploitasi ini bukan sekadar membaca sembarang file teks di komputer korban, melainkan direktori tdata (Telegram Data). Pada Telegram Desktop, folder ini menyimpan kunci enkripsi lokal dan status sesi aktif. Jika penyerang berhasil mengekstrak direktori ini, mereka dapat menduplikasi sesi tersebut di mesin lain tanpa memicu permintaan kredensial ulang, sekaligus melewati proteksi Two-Factor Authentication (2FA). Di mata server Telegram, sesi tersebut adalah sesi valid yang sudah terotentikasi.

Rantai eksploitasi (exploit chain) ini bekerja dengan memanfaatkan cara Telegram Desktop memproses custom URL scheme dan berkas media yang diterima. Klien Telegram Desktop, yang dibangun menggunakan C++ dan framework Qt, beroperasi langsung di atas API sistem operasi tanpa lapisan isolasi seperti yang diterapkan pada browser modern. Ketika aplikasi gagal memvalidasi ekstensi file atau parameter tautan secara ketat, celah terbuka bagi penyerang untuk memicu eksekusi kode atau arbitrary file read.

[Attacker Payload: Crafted Link / Media]
       │
       ▼
[Telegram Desktop (Qt/C++)] ──(Gagal Sanitasi URI / Ekstensi)
       │
       ▼
[OS Protocol Handler / Process Execution]
       │
       ▼
[Akses Direktori 'tdata'] ──(Membaca Kunci Sesi Aktif)
       │
       ▼
[Eksfiltrasi Data] ──► [Account Takeover Tanpa Trigger 2FA]

Celah semacam ini biasanya bermula dari pendekatan usang: menggunakan daftar hitam (blacklist) untuk menyaring tipe berkas berbahaya. Alih-alih menerapkan strict whitelisting atau menyerahkan sepenuhnya penanganan eksekusi ke subsistem yang terisolasi, aplikasi mencoba menebak ekstensi apa saja yang aman. Penyerang hanya perlu menemukan satu tipe file yang diabaikan oleh filter Telegram namun tetap dieksekusi secara otomatis oleh OS, atau memanfaatkan path traversal pada penanganan skema URI kustom untuk mengarahkan pembacaan file ke direktori sensitif.

---

Trade-Off Arsitektur: Portabilitas vs Keamanan Sesi

Isu ini membuka perdebatan teknis yang relevan di komunitas engineering: mengapa direktori sesi seperti tdata begitu mudah disalahgunakan jika berhasil dibaca?

Jawabannya terletak pada keputusan desain masa lalu Telegram yang memprioritaskan portabilitas. Telegram Desktop menawarkan versi portabel yang bisa dijalankan dari flash drive tanpa instalasi formal. Konsekuensi dari keputusan ini adalah kunci enkripsi database sesi lokal tidak dapat diikat (bound) secara ketat ke hardware abstraction layer atau layanan keyring bawaan OS seperti Windows DPAPI, macOS Keychain, atau Linux Secret Service.

Jika Telegram menggunakan DPAPI di Windows, data sesi dienkripsi menggunakan kunci yang diturunkan dari kredensial login pengguna OS saat itu. Skrip atau aplikasi lain yang berjalan di luar konteks pengguna tersebut tidak akan bisa membaca isinya begitu saja. Namun, pendekatan ini mengorbankan fitur instalasi portabel dan menambah kompleksitas kode lintas platform (cross-platform overhead). Telegram memilih menyimpan kunci lokal dengan skema derivasi internal, yang berarti jika penyerang berhasil mencuri file database beserta struktur memorinya, dekripsi sepenuhnya bersifat sepele.

Di sisi lain, terdapat friksi abadi antara kenyamanan pengguna (UX) dan batas keamanan (security boundaries):

  • Agresivitas Fitur Unduh Otomatis: Telegram secara default mengunduh media dan dokumen hingga ukuran tertentu agar feed percakapan terasa instan. Fitur ini memperluas bidang serangan (attack surface) karena file asing langsung mendarat di disk lokal sebelum pengguna menyadarinya.
  • Minimnya Dialog Konfirmasi: Untuk menjaga interaksi tetap mulus, aplikasi memangkas dialog peringatan saat pengguna mengklik tautan atau membuka berkas. Setiap prompt keamanan dianggap menurunkan metrik retensi dan kepuasan pengguna.

---

Pelajaran untuk Engineering Tim di Lingkungan Produksi

Kerentanan ini bukan sekadar kegagalan tim Telegram, melainkan studi kasus tentang bahayanya membangun aplikasi desktop modern dengan pola pikir dekade lalu. Bagi software architect dan engineer yang mengelola aplikasi desktop, ada beberapa prinsip mitigasi yang wajib diterapkan:

1. Hentikan Penggunaan Blacklist Ekstensi

Validasi input tidak boleh didasarkan pada asumsi file apa yang berbahaya. Format file Windows dan Linux sangat kompleks; eksploitasi bisa terjadi lewat shortcut (.lnk), script wrapper, hingga file konfigurasi yang memicu dynamic link library loading. Jika aplikasi Anda harus menangani file eksternal, gunakan whitelisting ketat dan delegasikan pembukaan file ke handler OS dengan flag peringatan yang tidak bisa di-bypass oleh antarmuka aplikasi.

2. Kunci Status Sesi ke Platform Keyring

Jangan pernah menciptakan skema penyimpanan sesi portabel sendiri untuk data kredensial kritis:

  • Pada Windows: Gunakan CryptProtectData (DPAPI).
  • Pada macOS: Gunakan Keychain Services API.
  • Pada Linux: Integrasikan dengan libsecret / freedesktop.org Secret Service.

Jika session token dicuri lewat pembacaan file mentah, penyerang tidak boleh bisa menggunakannya di mesin yang berbeda. Sesi harus diikat ke sidik jari perangkat keras (hardware-bound tokens).

3. Sandboxing Bukan Opsi Tambahan

Aplikasi desktop yang menangani input jaringan yang tidak tepercaya (seperti chat, browser, atau media viewer) tidak boleh berjalan dengan hak akses penuh pengguna (full user privileges) tanpa isolasi. Implementasikan:

  • Windows AppContainer untuk membatasi akses baca/tulis aplikasi hanya ke direktori kerja yang ditentukan.
  • macOS App Sandbox untuk memutus akses ke sistem file di luar container aplikasi.
  • Format distribusi Linux berbasis bubblewrap/Flatpak yang membatasi akses ke folder home.

4. Sanitasi Ketat pada Custom URL Schemes

Penanganan URI kustom (app:// atau tg://) adalah vektor serangan Remote Code Execution (RCE) paling umum di desktop. Parameter yang diparsing dari URL harus diperlakukan sebagai input yang sepenuhnya beracun:

  • Jangan pernah meneruskan string URL mentah ke fungsi shell seperti system(), ShellExecute(), atau wrapper subprocess.
  • Terapkan validasi skema berbasis regex yang menolak karakter kontrol, path traversal sequences (../), dan flag baris perintah sebelum parameter diproses oleh router aplikasi.

Mengorbankan batas isolasi sistem demi kenyamanan fitur atau portabilitas cepat atau lambat akan berujung pada eksploitasi total. Aplikasi desktop modern yang memproses data jaringan harus memperlakukan sistem lokalnya sendiri dengan tingkat kecurigaan yang sama seperti sistem di internet publik.

Arsitektur & Alur Visual Sistem

Arsitektur dan Alur Sistem: Telegram Desktop vulnerability allowed any user's file to be stolen