# AI Pen Testing Chrome Extension

> Source: <https://github.com/brianhama/in-browser-sec-audit>
> Published: 2026-08-14 00:00:59+00:00

A Chrome extension (Manifest V3) that, **when enabled for a tab**, captures every
**first-party** JavaScript file the site loads and sends it to an OpenAI model
with a prompt tuned to surface **server-side attack vectors** — API endpoints,
injectable parameters, SSRF/IDOR/SQLi/auth-bypass surface, leaked secrets — plus
concrete **routes for further testing**. Results render in a
dedicated **Security Audit** panel in Chrome DevTools.

I built this tool because it automates the workflow that I usually use to kick off a pentest for a website. It doesn't do anything too fancy, but it saves me a lot of time and I thought others might find it useful as well. Feel free to submit pull requests.

**Per-tab toggle** from the toolbar (and from the panel). Off by default; the content script stays completely idle until you enable a tab.**First-party only.** Third-party CDNs/analytics are ignored. Scope is configurable: same-origin (default), same-hostname, or same-site (eTLD+1, approx).**Server-side focus.** The default prompt treats client JS as a map of the backend and hunts for: reconstructed API/GraphQL/RPC endpoints, injection reaching the server (SQLi/NoSQLi/command/SSTI/XXE), SSRF, IDOR & broken access control, mass assignment, auth weaknesses, path traversal, insecure deserialization, business-logic gaps, and secret/config leakage.**DevTools panel** with per-script cards: overall risk, reconstructed endpoint table, detected secrets, and findings (severity, confidence, CWE, evidence,**testing routes**, and a fix).** Configurable**API key, model (picker + custom id), OpenAI-compatible base URL, concurrency, chunk size, temperature, token budget, inline-script analysis, skip patterns, and a custom system prompt.**Extras:** content-hash result cache (dedupes identical bundles), large-file chunking, a paste-a-snippet analyzer, severity/text filtering, and Markdown/JSON report export.

- Open
`chrome://extensions`

, enable**Developer mode**. **Load unpacked**→ select this folder.

- Open DevTools (⌥⌘I / F12)
**Security Audit** tab- gear icon → set your OpenAI
**API key** and model **Save**.

- Open a site you're authorized to test. Click the toolbar icon →
**Audit this tab**. - Open DevTools (⌥⌘I / F12)
**Security Audit** tab

A `document_start`

content script (all frames) watches for `<script>`

elements
and `resource`

performance entries, fetches first-party script bodies
(same-origin `fetch`

, so no CORS issues), hashes them, and forwards them to the
background service worker. The worker runs a bounded-concurrency queue of OpenAI
calls, caches by content hash, and streams results to the panel over a
long-lived port. Because the DevTools panel occupies the tab's debugging
channel, capture deliberately avoids `chrome.debugger`

and relies on
content-script fetches instead.

| Permission | Why |
|---|---|
`storage` |
Settings + result cache (`local` ); per-tab runtime state (`session` ). |
`tabs` |
Resolve the active tab / its origin; message content scripts. |
`scripting` |
Inject the content script into a tab that was loaded before enabling. |
`activeTab` |
Grants host access to the current tab on the toolbar click, so enabling a pre-existing tab can inject and start immediately. |
`webNavigation` |
Distinguish real document commits from SPA history/hash changes, so in-app navigation doesn't wipe results. |
`host_permissions: api.openai.com` |
Call the OpenAI API from the background/panel. |
`optional_host_permissions` |
Requested on demand: the page origin when you enable, a custom base-URL host, and broad host access when you pick a non-origin scope. |
content scripts on `http(s)://*` |
Observe scripts on the site under test (idle unless enabled; only the top frame and same-origin subframes ever capture). |

- Your API key is stored in
`chrome.storage.local`

on your machine and sent only to the endpoint you configure (default`api.openai.com`

). - First-party script
**source code** is sent to that endpoint for analysis. Don't enable this on sites whose code you may not submit to a third party. - Script bodies are fetched with
`credentials: 'omit'`

, so the authenticated / per-user variant of a dynamic script endpoint (which can embed session tokens or PII) is never pulled and forwarded. - Only the
**top frame and same-origin subframes** capture — scripts inside cross-origin third-party iframes are never read or sent.

```
manifest.json
background/service-worker.js   coordination, queue, badge, streaming
content/content-script.js      first-party JS capture (idle until enabled)
popup/                         toolbar enable/disable + quick stats
devtools/                      panel registration + full audit UI
lib/                           constants, storage, prompt, OpenAI client
icons/                         icons
```

- No build step: ES modules load directly (background is a module worker; popup
and panel pages use
`<script type="module">`

; the content script is a standalone classic script). - Syntax check:
`node --check`

on each`.js`

, or run the checks in`tools/`

(see below).

This tool is for legit security testing and research and we are not responsible for any misuse for illegal or unauthorized purposes!
