playwright-controller

PassAudited by VirusTotal on May 11, 2026.

Overview

Type: OpenClaw Skill Name: playwright-controller Version: 1.0.0 The skill is classified as suspicious due to several critical vulnerabilities, not malicious intent. The `playwright-cmd.js` file uses an absolute path (`/Users/chenkuan/...`) for a required module, which is a severe path traversal/injection vulnerability and will break the skill in most environments. Additionally, the `playwright-crawler-v3.js` module explicitly forces the Playwright browser into 'headed' (visible) mode (`headless: false`), which is an information disclosure risk if the agent processes sensitive data in a visible environment. The skill also allows arbitrary file writes to a user-specified directory (`--dir`), posing a risk for overwriting sensitive system files or achieving persistence if exploited. These flaws are vulnerabilities that could be leveraged for attacks, rather than direct evidence of malicious design.

Findings (0)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Running the command may fail or may use a different local file than the one included in the skill, making the actual executed code hard to verify.

Why it was flagged

The runnable command wrapper loads its core functions from an absolute developer-local path outside the packaged skill, instead of the included playwright-crawler-v3.js. If that path exists, the command could execute code not represented by the reviewed package; otherwise it will likely fail.

Skill content
const { fetchWithPlaywright, fetchElementAndScreenshot } = require('/Users/chenkuan/.openclaw/workspace/毕业论文/论文工程/playwright-crawler-v3.js');
Recommendation

Replace the absolute require with a relative import of the packaged file, include all helper files in the skill, and add a clear install/dependency specification for Playwright.

What this means

The skill can visit webpages and create local screenshot/text files in the chosen directory.

Why it was flagged

The skill accepts a URL and output directory, browses the page, then writes extracted content to disk. This is expected for its purpose, but it is still local file-writing and network-browsing authority.

Skill content
result = await fetchWithPlaywright(options.url, { headless: true, timeout: options.timeout, screenshotDir: options.dir }); ... fs.writeFileSync(textPath, result.content);
Recommendation

Use it only with URLs you intend to fetch and choose a safe output directory rather than protected or shared locations.

What this means

If you log into a site in the browser, the skill can capture screenshots and text from that authenticated session.

Why it was flagged

The documentation says the visible browser supports manual actions such as login. That is purpose-aligned browser automation, but it means the skill may be used on authenticated pages.

Skill content
有头模式(可见浏览器,支持手动操作如登录)
Recommendation

Avoid using it on sensitive accounts unless you are comfortable saving the resulting page content locally.

What this means

Private webpage content or misleading webpage text may remain on disk after the command finishes.

Why it was flagged

Extracted webpage text is written to a local file for later use. This is expected behavior, but stored retrieved content can include sensitive data or untrusted webpage text.

Skill content
fs.writeFileSync(textPath, result.content);
Recommendation

Review and delete generated files when they contain sensitive data, and treat extracted webpage text as untrusted input.