Если сервис проверяет токены 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.