Back to Blog
CVE-2026-107181: A Telegram Link Reached an Internal File Sender

CVE-2026-107181: A Telegram Link Reached an Internal File Sender

Sythe Labs Team

Telegram Desktop could turn a clicked link into access to local files. In beaksec’s disclosure, published October 3 and updated October 7, 2026, CVE-2026-107181 joins an inter-process communication parsing bug to an internal file-sending helper. The researcher reports affected versions through 7.2.8 and confirms the demonstration on Windows. Telegram Desktop 7.2.9 contains the fix.

The useful part of this case is the boundary the link crossed. Code intended to help an application talk to another instance of itself also accepted data that began outside the application. A maintenance feature became reachable through that path.

The local socket carried an external instruction

When another Telegram Desktop instance was already running, a new process forwarded a link over a local socket. The receiver split its text protocol into records at semicolons. The sender encoded the value as a URL but did not escape it for that separate record format. A delimiter inside the value could therefore change the receiver’s interpretation.

The vendor’s September 16 patch changes the outgoing expression in Telegram/SourceFiles/core/sandbox.cpp:

Before the fixAfter the fix
-commands += u"OPEN:"_q + url.toString(QUrl::FullyEncoded) + ';';+commands += u"OPEN:"_q+    + EscapeTo7bit(url.toString(QUrl::FullyEncoded))+    + ';';

EscapeTo7bit explicitly handles the record separator and percent sign. The receiving side decodes the escaped value after finding record boundaries. URL encoding and IPC encoding protect different grammars. One cannot be substituted for the other just because both produce strings.

The reported trust-boundary failure

Clicked link

External input enters the desktop application

Local IPC

A value changes the record boundaries

Legacy helper

Internal file-sending behavior becomes reachable

The second defect gave the parser mistake its impact

The researcher traced the injected instruction to an internal interpret: handler. It read instructions from a local file and could send a named file to a chat. The demonstration depended on an instruction file being available at a usable path and the user following a crafted link through an external launch path that reached the IPC handler. A direct link handled entirely inside the running app does not take that same path. It was not a zero-click attack.

Beaksec also demonstrated account takeover using accessible session material. That result should not be generalized to every Telegram client or every local protection configuration. This article concerns Telegram Desktop and the reported chain; it does not establish an exploitation campaign.

The patch removes the legacy helper and its invocation paths. It also rejects local file paths on a connection that carries an external URL and suppresses certain other commands when open records are present. Those changes address both the encoding defect and combinations of behavior that should not share a launch context. The repair deletes capability as well as tightening parsing.

Verify the running client before closing the update task

Telegram’s official 7.2.9 release, dated September 17, 2026, is the fixed release identified by the disclosure. Use your approved distribution channel to install a current version containing that fix. Check the package actually installed on each endpoint; a downloaded installer does not establish which executable is running.

For your rollout, record the application identity, distribution channel, observed version, and verification time. Include portable copies and installations outside the path your usual inventory collects. If a package vendor uses a different version scheme or backports fixes, retain that vendor’s evidence rather than comparing version strings alone.

Complete the restart required by your deployment method, then verify the running application. Keep devices you cannot inspect in an unresolved group with an owner. An unreachable laptop and a verified updated laptop should not receive the same completion status.

If you cannot update immediately, remove the vulnerable client from use while arranging the fix. Treat restrictions on external links or automatic downloads as exposure reduction, not proof that the vulnerable code has been repaired. Do not test a published attack link on an employee’s working session.

Review your own helper paths with harmless fixtures

This is a useful design-review exercise even if your team does not use Telegram. Start with an external input and follow every representation it takes before reaching an action. Identify which component decides where one value ends and another command begins.

In an isolated test build, use inert strings containing separators, escape characters, and non-ASCII text. Assert that a value survives the round trip and remains one value. Then test authorization separately: a correctly decoded request still needs permission to perform its action. A parser test cannot prove that permission exists.

Review release helpers, debug commands, migration utilities, and internal URI handlers shipped inside customer binaries. For each one, write down who is meant to invoke it and what enforces that restriction. If the feature is no longer needed, removing it may be easier to verify than preserving a growing list of entry-point exceptions.

For suspected exposure, separate patching from investigation. Preserve the relevant endpoint and account records, identify potentially exposed credentials, and route containment through your incident process. Installing a fixed client cannot retract information already sent. Close the update task when the running version is verified; close the incident only when the exposure has been assessed.

Sythe Seconds

Get the next insight in your inbox.

Research from our team, practical compliance guidance, and the latest from Sythe Labs. Straight to your inbox.

By subscribing, you agree to receive Sythe Seconds. Unsubscribe anytime. Privacy policy