Telegram позиционирует себя как «безопасный и быстрый» мессенджер, а в FAQ прямо обещает, что по умолчанию телефон видят только ваши контакты — и его всегда можно скрыть в настройках Privacy & Security → Phone Number (telegram.org). На практике же телефон часто удаётся вычислить даже при настройке «Никто». Две главные технологические лазейки:
- Массовый импорт контактов (
contacts.importContacts
) — так называемая «примерка» номеров. - Уязвимость CVE-2019-15514 (Telegram <= 5.10): раскрытие номера через Group Info.
Обе технологии давно стали фундаментом для российских OSINT-ботов («Глаз Бога», «Химера» и др.), позволяя за копейки строить базы ID ↔ телефон. Далее подробно разберём технические детали, уязвимости протокола и последствия для приватности.
-
Метод принимает массив до 10 000 объектов
inputPhoneContact
и сразу говорит, какие из этих номеров уже есть в Telegram, возвращая ихuser_id
(core.telegram.org). -
Если номер «угадан», мессенджер считает, что вы «добавили контакт», — и игнорирует настройку «Кто видит мой номер».
-
Лимиты официально не документированы, но разработчики отмечают два этапа:
- ~5 000 номеров можно загрузить быстро;
- далее скорость падает до ≈100 номеров в сутки для одного аккаунта (stackoverflow.com). Атака масштабируется фермой SIM-карт/облачных +eSIM и пулом прокси.
# Упрощённый PoC на Telethon
from telethon.sync import TelegramClient
from telethon.tl.functions.contacts import ImportContactsRequest, DeleteContactsRequest
phones = ['+7985XXXX001', '+7985XXXX002', ...] # диапазон «примерки»
contacts = [InputPhoneContact(client_id=i, phone=p, first_name='.', last_name='')
for i, p in enumerate(phones)]
result = client(ImportContactsRequest(contacts))
for imp in result.users:
print(imp.id, imp.phone) # получили связку ID ↔ телефон
client(DeleteContactsRequest(result.users)) # чистим следы
- Исследование NDSS-2021 показало, что даже при базовых лимитах можно просканировать 100 % всех US-номеров за считанные недели, распределив нагрузку на 100–200 аккаунтов .
- Боты-«пробивы» комбинируют «примерку» с утечками (Avito, Яндекс.Доставка и т. д.) и добровольной телеметрией клиентов («каждый запрос пополняет базу») — подробно описано в расследовании «Медиазоны» (2024 – 2025) (zona.media).
Описание: при приватном уровне Nobody номер всё равно утекал через вкладку Group Info: достаточно было массово «добавить» диапазон номеров в группу, и Telegram возвращал ID для совпавших телефонов (cve.circl.lu).
GitHub-PoC демонстрирует перебор диапазона +92-000…
с остановкой, когда user_id
совпал с целевым (github.com).
Статус патча. В версии 5.11 Telegram убрал прямое отображение номеров в информации о группе, однако:
- сама логика contact discovery не изменилась;
- импорт номеров по-прежнему игнорирует настройку Nobody (см. § 1). Следовательно, закрытие CVE лишь убрало «побочный» канал, не устранив основную угрозу.
Компонент | Цель | Реализация |
---|---|---|
User-бот (Telethon/TDLib) | Обходит Bot API-лимиты, может импортировать контакты | Нужны реальные или виртуальные SIM, proxy pool |
Скрипт перебора диапазонов | Перебрать 10⁶-10⁷ номеров целевого оператора/региона | Async-Batch importContacts → анализ imported |
Dedup + кросс-линк | Свести результаты с утечками и тегами GetContact | PostgreSQL / ClickHouse |
Ферма аккаунтов | Умножить пропускную способность | Автоматическая регистрация через АТС или SMS-активаторы |
Кэш-приманка | Сохранять пары ID↔телефон от самих клиентов бота | Каждый запрос обогащает БД «пробива» |
Контрмера Telegram | Что даёт | Почему обходят |
---|---|---|
Замедление импорта после 5 000 номеров | Уменьшает скорость одной учётки | Ферма аккаунтов нивелирует |
Настройка «Кто может найти меня по номеру → Никто» | Блокирует поиск через строку «Контакты» | Не влияет на importContacts |
Опция «Кто видит мой номер → Никто» | Скрывает номер в профиле | Контакты, импортированные «примеркой», всё равно его «знают» |
Виртуальные номера TON (+888) | Нет реального телефона → не подобрать диапазон | Теряются SMS-функции, многие сервисы не принимают |
- Сбор и хранение баз ID ↔ телефон без согласия нарушает ст. 14, 21 ФЗ №152-ФЗ (персональные данные).
- Массовый «пробив» подпадает под ч. 2 ст. 272 УК РФ (неправомерный доступ к компьютерной информации).
- В 2024–2025 гг. прошли обыски у команды «Глаза Бога», функционал бота урезан после ужесточения ответственности (zona.media).
Telegram остаётся удобным мессенджером, но его архитектура с «обратной книгой контактов» делает анонимность условной:
- Контактная «примерка» технически разрешена самим API и по-прежнему даёт точную связку
user_id ↔ телефон
, независимо от выставленных настроек. - CVE-2019-15514 показала, что даже явные приватные опции могут обходиться, а латка не решила корневую проблему.
- Ограничения Telegram сводятся к рейт-лимитам, которые масштабируются горизонтально.
- Включить: Phone Number → Nobody и Who can find me by my number → Nobody.
- Отключить синхронизацию контактов, очистить уже загруженную книгу.
- Завести отдельный +888-номер или eSIM для «чувствительного» общения.
- Помнить: если хотя бы один знакомый когда-то «слил» вашу книгу, ваш номер уже может быть в чужой базе.
- Telegram FAQ — политика отображения номера (telegram.org)
- Документация
contacts.importContacts
(Layer 195) (core.telegram.org) - StackOverflow: практические лимиты импорта (ответ Ali Hashemi) (stackoverflow.com)
- NDSS-2021 «All the Numbers are US» — масштаб атаки и статистика
- CVE-2019-15514 описание и статус (cve.circl.lu)
- GitHub PoC CVE-2019-15514 (github.com)
- Расследования «Медиазоны» о ботах «Глаз Бога» (2024 – 2025) (zona.media)
- Telegram data-breach (900 МБ база ID↔телефон, 2020) (cisomag.com)
- Privacy International: гайд по скрытию номера (2025) (privacyinternational.org)