MCP Scanner
ScanLeaderboardDocsSign in
Home/executeautomation/mcp-playwright/Results
0F

mcp-playwright

executeautomation/mcp-playwright

76 files · 103 findings

Share GitHub SARIF JSON
1 critical61 high28 medium13 low
Tool Poisoning1 issue
Command Injection2 issues
Path Traversal6 issues
SSRF6 issues
Credential Theftclean
Excessive Permissionsclean
Missing Auth22 issues
Supply Chain
Supply Chain8

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/docusaurus-gh-pages.yml:31
uses: actions/checkout@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

Command Injection2

child_process import with unsanitized usage

high

Direct usage of child_process module methods with variable arguments may allow command injection.

run-tests.js:1
const { execSync } = require('child_process');
How to fix

Use execFile with explicit argument arrays instead of child_process with string commands.

Logging Deficiency14

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

run-tests.js:4
console.log('Running tests...');
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Path Traversal6

Windows-style path traversal patterns

high

Backslash-based directory traversal patterns targeting Windows file systems.

src/http-server.ts:19
process.stdout.write('\n🚀 Starting Playwright MCP Server (HTTP Mode)...\n');
How to fix

Normalize path separators and apply traversal checks for both forward and backslashes.

SSRF6

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

src/http-server.ts:226
sse: `http://localhost:${port}/sse`,
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Missing Auth22

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/http-server.ts:200
app.get('/sse', (req, res) => handleSseConnection('/sse', '/messages', req, res));
How to fix

Add authentication middleware to all routes that access or modify data.

Insecure Communication2

Missing HSTS headers on HTTP server

medium

An HTTP server is created without configuring Strict-Transport-Security (HSTS) headers. Without HSTS, browsers may allow downgrade attacks from HTTPS to HTTP.

