
Демонстрация атаки с использованием путаницы алгоритмов на различных библиотеках JWT
Демонстрация атаки путаницы алгоритмов на библиотеки Json Web Token (JWT). JWT часто используются в cookie для подтверждения пользовательской сессии, поэтому эта атака критична. Для демонстрации уязвимости использовался модуль Node.js [email protected].
Этот проект также был приятной «vibe coding» активностью, так как фронтенд был почти полностью выполнен с помощью LLM, за исключением API-вызовов.
Формат JWT следующий:
b64(header).b64(payload).b64(signature)
With in our case:
header = (algorithm, type)
payload = (username, role)
В то время различные библиотеки JWT могли подписывать с помощью алгоритма, но не принуждали к использованию алгоритма, а скорее полагались на содержимое заголовка JWT, тем самым позволяя пользователю самостоятельно выбирать шифрование. Это открывает множество возможностей для эксплуатации, но в данном случае используется следующая:
Авторизуйтесь как любой пользователь на странице входа. Вам нужно будет сначала зарегистрироваться.
На домашней странице будет кнопка, которую можно нажать только при наличии действительной сессии администратора. Затем вам нужно будет запустить эксплойт, чтобы подделать этот JWT.
Наконец, замените оригинальный JWT на поддельный в локальном хранилище, и после обновления страницы кнопка должна стать активной, и флаг ваш!