Дискорд и секретная технология “открытый файл с паролем”
Казалось бы удивительно, че так много спамеров в дискорде, которые своим количеством уже породили мем 1.jpg, 2.jpg, 3.jpg, 4.jpg @everyone @here

А потом копаешь тему и оказывается что абсолютно любой несакционированный доступ к чтению файлов позволяет без проблем украть твою сессию одним grep-ом токена.
Что такое токен?
Очень грубо, в дискорде:
login + password + 2fa
↓
Discord выдаёт токен (хэш на основе каких-то данных)
↓
токен становится твоей сессиейДальше клиент кидает этот токен на сервер:
“это всё ещё я”
Сервер:
“ок, входи”
А если токен украсть?
То буквально ничего интересного не происходит:
Берёшь токен.
&& Подсовываешь его другому клиенту.
&& В С Ё…
: Ты уже внутри аккаунта.

- Без логина.
- Без пароля.
- Без 2FA.
- Без SMS.
- Без passkey.
- Без push.
- Без подтверждений.
- Без алетров о новом входе.

А чо, легко украть?
Да.

просто прочитать файл
А как заметить похищение?
А никак.
Новый логин вообще не регистрируется как новый - старая сессия просто “переезжает” на другую машину.
Всё что ты можешь заметить - так это что тебя разлогинило с твоего устройства, с которого украли токен. И то при том условиеи если с этого токена кто-то уже зашел, не оставив на черный день.
А как защитить?
Понятно, что абсолютной защиты не существует.
Если на машине сидит полноценный стилер - способ что-то украсть скорее всего найдётся, в зависимости от скиллов хакера.
Но между:
“прочитать файл”
и
“внедриться в процесс, пройти системные диалоги, подделать окружение”
лежит огромная пропасть.
КАК БЫ МОЖНО БЫЛО СДЕЛАТЬ РАЗРАБАМ ДИСКОРДА
- хранение секретов через OS keychain;
- подтверждение доступа к секрету;
- fingerprint устройства;
- привязка токена к железу;
- отдельный ключ, генерируемый на устройстве;
- security alerts при резкой смене окружения.
- etc, etc, etc…
Да, всё это тоже можно обходить.
Но какой ценой?
А сейчас?
Сейчас цена атаки выглядит примерно так:
скачал подозрительную фигню
↓
она прочитала файл
↓
твою сессию угнали: `1.jpg, 2.jpg, 3.jpg, 4.jpg @everyone @here`Если Discord не может
Как варик - логиниться в дискорд со специально-выделенного только под дискорд пользователя, Чтоб права на чтение DB с сессией было только у него. При отсутвии внутренних эксплойтов в приложении Discord - шанс что у тебя что-то угонят - минимальный.
Это легко сделать на linux, т.к. иерархия прав там из коробки.
на винде, в целом, тоже можно, но безопасность не так велика, ибо права там появились как костыль лишь с релизом Vista.
Но всё лучше, чем оставлять файл открытым для всех, который дискорд сам защитить по какой-то неведомой причине не смог.

Такая защитная прослойка имплементирована в моём NixOs config