src/http-server.ts:221
const httpServer = app.listen(port, host, () => {
How to fix

Add Strict-Transport-Security headers to your server responses. Use a middleware such as helmet to set HSTS automatically.

Data Exfiltration42

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/rate-limiting/types.ts:57
SCREENSHOT = 'screenshot',
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Tool Poisoning1

HTML comment injection in tool description

critical

HTML comments in tool descriptions may contain hidden instructions intended to influence LLM reasoning.

src/tools/browser/visiblePage.ts:187
output = output.slice(0, maxLength) + '\n<!-- Output truncated due to size limits -->';
How to fix

Remove HTML comments from description strings. Use source code comments instead.

8 issues
Rug Pullclean
Data Exfiltration42 issues
Insecure Communication2 issues
Excessive Data Exposureclean
Logging Deficiency14 issues
Runtime Tool Poisoningclean
Shadow MCP Serverclean

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/docusaurus-gh-pages.yml:39
uses: actions/upload-pages-artifact@v3
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/docusaurus-gh-pages.yml:53
uses: actions/deploy-pages@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/node.js.yml:23
- uses: actions/checkout@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/node.js.yml:25
uses: actions/setup-node@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/test.yml:12
- uses: actions/checkout@v3
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/test.yml:15
uses: actions/setup-node@v3
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

GitHub Actions with unpinned actions

high

Using GitHub Actions with branch references instead of SHA pins enables supply chain attacks.

.github/workflows/test.yml:36
uses: actions/upload-artifact@v4
How to fix

Pin GitHub Actions to full commit SHAs: uses: actions/checkout@abc123...

child_process import with unsanitized usage

high

Direct usage of child_process module methods with variable arguments may allow command injection.

src/toolHandler.ts:7
import { spawn } from 'child_process';
How to fix

Use execFile with explicit argument arrays instead of child_process with string commands.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

run-tests.js:6
console.log(output);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

run-tests.js:9
console.log(error.stdout);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

src/http-server.ts:233
console.log(`
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

src/logging/logger.ts:238
console.log(message);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

src/monitoring/system.ts:195
console.log(`Monitoring HTTP server listening on port ${this.actualPort}`);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

src/monitoring/system.ts:196
console.log(`Health check: http://localhost:${this.actualPort}/health`);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

src/monitoring/system.ts:197
console.log(`Metrics: http://localhost:${this.actualPort}/metrics`);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

src/monitoring/system.ts:222
console.log('Monitoring HTTP server stopped');
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Disabled or suppressed security logging

medium

Detected patterns that disable, silence, or suppress logging or audit trails. Disabling security logging can mask malicious activity and hinder incident investigation.

src/tools.ts:228
description: "Whether to clear logs after retrieval (default: false)"
How to fix

Ensure security-related logging is always enabled in production. Never suppress audit trails or security event logs.

Sensitive data in log output

high

Detected console logging statements that reference sensitive fields such as password, secret, token, or API keys. Logging sensitive data can expose credentials in log files, monitoring systems, and log aggregation services.

src/tools/api/requests.ts:59
console.warn('Both token and Authorization header provided. Custom Authorization header will override token.');
How to fix

Remove sensitive data from log statements. If you must reference sensitive fields, redact or mask them before logging.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

test-import.js:5
console.log('Imports successful!');
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

test-import.js:6
console.log('setupRequestHandlers:', typeof setupRequestHandlers);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Console.log in production code

low

Detected console.log() usage in non-test source code. Console.log is not appropriate for production logging as it lacks log levels, structured output, and proper log management.

test-import.js:7
console.log('handleToolCall:', typeof handleToolCall);
How to fix

Replace console.log with a structured logging library (e.g., winston, pino) that supports log levels and proper log management.

Windows-style path traversal patterns

high

Backslash-based directory traversal patterns targeting Windows file systems.

src/index.ts:66
process.stdout.write(`\n⏳ Initializing Playwright MCP Server on port ${options.port}...\n`);
How to fix

Normalize path separators and apply traversal checks for both forward and backslashes.

fs operations without path sanitization

medium

File system operations using variables without prior path validation or sanitization may allow traversal attacks.

src/logging/logger.ts:56
fs.mkdirSync(logDir, { recursive: true });
How to fix

Add path sanitization before all fs operations. Validate paths against an allowlist of permitted directories.

fs operations without path sanitization

medium

File system operations using variables without prior path validation or sanitization may allow traversal attacks.

src/logging/logger.ts:279
fs.unlinkSync(oldFile); // Delete oldest file
How to fix

Add path sanitization before all fs operations. Validate paths against an allowlist of permitted directories.

path.join/resolve with user-controlled input

low

Using path.join or path.resolve with variables from user input without validation can lead to directory traversal.

src/tools/browser/output.ts:16
path: path.resolve(args.outputPath || '.', filename),
How to fix

Sanitize user input before passing to path.join/resolve. Use path.normalize() and check for '..' sequences.

fs operations without path sanitization

medium

File system operations using variables without prior path validation or sanitization may allow traversal attacks.

src/tools/browser/screenshot.ts:46
fs.mkdirSync(downloadsDir, { recursive: true });
How to fix

Add path sanitization before all fs operations. Validate paths against an allowlist of permitted directories.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

src/http-server.ts:227
messages: `http://localhost:${port}/messages`,
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

src/http-server.ts:228
mcp: `http://localhost:${port}/mcp`,
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

src/http-server.ts:229
health: `http://localhost:${port}/health`,
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

src/http-server.ts:254
"url": "http://localhost:${port}/mcp",
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Request to localhost or loopback address

high

Requests targeting 127.0.0.1, localhost, or [::1] may access internal services not intended to be exposed.

src/index.ts:47
"url": "http://localhost:8931/mcp",
How to fix

Block requests to localhost and loopback addresses. Implement URL validation that rejects 127.x.x.x and ::1.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/http-server.ts:201
app.post('/messages', (req, res) => handlePostMessage('/messages', req, res));
How to fix

Add authentication middleware to all routes that access or modify data.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/http-server.ts:204
app.get('/mcp', (req, res) => handleSseConnection('/mcp', '/mcp', req, res));
How to fix

Add authentication middleware to all routes that access or modify data.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/http-server.ts:205
app.post('/mcp', (req, res) => handlePostMessage('/mcp', req, res));
How to fix

Add authentication middleware to all routes that access or modify data.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/http-server.ts:208
app.get('/health', (req, res) => {
How to fix

Add authentication middleware to all routes that access or modify data.

Missing rate limiting on endpoint

medium

API endpoints without rate limiting are vulnerable to brute force and denial of service.

src/http-server.ts:200
app.get('/sse', (req, res) => handleSseConnection('/sse', '/messages', req, res));
How to fix

Add rate limiting middleware to all public API endpoints.

Missing rate limiting on endpoint

medium

API endpoints without rate limiting are vulnerable to brute force and denial of service.

src/http-server.ts:201
app.post('/messages', (req, res) => handlePostMessage('/messages', req, res));
How to fix

Add rate limiting middleware to all public API endpoints.

Missing rate limiting on endpoint

medium

API endpoints without rate limiting are vulnerable to brute force and denial of service.

src/http-server.ts:204
app.get('/mcp', (req, res) => handleSseConnection('/mcp', '/mcp', req, res));
How to fix

Add rate limiting middleware to all public API endpoints.

Missing rate limiting on endpoint

medium

API endpoints without rate limiting are vulnerable to brute force and denial of service.

src/http-server.ts:205
app.post('/mcp', (req, res) => handlePostMessage('/mcp', req, res));
How to fix

Add rate limiting middleware to all public API endpoints.

Missing rate limiting on endpoint

medium

API endpoints without rate limiting are vulnerable to brute force and denial of service.

src/http-server.ts:208
app.get('/health', (req, res) => {
How to fix

Add rate limiting middleware to all public API endpoints.

No CSRF protection on state-changing endpoint

medium

POST/PUT/DELETE endpoints without CSRF tokens are vulnerable to cross-site request forgery.

src/http-server.ts:201
app.post('/messages', (req, res) => handlePostMessage('/messages', req, res));
How to fix

Implement CSRF protection using tokens or SameSite cookies.

No CSRF protection on state-changing endpoint

medium

POST/PUT/DELETE endpoints without CSRF tokens are vulnerable to cross-site request forgery.

src/http-server.ts:205
app.post('/mcp', (req, res) => handlePostMessage('/mcp', req, res));
How to fix

Implement CSRF protection using tokens or SameSite cookies.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/monitoring/system.ts:171
this.app.get('/health', (req: Request, res: Response) => {
How to fix

Add authentication middleware to all routes that access or modify data.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/monitoring/system.ts:179
this.app.get('/metrics', (req: Request, res: Response) => {
How to fix

Add authentication middleware to all routes that access or modify data.

Server route without authentication middleware

medium

HTTP endpoints defined without authentication middleware may be accessible to unauthorized users.

src/monitoring/system.ts:185
this.app.get('/ready', (req: Request, res: Response) => {
How to fix

Add authentication middleware to all routes that access or modify data.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools.ts:277
token: { type: "string", description: "Bearer token for authorization" },
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools.ts:295
token: { type: "string", description: "Bearer token for authorization" },
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools.ts:313
token: { type: "string", description: "Bearer token for authorization" },
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools.ts:331
token: { type: "string", description: "Bearer token for authorization" },
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools.ts:348
token: { type: "string", description: "Bearer token for authorization" },
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools/api/requests.ts:40
* @param token Optional Bearer token for authorization
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing OAuth scope validation

medium

OAuth-protected endpoints that don't validate scopes may allow unauthorized actions.

src/tools/api/requests.ts:53
headers['Authorization'] = `Bearer ${token}`;
How to fix

Validate OAuth scopes on every endpoint. Check that the token has required permissions.

Missing HSTS headers on HTTP server

medium

An HTTP server is created without configuring Strict-Transport-Security (HSTS) headers. Without HSTS, browsers may allow downgrade attacks from HTTPS to HTTP.

src/monitoring/system.ts:190
this.httpServer = this.app!.listen(port, () => {
How to fix

Add Strict-Transport-Security headers to your server responses. Use a middleware such as helmet to set HSTS automatically.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/requestHandler.ts:54
uri: `screenshot://${name}`,
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/requestHandler.ts:79
if (uri.startsWith("screenshot://")) {
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/requestHandler.ts:81
const screenshot = getScreenshots().get(name);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/requestHandler.ts:82
if (screenshot) {
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/requestHandler.ts:87
blob: screenshot,
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:73
let screenshotTool: ScreenshotTool;
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:413
if (!screenshotTool) screenshotTool = new ScreenshotTool(server);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:413
if (!screenshotTool) screenshotTool = new ScreenshotTool(server);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:570
case "playwright_screenshot":
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:571
return await screenshotTool.execute(args, context);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:725
* Get screenshots
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/toolHandler.ts:728
return screenshotTool?.getScreenshots() ?? new Map();
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:96
name: "playwright_screenshot",
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:97
description: "Take a screenshot of the current page or a specific element",
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:101
name: { type: "string", description: "Name for the screenshot" },
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:102
selector: { type: "string", description: "CSS selector for element to screenshot" },
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:105
storeBase64: { type: "boolean", description: "Store screenshot in base64 format (default: true)" },
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:106
fullPage: { type: "boolean", description: "Store screenshot of the entire page (default: false)" },
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:107
savePng: { type: "boolean", description: "Save screenshot as PNG file (default: false)" },
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools.ts:503
"playwright_screenshot",
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/index.ts:2
export * from './screenshot.js';
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:11
* Tool for taking screenshots of pages or elements
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:14
private screenshots = new Map<string, string>();
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:17
* Execute the screenshot tool
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:21
const screenshotOptions: any = {
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:37
screenshotOptions.element = element;
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:42
const filename = `${args.name || 'screenshot'}-${timestamp}.png`;
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:50
screenshotOptions.path = outputPath;
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:52
const screenshot = await page.screenshot(screenshotOptions);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:52
const screenshot = await page.screenshot(screenshotOptions);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:52
const screenshot = await page.screenshot(screenshotOptions);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:53
const base64Screenshot = screenshot.toString('base64');
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:59
this.screenshots.set(args.name || 'screenshot', base64Screenshot);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:59
this.screenshots.set(args.name || 'screenshot', base64Screenshot);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:64
messages.push(`Screenshot also stored in memory with name: '${args.name || 'screenshot'}'`);
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:72
* Get all stored screenshots
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/browser/screenshot.ts:75
return this.screenshots;
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/codegen/generator.ts:73
case 'playwright_screenshot':
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/codegen/generator.ts:121
// Take screenshot
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/codegen/generator.ts:122
await page.screenshot({ path: '${name}.png'${optionsStr} });`;
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.

Clipboard or screenshot access for exfiltration

high

Accessing clipboard contents or taking screenshots may be used to capture and exfiltrate sensitive data.

src/tools/index.ts:8
"playwright_screenshot",
How to fix

Remove clipboard/screenshot access unless explicitly required by the tool's stated purpose.