TGViewer
Что-то на пентестерском Что-то на пентестерском @pntests · 2.76K subscribers
Post #190 2.66K
Небезопасная генерация токена

Что может быть проще: сброс пароля, подтверждение почты или аутентификация по токену? Но если ваш токен генерируется геморройно простым методом — у злоумышленника появляется прямой доступ к системе. Давайте разберёмся, почему до сих пор взламываются даже крупные сервисы и почему “уникальный токен” — не всегда синоним безопасности.

🟢 Как появляется проблема:

Иногда разработчики генерят токены через стандартные функции вроде rand() или time(), добавляя к ним user_id или инкрементный счетчик. Примеры из реального мира:
- Сброс пароля: token = md5(time() . user_id)
- Авторизация: просто strval(rand())

❗️По факту — это не токен, а открытая дверь, где “замок” известен каждому умеющему читать код. Если сервер при отправке ссылки для сброса пароля проверяет только такой токен — любой, у кого есть доступ к user_id и времени генерации, сможет подобрать нужное значение и получить доступ к чужому аккаунту.

🔊 Как это эксплуатируют:
Самый частый паттерн:
1. Изучаем токен — часто можно декодировать его, видим время или user_id.
2. Получаем user_id жертвы (через API или просто по URL).
3. Генерируем гипотетические значения токена по шаблону, который использует сервер.
4. Подставляем их в запрос — вход срабатывает. Профит.

📌 Даже хуже, если используется стандартный rand() на популярных языках — достаточно знать seed или время запуска генератора, чтобы воспроизвести последовательность токенов полностью (пример: предсказуемые токены сброса пароля в старых версиях некоторых CMS).

🔔 Как делать правильно?

Используйте только криптографически стойкие генераторы случайных чисел:
- Для PHP: random_bytes() и bin2hex()
- Для Python: secrets.token_urlsafe()
- Для Node.js: crypto.randomBytes()

Короче — никогда не генерируйте security-токены с помощью наивных функций и не смешивайте их с очевидными константами (user_id, timestamp и прочее)! Любой аудитор кода обязан сразу поднимать тревогу, видя старые добрые md5(time()).

Когда вы в последний раз проверяли генерацию токенов в своем проекте? Поделитесь кейсами — у кого встречались "простейшие" реализации? 👀

📶 Полезная ссылка: https://cqr.company/ru/web-vulnerabilities/insecure-token-generation/

ЧТНП | #web
  • 👍 13
  • ❤ 1
  • 🔥 1
More from @pntests
  1. Dec 31, 2025С новым годом 🎉🎊🎆🍾🎄🎁
  2. Aug 10, 2025James Kettle дропнул свой ресерч про новые классы атак через HTTP Request Smuggling и, к м…
  3. Jul 14, 2025🛡 Application Attack Matrix — созданная сообществом MITRE-подобная матрица тактик, техник…
  4. Jun 18, 2025Успейте подать заявку на Pentest Award 2025 до 30 июня! Это отраслевая награда для специал…
  5. Jun 8, 2025Post #191
  6. May 17, 2025Post #189
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →