Обнаружена критическая уязвимость в популярной 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.
Эта уязвимость в очередной раз напоминает о важности тщательного анализа зависимостей в проектах и своевременного применения обновлений безопасности. Игнорирование подобных рисков может привести к серьезным последствиям, включая финансовые потери и репутационный ущерб для компаний.
Ссылки
- https://github.com/benweissmann/CVE-2025-7783-poc
- https://www.cve.org/CVERecord?id=CVE-2025-7783
- https://github.com/form-data/form-data/security/advisories/GHSA-fjxv-7rqg-78g4
- https://github.com/form-data/form-data/commit/3d1723080e6577a66f17f163ecd345a21d8d0fd0