Skip to content

Bundled chrome-devtools-mcp 0.19.0 (browser agent) ships fast-uri 3.1.0, ip-address 10.1.0 and ws 8.19.0, invisible to npm audit #30127

Open

Description

@taxor03

What happened?

While scanning published npm packages for bundled third-party code we found that @google/gemini-cli@0.66.0 (bundle/bundled/chrome-devtools-mcp.mjs) and @google/gemini-cli-core@0.66.0 (dist/bundled/chrome-devtools-mcp.mjs, plus dist/bundled/third_party/index.js) ship the browser agent's MCP server built from chrome-devtools-mcp 0.19.0 (VERSION = "0.19.0", line 229010). The two .mjs files are byte-identical. The bundle comes from the pinned devDependency "chrome-devtools-mcp": "0.19.0" in packages/core/package.json (still 0.19.0 on main) via bundle:browser-mcp, and it inlines these versions (also listed in dist/bundled/third_party/THIRD_PARTY_NOTICES):

chrome-devtools-mcp is a devDependency and the bundle declares nothing, so npm audit and SCA tools cannot flag these copies for you or for Gemini CLI users. The Dependabot bumps of chrome-devtools-mcp (#27828 through #28993) were closed automatically, and the fast-uri / ip-address / ws Dependabot PRs touch other lockfile copies, not this bundle.

The SECURITY.md routes security issues to g.co/vulnz. We are opening a regular issue instead because we did not find a way for these copies to lead to an exploit through Gemini CLI:

  • fast-uri is used only by the bundled ajv for schema $id/$ref resolution.
  • ip-address is used only by the socks proxy client, with addresses from configuration.
  • ws is puppeteer's CDP transport to the Chrome endpoint the agent launches or the user configures. close() is never called with a TypedArray reason.

Because the copies ship where dependency audits cannot see them, they are easy to miss. We would suggest updating when convenient.

Checked against the published tarballs on 2026-11-04 (npm latest):

npm pack @google/gemini-cli-core@0.66.0 && tar xzf google-gemini-cli-core-0.66.0.tgz
F=package/dist/bundled/chrome-devtools-mcp.mjs
grep -n 'VERSION = "0\.19\.0"' $F
grep -A2 -E '^Name: (fast-uri|ip-address|ws)$' package/dist/bundled/third_party/THIRD_PARTY_NOTICES | grep Version
grep -c 'reescapeHostDelimiters' $F
grep -c 'maxFragments' $F

Output:

229010:    VERSION = "0.19.0";
Version: 3.1.0
Version: 10.1.0
Version: 8.19.0
0
0

reescapeHostDelimiters (fast-uri 3.1.2) and the maxFragments limit (ws 8.21.0) are absent. @google/gemini-cli@0.66.0 bundle/bundled/chrome-devtools-mcp.mjs has the same SHA-256 as the core file.

What did you expect to happen?

The bundled browser MCP server carries fast-uri >= 3.1.9, ip-address >= 10.7.4 and ws >= 8.21.0.

Client information

Client Information

Not applicable: this is a static check of the published npm tarballs (@google/gemini-cli@0.66.0, @google/gemini-cli-core@0.66.0), not a runtime issue.

Login information

Not applicable.

Anything else we need to know?

Suggested fix: update the chrome-devtools-mcp devDependency in packages/core/package.json to a current release, rebuild bundle:browser-mcp, and check the versions in the new THIRD_PARTY_NOTICES. chrome-devtools-mcp 1.12.0 no longer bundles ip-address and has ws >= 8.21.0. Its main lockfile resolves fast-uri 3.1.9 since ChromeDevTools/chrome-devtools-mcp#3346, so the next release should cover fast-uri as well.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    status/need-triageIssues that need to be triaged by the triage automation.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions