Session Stuffing — баг, при котором одна функциональность приложения перезаписывает сессионные переменные, уже используемые для авторизованного пользователя.
Импакт может быть уровня P1: входишь под одним аккаунтом, дёргаешь другую фичу — и внезапно оказываешься в чужом профиле.
Как это выглядит ⤵️
1️⃣ Логинишься под одним юзером
session.isLoggedIn = true
session.userName = "attacker"
session.userId = 123
2️⃣ В этой же сессии открываешь forgot password
Форма просит username, чтобы показать контрольный вопрос или отправить reset flow.
username = "victim"
3️⃣ Бэкенд временно пишет это значение в session
session.userName = "victim"
4️⃣ Пользователь возвращается в личный кабинет и обновляет страницу
Если приложение проверяет только:
session.isLoggedIn == true
А данные подтягивает по:
session.userName
то профиль может открыться уже для
victim. Вот и весь auth bypass.Что происходит 🤔
Разрабы могут использовать одну и ту же переменную сессии и для страницы восстановления пароля, и для логина, и не сделать принудительный выход из системы при использовании сброса пароля.
Одна страница перезаписывает переменную в уже авторизованной сессии, что приводит к полному обходу аутентификации для любого чужого аккаунта — достаточно только знать username.
