Дискорд и секретная технология “открытый файл с паролем”

Казалось бы удивительно, че так много спамеров в дискорде, которые своим количеством уже породили мем 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