@babel/runtime version 7.14.5 represents a minor update to the widely-used Babel's modular runtime helpers, building upon the previous stable version 7.14.0. Both versions maintain the same core function: providing Babel's runtime dependencies in a modular and efficient manner, enabling developers to use modern JavaScript features without bloating their final bundles. Key dependencies, such as regenerator-runtime (version ^0.13.4), remain consistent, ensuring continued support for async/await functionality. Both packages are licensed under the MIT license.
The notable distinctions lie in the release timing and potentially subtle internal improvements. Version 7.14.5 was released on June 9th, 2021, following version 7.14.0's release on April 29th, 2021. The newer version has a slightly larger unpacked size (143642 bytes compared to 143598 bytes), suggesting minor code additions, bug fixes, or performance enhancements. Also the author field changed from a specific person to the Babel Team, so it could be a relevant fact. For developers, this means upgrading to 7.14.5 offers the benefits of the latest refinements and fixes within the Babel ecosystem. While the dependency specifications appear unchanged, staying current with minor versions like this is generally recommended to leverage cumulative improvements, enhanced compatibility, and potentially improved performance. When incorporating Babel into your project, it's beneficial to regularly check for such updates to ensure optimal transpilation and runtime support for modern JavaScript features.
All the vulnerabilities related to the version 7.14.5 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.