@babel/runtime versions 7.22.5 and 7.22.3 are modular runtime helpers for Babel, designed to enable the use of ES2015+ features in environments that don't natively support them. Both versions share the same core functionality, providing essential polyfills and helper functions needed to execute transformed JavaScript code. A crucial dependency for both is regenerator-runtime, ensuring support for async/await syntax. Both versions are licensed under the MIT license, encouraging widespread adoption and usage within various projects. The source code for both versions resides in the packages/babel-runtime directory of the Babel repository on GitHub.
The primary distinction between these versions lies in their release date and potential bug fixes or minor internal adjustments. Version 7.22.5 was released on June 8, 2023, while version 7.22.3 came out on May 27, 2023. While the fileCount and unpackedSize remain identical, suggesting minimal changes to the overall codebase structure, the newer version likely incorporates patches addressing specific issues or optimizations identified since the previous release. For developers utilizing @babel/runtime, upgrading to the latest patch version (7.22.5) is generally recommended to benefit from the most recent refinements and bug fixes, ensuring optimal compatibility and stability within their Babel-powered JavaScript projects. Developers relying on older versions are encouraged to review the changelog for insights into specific changes and upgrade accordingly.
All the vulnerabilities related to the version 7.22.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.