Критическая уязвимость в JavaScript-библиотеке form-data угрожает безопасности тысяч приложений

vulnerability

Обнаружена критическая уязвимость в популярной JavaScript-библиотеке form-data, которая используется для работы с multipart/form-data в HTTP-запросах. Ошибка, получившая идентификатор CVE-2025-7783, позволяет злоумышленникам проводить атаки с внедрением произвольных параметров в запросы, что может привести к компрометации систем и утечке конфиденциальных данных. Проблема была выявлена и опубликована пять дней назад Джорданом Харбандом (ljharb), известным разработчиком JavaScript и бывшим редактором спецификаций TC39.

Детали уязвимости

Суть уязвимости заключается в использовании функции Math.random() для генерации граничных значений (boundary) в мультипарт-запросах. Несмотря на кажущуюся незначительность этого выбора, он приводит к серьезной уязвимости, поскольку Math.random() генерирует псевдослучайные значения, которые могут быть предсказаны злоумышленниками с достаточной вычислительной мощностью. Это открывает возможность для атак с внедрением параметров, когда злоумышленник может манипулировать данными в HTTP-запросах, обходя защитные механизмы приложений.

Уязвимость затрагивает несколько версий библиотеки form-data, включая все релизы до 2.5.4, а также версии 3.0.0-3.0.3 и 4.0.0-4.0.3. Организации, использующие эти версии, подвергаются высокому риску, так как злоумышленники могут воспользоваться ошибкой для атак на внутренние системы и получения доступа к конфиденциальной информации. Для эксплуатации уязвимости требуется выполнение двух условий: атакующий должен иметь возможность наблюдать за значениями Math.random(), генерируемыми целевым приложением, и контролировать хотя бы одно поле в запросе, создаваемом с помощью form-data.

Способы наблюдения за значениями Math.random() могут быть различными. Например, многие приложения используют эту функцию для генерации идентификаторов запросов (request ID) в системах распределенной трассировки. Если злоумышленник может получить доступ к таким значениям, он может вычислить внутреннее состояние генератора псевдослучайных чисел (PRNG) и предсказать будущие boundary-значения, используемые в form-data. Это позволяет подменять или добавлять произвольные параметры в запросы, что может привести к серьезным последствиям, включая обход аутентификации, внедрение SQL-инъекций или выполнение произвольного кода на сервере.

Уязвимость получила критический рейтинг CVSS 4.0 (9.8 по старой шкале), что подчеркивает ее серьезность. Эксперты уже разработали proof-of-concept (PoC) эксплойты, демонстрирующие реальную возможность эксплуатации этой уязвимости.

Разработчики библиотеки оперативно отреагировали на проблему, выпустив патчированные версии: 2.5.4, 3.0.4 и 4.0.4. В обновленных релизах Math.random() заменен на криптографически безопасный генератор случайных чисел (CSPRNG), что исключает возможность предсказания boundary-значений.

Рекомендуется немедленно обновить библиотеку form-data до последней версии во всех проектах, где она используется. Особое внимание следует уделить серверным приложениям, которые обрабатывают пользовательские данные и могут быть подвержены атакам с параметрическим внедрением. Кроме того, разработчикам стоит пересмотреть использование Math.random() в других частях своих приложений, заменив его на более безопасные альтернативы, такие как crypto.getRandomValues() в браузерных средах или соответствующие криптографические модули в Node.js.

Эта уязвимость в очередной раз напоминает о важности тщательного анализа зависимостей в проектах и своевременного применения обновлений безопасности. Игнорирование подобных рисков может привести к серьезным последствиям, включая финансовые потери и репутационный ущерб для компаний.

Ссылки

Комментарии: 0