💻 Research
Telegram Desktop 0-day (RCE)
Telegram Desktop 0-day (RCE)
Summary
A zero-day vulnerability was recently announced and fixed in the Telegram Desktop (<= 4.16.5) application that could lead to a remote code execution (RCE) exploit without user clicks.
The vulnerability was caused by an attacker sharing a manipulated media (video) or file to another user and reading the sent chat.
Telegram Desktop has announced that the existence of this zero-click vulnerability is incorrect, adding that there are some prerequisites for fixing the issue in the current application.

However, when shared in chats in the form of a fake video with a thumbnail containing a Python script, the issue occurred simply by reading the content of the sent chat.
Telegram Desktop has released and implemented a fix to prevent Python scripts from running automatically, and this issue should no longer be reproducible.
You can continue reading about how this vulnerability came to be and the results of the proof-of-concept exploit below.
Root Cause
The vulnerability was caused by the inclusion of an incorrect extension (pywz) for Python when supporting extensions.
![**[Figure 1] incorrect extension (pywz)**](https://prod-files-secure.s3.us-west-2.amazonaws.com/ddfb90e3-766a-4fa2-b58c-bd09d4b4e865/49d56990-f6cb-44fb-bdcf-8c6a73645113/before.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WR4VCEPN%2F20260217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260217T001650Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHgaCXVzLXdlc3QtMiJHMEUCICy0j6Bxlrm00LLKAhTIpmEuTt%2BThQU9On3Z0lu7rOGWAiEAlAqhd0Xkv3ujtWDWDRhOd3%2Bjni9JjY54SoTpHnJ%2FEdwq%2FwMIQBAAGgw2Mzc0MjMxODM4MDUiDCMMXr25VJgBb%2B5HBCrcA9NsJTAsyqoOjP9lqGV7w8oUQzJd5FUZw4HP2AHBURLPJHhNEvdMfJ71Hi7lStu787End0HlpRvUrDUrxCFzIeB6BTcatg8rsLUpwP4BZPCsXtlncyCx0IC2jnBv%2Ft0UQhOx5qS%2FQbxqb2HdaQzDQAaZ2QE7rtjuNGVM1bccOpOm%2BQjqYJWRskgj8IFMd3j5nz5U68TCx9YWnIcg5rK8ReV9ucyCt9qNW07c3J7sZJbX%2FkDDLllU4WdUA0cAIzSWRL5QK3iOzk46wFnGf7TqaVCrY7qDOU6tGTQ4EZbqdQfh3FYg%2Fz1EjCyeisn%2Fj7Q71YbcKC11M1vTjJvjBY2KwZhaTO%2FjjJT9XtSZh87Zs36Nl3lCjcEdim0kp0dp8%2B%2FCu9EL%2FgtqCQjtBS6EgQBdB8pZNIWS7OEmpjuB47MNwtQTDYs1qka55xgiy7Q7nGkRzVmG39eGci0U3qoCVMBOj%2FY0xXcMh3%2F2mj9alHbIhcLRNznaKChgwbrIctbAI2l0pL2PTD9%2FMxqpWbm5T6EYk34AAxAtglK3euCCB5d1jCPmyiQ%2BcF4P4QPvCjc0GUCoTq8VXNC5GI9kByWDr02XW8Hhvs%2FFPLX%2BHAogrlZV2Lzrcz%2BI1nChlXCV3LjCMLnLzswGOqUBgc8djvEhu0yoNo740EtvPbfKTK1lASwa4y%2Fk06mNuId0qYArMuWi%2Bey%2Ffmih4Bpc%2BrVqtsBiF4OZm3fzzVSe0gb5gsFq5U8%2BL3PNLKcsSd8qfC2Q1PnjgNZ4Cw1zeMLBzsSoosHHBj1XvJeK32uKBgSwanwBNd2xb5FiSw2GOOEH7OGVNtavZCx1M0ByMWN7PWsR6hvrSpBkgRiEFcPxq%2BhDosZD&X-Amz-Signature=020e92b8772f996cd5f0c8c0fb8d9b8fb7549bef239069139bbd0ca27422b510&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)
The *.pyzw extension is intended to support Python ZIP application and has been used here as *.pywz. For a fix for using the wrong extension, see the following link.
Proof of Concept
![**[Figure 2] Proof of Concept**](https://prod-files-secure.s3.us-west-2.amazonaws.com/ddfb90e3-766a-4fa2-b58c-bd09d4b4e865/8211c481-d8a8-4175-8a46-6700fae44cf9/poc.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466WR4VCEPN%2F20260217%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260217T001650Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEHgaCXVzLXdlc3QtMiJHMEUCICy0j6Bxlrm00LLKAhTIpmEuTt%2BThQU9On3Z0lu7rOGWAiEAlAqhd0Xkv3ujtWDWDRhOd3%2Bjni9JjY54SoTpHnJ%2FEdwq%2FwMIQBAAGgw2Mzc0MjMxODM4MDUiDCMMXr25VJgBb%2B5HBCrcA9NsJTAsyqoOjP9lqGV7w8oUQzJd5FUZw4HP2AHBURLPJHhNEvdMfJ71Hi7lStu787End0HlpRvUrDUrxCFzIeB6BTcatg8rsLUpwP4BZPCsXtlncyCx0IC2jnBv%2Ft0UQhOx5qS%2FQbxqb2HdaQzDQAaZ2QE7rtjuNGVM1bccOpOm%2BQjqYJWRskgj8IFMd3j5nz5U68TCx9YWnIcg5rK8ReV9ucyCt9qNW07c3J7sZJbX%2FkDDLllU4WdUA0cAIzSWRL5QK3iOzk46wFnGf7TqaVCrY7qDOU6tGTQ4EZbqdQfh3FYg%2Fz1EjCyeisn%2Fj7Q71YbcKC11M1vTjJvjBY2KwZhaTO%2FjjJT9XtSZh87Zs36Nl3lCjcEdim0kp0dp8%2B%2FCu9EL%2FgtqCQjtBS6EgQBdB8pZNIWS7OEmpjuB47MNwtQTDYs1qka55xgiy7Q7nGkRzVmG39eGci0U3qoCVMBOj%2FY0xXcMh3%2F2mj9alHbIhcLRNznaKChgwbrIctbAI2l0pL2PTD9%2FMxqpWbm5T6EYk34AAxAtglK3euCCB5d1jCPmyiQ%2BcF4P4QPvCjc0GUCoTq8VXNC5GI9kByWDr02XW8Hhvs%2FFPLX%2BHAogrlZV2Lzrcz%2BI1nChlXCV3LjCMLnLzswGOqUBgc8djvEhu0yoNo740EtvPbfKTK1lASwa4y%2Fk06mNuId0qYArMuWi%2Bey%2Ffmih4Bpc%2BrVqtsBiF4OZm3fzzVSe0gb5gsFq5U8%2BL3PNLKcsSd8qfC2Q1PnjgNZ4Cw1zeMLBzsSoosHHBj1XvJeK32uKBgSwanwBNd2xb5FiSw2GOOEH7OGVNtavZCx1M0ByMWN7PWsR6hvrSpBkgRiEFcPxq%2BhDosZD&X-Amz-Signature=d5671cac66c4cc44a20b68206bf3f91a63fa4f3f3db58e37148fd2227c9d3378&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)
GIF89A = "aaaa"
import os
os.system('calc')