В популярной JavaScript-библиотеке sha.js обнаружили критическую уязвимость, которая может поставить под угрозу безопасность миллионов приложений. Этот модуль используется для реализации алгоритмов SHA и еженедельно скачивается более 14 миллионов раз, так что проблема затрагивает огромное число проектов на Node.js и в браузере.
Баг получил идентификатор CVE-2025-9288 и высокий балл по CVSS — 9,1 из 10. Ошибка связана с тем, что библиотека не проверяла корректность входных данных. В итоге злоумышленник может управлять тем, как вычисляется хеш, и добиваться крайне опасных последствий — от коллизий до восстановления приватных ключей.
Какие атаки возможны:
- Сброс состояния хеша. Через специальные конструкции наподобие
{ length: -x }
можно «отмотать» внутреннее состояние и даже превратить помеченный хеш в непомеченный, лишив его защиты. - Коллизии и неверные значения. Поддельный ввод вроде
{ length: buf.length, ...buf, 0: buf[0] + 256 }
может дать тот же хеш, что и оригинальный буфер, хотя данные различаются. Это приводит к расхождениям с другими библиотеками, например, bn.js. - Отказ в обслуживании. Ввод вида
{ length: '1e99' }
заставляет функцию зависнуть, фактически обрушивая приложение. - Криптографическая катастрофа. Самый опасный сценарий связан с генерацией nonce через хеширование. Если разные значения дают одинаковый хеш, но интерпретируются по-разному, можно восстановить приватные ключи.
Разработчикам настоятельно рекомендуют как можно скорее обновиться до версии 2.4.12, где проблема уже исправлена.