@babel/runtime version 7.23.8 is a minor update to Babel's modular runtime helpers, building upon the solid foundation of version 7.23.7. Both versions, essential for projects leveraging Babel to transpile modern JavaScript, share the same core dependencies, including "regenerator-runtime":"^0.14.0", ensuring continued compatibility with asynchronous JavaScript features across different environments. Distributing under the permissive MIT license, @babel/runtime allows for flexible integration into various projects, both commercial and open-source. The packages are maintained by The Babel Team, assuring quality and adherence to modern JavaScript standards.
The key difference lies in the incremental improvements and refinements incorporated in version 7.23.8. While the core functionality remains the same, reflected in the shared description and dependency, developers gain value from subtle enhancements regarding the unpacked size that saw an increase of around 400 bytes and file count, indicating potential bug fixes, performance optimizations, or the addition of new helper functions related to supporting new javascript features.
The newer version was released in January 8, 2024 almost 10 days after the older version (December 29, 2023), making it a recommended upgrade for developers seeking the most up-to-date and refined runtime support for their Babel-powered projects. The small difference in file count and unpacked size suggests that version 7.23.8 addresses niche cases or edge scenarios, further stabilizing and enhancing the overall developer experience.
All the vulnerabilities related to the version 7.23.8 of the package
Babel has inefficient RegExp complexity in generated code with .replace when transpiling named capturing groups
When using Babel to compile regular expression named capturing groups, Babel will generate a polyfill for the .replace
method that has quadratic complexity on some specific replacement pattern strings (i.e. the second argument passed to .replace
).
Your generated code is vulnerable if all the following conditions are true:
.replace
method on a regular expression that contains named capturing groups.replace
If you are using @babel/preset-env
with the targets
option, the transform that injects the vulnerable code is automatically enabled if:
You can verify what transforms @babel/preset-env
is using by enabling the debug
option.
This problem has been fixed in @babel/helpers
and @babel/runtime
7.26.10 and 8.0.0-alpha.17, please upgrade. It's likely that you do not directly depend on @babel/helpers
, and instead you depend on @babel/core
(which itself depends on @babel/helpers
). Upgrading to @babel/core
7.26.10 is not required, but it guarantees that you are on a new enough @babel/helpers
version.
Please note that just updating your Babel dependencies is not enough: you will also need to re-compile your code.
If you are passing user-provided strings as the second argument of .replace
on regular expressions that contain named capturing groups, validate the input and make sure it does not contain the substring $<
if it's then not followed by >
(possibly with other characters in between).
This vulnerability was reported and fixed in https://github.com/babel/babel/pull/17173.