npm / playwright-core / 1.65.0-alpha-2026-10-22
playwright-core 1.65.0-alpha-2026-10-22
- Source
- https://github.com/microsoft/playwright
- Commit scanned
ca7ca36145b8- Directory
packages/playwright-core- Compared with
66070a1eaa0b(0 signals introduced since)- Files
- 370 scanned, 49 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 26 info
- Scan time
- 18.0 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 17 of 17 warn and critical signals; 17 demoted to info.
- Disclude version
- 4.1.0
- Scanned (UTC)
- 2026-10-22 14:14
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_chrome_beta_mac.sh:13:1likely benign Invokes Chrome Beta's bundled binary with --version using space-escaped path segments.Reasoning
The backslashes escape the spaces in the macOS app bundle path, which is the normal way to write such a path in bash. Nothing hides the command.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_msedge_beta_mac.sh:11:1likely benign Runs Microsoft Edge Beta's binary with --version using escaped spaces in the path.Reasoning
The escapes are only the spaces in the Edge Beta app path, a standard shell idiom. The script removes a temp pkg and then runs the app's --version.
-
info
warn→ info by reviewobfuscated-command-namepackages/playwright-core/bin/reinstall_msedge_dev_mac.sh:11:1likely benign Runs Microsoft Edge Dev's binary with --version using escaped spaces in the path.Reasoning
The same benign space-escaping of the Edge Dev app path, in a reinstall helper script.
-
continue; const packageJSON = ; const version = packageJSON.; dirToVersion.;likely benign Loads a browser reference directory's package.json to read its version.Reasoning
The require target is path.join of a browser reference directory plus 'package.json', a plain metadata read with no attacker-controlled code path visible.
-
-
-
; ; ;likely benign Requires the package's own package.json via a computed path.Reasoning
The path is built from the package root and 'package.json', a standard way to load the package's own manifest.
-
# 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 evals the expanded JVM options to split them into arguments.Reasoning
This eval of a set -- $(...) expansion is the standard Gradle wrapper idiom for splitting JVM options. The file is the stock wrapper script.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/android/driver/gradlew:240:1exec "$JAVACMD" "$@"likely benign Gradle wrapper execs the resolved Java binary with the forwarded arguments.Reasoning
exec of $JAVACMD with the args is the standard final launch line of the Gradle wrapper, not a dropper.
-
-
-
likely benign Decodes base64 payloads into File objects for drop-event simulation.
Reasoning
atob decodes base64 file payloads into bytes to build a File for a simulated drag-and-drop. The decoded data becomes a file object, not executed code.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/javascript.ts:315:7likely benign Parses an expression with the Function constructor to test whether it is valid as a value.Reasoning
new Function on '(' + expression + ')' is used only as a syntax probe to decide how to serialize an evaluate argument; the function is never invoked. This is a common browser-automation pattern.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/server/javascript.ts:324:9likely benign Second Function-constructor syntax probe in the serialization fallback path.Reasoning
Same syntax-probe use of the Function constructor in a fallback branch during argument serialization; nothing is executed.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/server/registry/index.ts:1201:30linkTarget = .; const browsersJSON = ; const descriptors = ;likely benign Reads browsers.json from a symlink-resolved browser directory.Reasoning
The require path is joined from a symlink target and 'browsers.json', a local config read from the browser cache directory, with no sign of attacker-controlled input.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/server/registry/index.ts:1396:38; ;likely benign Loads the bundled browsers.json to construct the registry.Reasoning
This requires browsers.json from the package root, the package's own bundled registry config.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/tools/backend/evaluate.ts:50:25evalResult = await locator..likely benign Evaluates a caller-supplied JavaScript expression inside a locator's page context.Reasoning
eval of a template-wrapped expression runs in the page context, which is the purpose of an evaluate tool. The risk comes from the caller-supplied expression, not from hidden or obfuscated code, so this reads as a designed feature with a dangerous surface.
-
info
critical→ info by reviewdynamic-executionpackages/playwright-core/src/tools/backend/evaluate.ts:57:25evalResult = await tab..likely benign Evaluates a caller-supplied JavaScript expression on the page for the evaluate tool.Reasoning
Same by-design eval of a caller-supplied expression in the page evaluate path. It is a legitimate, if powerful, automation feature rather than concealed malware.
-
likely benign Loads a user-configured init-page module via a non-literal require and invokes its default export with the page.
Reasoning
The require specifier is the initPage variable, which appears to be a user-configured init-page script path that is then called with the page. That matches a documented extensibility feature. The risk is that a config or environment value could load arbitrary code, but the snippet alone shows no sign of a hidden payload, encoding, or attacker-controlled source.
-
info
warn→ info by reviewdynamic-importpackages/playwright-core/src/tools/cli-client/program.ts:78:16const clientInfo = ; const help = ; const argv = process.argv.;likely benign Requires a bundled help.json file through a path helper with constant segments.Reasoning
The specifier is built by libPath from fixed string literals ('tools', 'cli-client', 'help.json') and points to a bundled JSON help file. The non-literal form is only a bundler-style path helper and does not load attacker-controlled code.
-
: Promise<playwright.>likely benign Dynamically requires a Playwright library named by the connection descriptor to connect to a browser across versions.Reasoning
The module name comes from descriptor.playwrightLib, so the code loads a Playwright library version chosen by the descriptor, then uses browserName to pick a browser type and connects. This fits a cross-version connection feature. The untrusted-input risk depends on where the descriptor comes from, which the snippet does not show, so a doubt remains.
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.
&&