Podatność w bibliotece `@babel/traverse` kompilatora Babel umożliwia wykonanie dowolnego kodu (RCE) w trakcie kompilacji JavaScript, jeśli przetwarzany kod został specjalnie spreparowany przez atakującego. Dotyczy wyłącznie scenariuszy kompilacji niezaufanego kodu przy użyciu określonych wtyczek.
▸ Pokaż oryginał (EN)
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.
Luka wynika z nieprawidłowej listy dozwolonych wartości oraz błędu w logice porównań (CWE-184, CWE-697) w metodach `path.evaluate()` i `path.evaluateTruthy()` biblioteki `@babel/traverse`. Atakujący może spreparować kod JavaScript, który po przetworzeniu przez te metody doprowadza do wykonania arbitralnego kodu w trakcie procesu kompilacji. Podatność jest wyzwalana przez konkretne wtyczki Babel, które wewnętrznie wywołują wspomniane metody, takie jak `@babel/plugin-transform-runtime`, `@babel/preset-env` z opcją `useBuiltIns` oraz wtyczki z rodziny polyfill korzystające z `@babel/helper-define-polyfill-provider`.
Atakujący, który może dostarczyć złośliwy kod JavaScript do skompilowania przez podatną konfigurację Babel, może doprowadzić do wykonania arbitralnego kodu na maszynie przeprowadzającej kompilację, co grozi pełnym przejęciem środowiska budowania (CI/CD, stacja deweloperska).
Należy zaktualizować `@babel/traverse` do wersji 7.23.2 lub 8.0.0-alpha.4. Jeśli aktualizacja `@babel/traverse` nie jest możliwa, należy zaktualizować używane wtyczki do następujących wersji (lub nowszych): `@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. Dodatkowo należy unikać kompilowania niezaufanego kodu JavaScript w środowiskach produkcyjnych lub CI/CD.
`@babel/traverse` w wersjach wcześniejszych niż 7.23.2 oraz 8.0.0-alpha.4, a także wszystkie wersje `babel-traverse`. Podatność ujawnia się przy użyciu następujących wtyczek: `@babel/plugin-transform-runtime` (przed v7.23.2), `@babel/preset-env` z opcją `useBuiltIns` (przed v7.23.2), `@babel/helper-define-polyfill-provider` (przed v0.4.3), `babel-plugin-polyfill-corejs2` (przed v0.4.6), `babel-plugin-polyfill-corejs3` (przed v0.8.5), `babel-plugin-polyfill-es-shims` (przed v0.10.0), `babel-plugin-polyfill-regenerator` (przed v0.5.3). Użytkownicy kompilujący wyłącznie zaufany kod nie są narażeni.
Podatność dotyczy wyłącznie scenariuszy, w których Babel przetwarza kod dostarczony przez niezaufane źródło. Środowiska kompilujące wyłącznie własny, kontrolowany kod nie są narażone na ryzyko. Wtyczki spoza przestrzeni nazw `@babel/` mogą być podatne, jeśli korzystają z metod `path.evaluate()` lub `path.evaluateTruthy()`.
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HBabeljs Babel
APPBabeljs8.0.0< 7.23.2Babeljs Babel Helper Define Polyfill Provider
APPBabeljs< 0.4.3Babeljs Babel Plugin Polyfill Corejs2
APPBabeljs< 0.4.6Babeljs Babel Plugin Polyfill Corejs3
APPBabeljs< 0.8.5Babeljs Babel Plugin Polyfill Es Shims
APPBabeljs< 0.10.0Babeljs Babel Plugin Polyfill Regenerator
APPBabeljs< 0.5.3Babeljs Babel Plugin Transform Runtime
APPBabeljs< 7.23.2Babeljs Babel Preset Env
APPBabeljs< 7.23.2Debian
OSDebian10.011.012.0
Powiązane podatności
GNU Inetutils telnetd: ominięcie uwierzytelnienia przez zmienną USER
Sudo: eskalacja uprawnień do root poprzez opcję --chroot (CVE-2025-32463)
RCE przez deserializację PHP w Roundcube Webmail (parametr _from)
Erlang/OTP SSH — nieuwierzytelniony RCE (CVSS 10.0)
Apple WebKit: out-of-bounds write umożliwiający ucieczkę z sandbox przeglądarki