📌 Giới thiệu
Một lỗ hổng bảo mật trong Telegram Web, cho phép kẻ tấn công chiếm đoạt tài khoản Telegram của người dùng chỉ trong vài giây, ngay cả khi đã bật xác thực hai yếu tố (2FA) và sử dụng thiết bị không bị root hoặc jailbreak.
⚙️ Cơ chế hoạt động của lỗ hổng
-
Đăng nhập tự động qua URL: Telegram Web sử dụng cơ chế đăng nhập tự động thông qua token
tgWebAuthTokenđược gắn vào phần fragment của URL (sau dấu#). -
Token trong URL fragment: Token này nằm trong phần fragment của URL, ví dụ: Fragment này không được gửi đến server nhưng có thể bị truy cập bởi mã JavaScript trong trang web.
https://web.telegram.org/#tgWebAuthToken=...&tgWebAuthUserId=...&tgWebAuthDcI -
Khả năng bị lạm dụng: Nếu ai đó có quyền truy cập vào thiết bị của bạn và gửi cho bạn một liên kết Telegram Web chứa token, họ có thể dễ dàng chiếm đoạt tài khoản của bạn mà không cần mật khẩu hoặc mã 2FA.
🔍 Phân tích kỹ thuật
-
Tìm hiểu mã nguồn: Tìm kiếm trong mã nguồn của Telegram Desktop (
tdesktop) nhưng không tìm thấy thông tin liên quan đếntgWebAuthToken. -
Gỡ lỗi ứng dụng: Sau khi biên dịch lại ứng dụng và gắn trình gỡ lỗi phát hiện ra chức năng
BotAutoLogintrong mã nguồn, chịu trách nhiệm xử lý các URL chứa token đăng nhập. -
Mã nguồn liên quan:
[[nodiscard]] bool BotAutoLogin(
const QString &url,
const QString &domain,
QVariant context) {
auto &account = Core::App().activeAccount();
const auto &config = account.appConfig();
const auto domains = config.get<std::vector<QString>>(
"url_auth_domains",
{});
if (!account.sessionExists()
|| domain.isEmpty()
|| !ranges::contains(domains, domain)) {
return false;
}
const auto good = url.startsWith(kBadPrefix, Qt::CaseInsensitive)
? (kGoodPrefix + url.mid(kBadPrefix.size()))
: url;
UrlAuthBox::Activate(&account.session(), good, context);
return true;
}
Điều này ảnh hưởng trên nhiều đường dẫn như:
http://web.telegram.org
https://z.t.me/
https://k.t.me/
....
DEMO : https://youtu.be/m7Rk-PnzzT8
Link source : https://github.com/VHAE04/Telegram_nah_2fa
rf : lyra






