npm / playwright-core / 1.65.0-alpha-2026-10-17
playwright-core 1.65.0-alpha-2026-10-17
- Source
- https://github.com/microsoft/playwright
- Commit scanned
6bbe2475ba79- Directory
packages/playwright-core- Compared with
034f230cc68b(0 signals introduced since)- Files
- 370 scanned, 49 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 1 warn · 25 info
- Scan time
- 17.0 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 17 of 17 warn and critical signals; 16 demoted to info.
- Disclude version
- 4.0.0
- Scanned (UTC)
- 2026-10-17 23:56
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
likely benign Dynamically requires a user-configured init-page module and calls its default export with the page.
Reasoning
The require target is a variable, initPage, inside a try block that calls the default export with the page. This looks like a config-driven init-script hook. The specifier is not shown as attacker-controlled, but it is loaded from a path the tool user supplies, so a doubt remains.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_chrome_beta_mac.sh:13:1likely benign Invokes Chrome Beta's binary by its escaped .app path to print its version.Reasoning
The backslash-escaped spaces in the macOS application bundle path (Google Chrome Beta.app) are the ordinary shell way to quote a path with spaces. The command is a plain version check on a known app bundle.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_msedge_beta_mac.sh:11:1likely benign Runs Edge Beta's binary by its escaped .app path after clearing a temp installer package.Reasoning
The escaped spaces in the Microsoft Edge Beta.app path are standard shell quoting. The script removes a temporary package and runs a version check on the installed app, which is typical installer-script behaviour.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_msedge_dev_mac.sh:11:1likely benign Runs Edge Dev's binary by its escaped .app path to print its version.Reasoning
Same pattern as the Edge Beta script: escaped spaces in the app bundle path, followed by a version check. Nothing in the snippet hides a different command.
-
continue; const packageJSON = ; const version = packageJSON.; dirToVersion.;likely benign Reads the package.json version from a browser reference directory.Reasoning
The require target is path.join of a browser reference directory with 'package.json', a fixed filename loaded from a local install directory. This is a normal way to read a version and not a hidden payload.
-
-
-
; ; ;likely benign Loads the package's own package.json from its computed root directory.Reasoning
The file requires package.json from the package root computed from __dirname. This is the standard way a package reads its own metadata.
-
# Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) -
# Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) -
# Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) -
# For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -
# For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) -
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/android/driver/gradlew:233:1eval "set -- $( printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | xargs -n1 |likely benign Gradle wrapper line that evals JVM option variables to rebuild the argument list.Reasoning
This is the standard Gradle wrapper idiom: eval over a shell-split argument list built from DEFAULT_JVM_OPTS, JAVA_OPTS and GRADLE_OPTS. It is a well-known, widely shipped script, and the expression is local configuration rather than remote input.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/android/driver/gradlew:240:1exec "$JAVACMD" "$@"likely benign Final exec of the resolved Java binary with the wrapper's arguments.Reasoning
exec of $JAVACMD with the forwarded arguments is the normal final step of the stock Gradle wrapper. JAVACMD is resolved from JAVA_HOME or the PATH earlier in the script.
-
-
-
likely benign Decodes base64 file payloads into a File for a synthetic drop event.
Reasoning
atob decodes base64 file contents into bytes that are wrapped in a File and added to a DataTransfer. This is how drag-and-drop file payloads are built in a browser automation library. It does not execute the decoded data.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/javascript.ts:315:7likely benign Syntax-check of a serialized expression by constructing a Function, with a fallback for shorthand functions.Reasoning
new Function is used here only to test whether an expression parses, as part of serializing a user-supplied evaluate argument. It is a syntax probe inside a Playwright-style evaluate helper, not a covert execution path.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/javascript.ts:324:9likely benign Fallback syntax probe for a non-trivial serialized expression.Reasoning
The second new Function call is a parse-only fallback in the same serialization logic. The code comments explain the purpose, and the expression comes from the caller's evaluate request.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/server/registry/index.ts:1201:30linkTarget = .; const browsersJSON = ; const descriptors = ;likely benign Loads browsers.json from a registry link target to read browser descriptors.Reasoning
The require path is browsers.json inside a directory resolved from a symlink target that the registry itself manages. It is read as JSON config for browser descriptors, which is expected for this module.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/server/registry/index.ts:1396:38; ;likely benign Loads the packaged browsers.json to construct the browser registry.Reasoning
The module loads browsers.json from the package root to build the registry at startup. The path is a fixed filename under the package's own directory.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/tools/backend/evaluate.ts:50:25evalResult = await locator..likely benign Evaluates a user-supplied JavaScript expression in the element's page context.Reasoning
The eval runs a caller-supplied expression inside the page context, which is the purpose of this evaluate tool. It is not hidden or obfuscated, but eval of external input is a real risk surface, so this is not fully clean.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/tools/backend/evaluate.ts:57:25evalResult = await tab..likely benign Evaluates a user-supplied JavaScript expression in the page context.Reasoning
Same design as the element evaluate: eval of the caller's expression within the page, used as the tool's intended function. Intent is visible in the code and not concealed.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/tools/cli-client/program.ts:78:16const clientInfo = ; const help = ; const argv = process.argv.;dismissed Loads a bundled help.json resource through a path helper built from fixed string segments.Reasoning
The specifier is libPath applied to fixed string literals pointing to a bundled help.json file. This is a static resource load with a non-literal form only because of a helper call, and it is a false positive.
-
: Promise<playwright.>likely benign Dynamically loads a Playwright library chosen by a browser descriptor to connect across versions.Reasoning
The module path comes from descriptor.playwrightLib, which lets the tool load a Playwright build matching a given browser version. This is a known pattern for cross-version compatibility. The risk depends on whether the descriptor can be attacker-controlled, which the snippet does not show.
Reproduce This Scan
Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
&&