В JavaScript-библиотеке JsonWebToken с реализацией технологии JSON Web Token (JWT) выявлена уязвимость (CVE-2022-23529), позволяющая добиться удалённого выполнения кода при верификации специально оформленного JWT-запроса. За последнюю неделю библиотека была загружена из каталога NPM более 10 млн раз.
В качестве зависимости JsonWebToken задействован в более чем 22 тысячах пакетов, в которых используется для верификации и подписывания токенов JWT, применяемых для защищённой передачи информации в формате JSON. Уязвимость устранена в выпуске JsonWebToken 9.0.0.
Уязвимость вызвана ошибкой в реализации метода verify, который принимает три параметра (токен, secretOrPublicKey и набор опций), после чего проверяет корректность токена и возвращает декодированное содержимое. В соответствии со спецификацией параметр secretOrPublicKey может быть строкой или буфером, но в коде JsonWebToken это не учитывается и он всегда разбирается как строка с использованием метода toString(). Соответственно, если передать вместо строки JavaScript-объект с собственным методом toString(), при проверке будет вызван указанный атакующим код.