UBUNTU-CVE-2023-45133: Critical severity ubuntu/node-babel vulnerability
Babel is a compiler for writingJavaScript. In @babel/traverse prior to versions 7.23.2 and 8.0.0-alpha.4 and all versions of babel-traverse, using Babel to compile code that was specifically crafted by an attacker can lead to arbitrary code execution during compilation, when using plugins that rely on the path.evaluate()or path.evaluateTruthy() internal Babel methods. Known affected plugins are @babel/plugin-transform-runtime; @babel/preset-env when using its useBuiltIns option; and any "polyfill provider" plugin that depends on @babel/helper-define-polyfill-provider, such as babel-plugin-polyfill-corejs3, babel-plugin-polyfill-corejs2, babel-plugin-polyfill-es-shims, babel-plugin-polyfill-regenerator. No other plugins under the @babel/ namespace are impacted, but third-party plugins might be. Users that only compile trusted code are not impacted. The vulnerability has been fixed in @babel/traverse@7.23.2 and @babel/traverse@8.0.0-alpha.4. Those who cannot upgrade @babel/traverse and are using one of the affected packages mentioned above should upgrade them to their latest version to avoid triggering the vulnerable code path in affected @babel/traverse versions: @babel/plugin-transform-runtime v7.23.2, @babel/preset-env v7.23.2, @babel/helper-define-polyfill-provider v0.4.3, babel-plugin-polyfill-corejs2 v0.4.6, babel-plugin-polyfill-corejs3 v0.8.5, babel-plugin-polyfill-es-shims v0.10.0, babel-plugin-polyfill-regenerator v0.5.3.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/node-babelto a version that resolves this vulnerability.Fixed in 6.26.0+dfsg-3ubuntu0.1~esm1 - Upgrade
Upgrade
ubuntu/node-babelto a version that resolves this vulnerability.Fixed in 6.26.0+repack-3ubuntu0.1~esm1 - Upgrade
Upgrade
@babel/traverseto a version that resolves this vulnerability.Fixed in 7.23.2 - Upgrade
Upgrade
@babel/traverseto a version that resolves this vulnerability.Fixed in 8.0.0-alpha.4 - Upgrade
Upgrade
@babel/plugin-transform-runtimeto a version that resolves this vulnerability.Fixed in 7.23.2 - Upgrade
Upgrade
@babel/preset-envto a version that resolves this vulnerability.Fixed in 7.23.2 - Upgrade
Upgrade
@babel/helper-define-polyfill-providerto a version that resolves this vulnerability.Fixed in 0.4.3 - Upgrade
Upgrade
babel-plugin-polyfill-corejs2to a version that resolves this vulnerability.Fixed in 0.4.6 - Upgrade
Upgrade
babel-plugin-polyfill-corejs3to a version that resolves this vulnerability.Fixed in 0.8.5 - Upgrade
Upgrade
babel-plugin-polyfill-es-shimsto a version that resolves this vulnerability.Fixed in 0.10.0 - Upgrade
Upgrade
babel-plugin-polyfill-regeneratorto a version that resolves this vulnerability.Fixed in 0.5.3
Event History
Frequently Asked Questions
Who is exposed to exploitation?
Build or compilation environments that process JavaScript specifically crafted by an attacker are exposed if they use a vulnerable Babel traversal package together with an affected plugin or potentially an affected third-party plugin. Users who compile only trusted code are not impacted.
Which configurations are known to reach the vulnerable code path?
Known affected configurations use @babel/plugin-transform-runtime, or @babel/preset-env with the useBuiltIns option enabled. Polyfill-provider plugins that depend on @babel/helper-define-polyfill-provider are also affected, including the listed core-js, es-shims, and regenerator polyfill plugins.
Are all Babel plugins affected?
No. No other plugins in the @babel namespace are impacted, but third-party plugins might be affected if they rely on the vulnerable internal evaluation methods.
What can be done if @babel/traverse cannot be upgraded immediately?
If an affected package is in use, upgrade that package to its latest version to avoid triggering the vulnerable code path in affected @babel/traverse versions. Avoid compiling untrusted attacker-supplied code until remediation is complete.
Which versions contain the fix?
The issue is fixed in @babel/traverse version 7.23.2 and 8.0.0-alpha.4. The description states that all versions of babel-traverse are affected.