Перейти к содержимому
ecdsa.com

Подмена алгоритма (путаница ключей)

Ошибка проверки, при которой библиотека позволяет заголовку alg токена выбирать алгоритм, и ключ, предназначенный для одного алгоритма, используется с другим; классический пример — открытый ключ RSA в роли секрета HS256.
Другие написанияalgorithm confusion attackkey confusionRS256 to HS256alg confusion

Если сервис проверяет токены RS256 вызовом verify(token, publicKeyPem), а библиотека принимает и HS256 с любым переданным ключом, атакующий берёт открытый ключ (он опубликован в JWKS), вычисляет HMAC над поддельными заголовком и полезной нагрузкой, используя эти байты как секрет, и указывает "alg": "HS256"; сервер проверяет HMAC, и тот оказывается верным. Тим Маклин описал эту атаку вместе с none в 2015 году, и её варианты продолжают появляться в новых библиотеках и фреймворках, в том числе через JWK, встроенные в заголовок jwk токена.

Исправление (RFC 8725, § 3.1) — на стороне проверки привязать каждый ключ ровно к одному алгоритму: списки разрешённых алгоритмов, типизированные объекты ключей, которые нельзя использовать как секрет HMAC, сверка alg в каждом JWK с токеном и отказ выбирать ключи из переданных в токене jwk, jku или x5u без решения о доверии. Полностью определённые имена алгоритмов из RFC 9864 устраняют родственную неоднозначность полиморфных идентификаторов вроде EdDSA.

Стандарты и ссылки

Все термины