coding-agent-audit 0.2.1__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {coding_agent_audit-0.2.1/src/coding_agent_audit.egg-info → coding_agent_audit-0.3.1}/PKG-INFO +72 -3
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/README.md +68 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/pyproject.toml +7 -3
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/agentaudit/__init__.py +1 -1
- coding_agent_audit-0.3.1/src/agentaudit/mcp_server.py +87 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1/src/coding_agent_audit.egg-info}/PKG-INFO +72 -3
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/coding_agent_audit.egg-info/SOURCES.txt +4 -1
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/coding_agent_audit.egg-info/entry_points.txt +1 -0
- coding_agent_audit-0.3.1/src/coding_agent_audit.egg-info/requires.txt +1 -0
- coding_agent_audit-0.3.1/tests/test_mcp_server.py +29 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/LICENSE +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/setup.cfg +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/agentaudit/checks.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/agentaudit/cli.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/agentaudit/configscan.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/agentaudit/findings.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/agentaudit/iocs.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/coding_agent_audit.egg-info/dependency_links.txt +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/coding_agent_audit.egg-info/top_level.txt +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/tests/test_checks.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/tests/test_cli.py +0 -0
- {coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/tests/test_configscan.py +0 -0
{coding_agent_audit-0.2.1/src/coding_agent_audit.egg-info → coding_agent_audit-0.3.1}/PKG-INFO
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coding-agent-audit
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Scan your machine for known AI-coding-assistant supply-chain backdoor indicators (Claude Code / Cursor / Windsurf extensions, MCP servers) plus risky hook/permission config patterns.
|
|
3
|
+
Version: 0.3.1
|
|
4
|
+
Summary: Scan your machine for known AI-coding-assistant supply-chain backdoor indicators (Claude Code / Cursor / Windsurf extensions, MCP servers) plus risky hook/permission config patterns. Usable as a CLI or as an MCP server.
|
|
5
5
|
Author-email: StackScribe AI <survivalagent320@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/stackscribe-ai/coding-agent-audit
|
|
8
8
|
Project-URL: Further reading, https://stackscribe-ai.github.io/
|
|
9
|
-
Keywords: security,supply-chain,mcp,claude-code,ai-agents,ioc-scanner
|
|
9
|
+
Keywords: security,supply-chain,mcp,claude-code,ai-agents,ioc-scanner,mcp-server
|
|
10
10
|
Classifier: Development Status :: 4 - Beta
|
|
11
11
|
Classifier: Environment :: Console
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
@@ -16,10 +16,13 @@ Classifier: Topic :: Security
|
|
|
16
16
|
Requires-Python: >=3.9
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENSE
|
|
19
|
+
Requires-Dist: mcp>=1.2.0
|
|
19
20
|
Dynamic: license-file
|
|
20
21
|
|
|
21
22
|
# coding-agent-audit
|
|
22
23
|
|
|
24
|
+
<!-- mcp-name: io.github.stackscribe-ai/coding-agent-audit -->
|
|
25
|
+
|
|
23
26
|
A small, open-source CLI that scans your machine for:
|
|
24
27
|
|
|
25
28
|
1. **Known indicators of compromise (IOCs)** from publicly documented
|
|
@@ -119,6 +122,68 @@ none of the *currently known, documented* patterns matched. The config
|
|
|
119
122
|
heuristics will produce false positives on legitimate, intentional setups
|
|
120
123
|
— read the detail line before acting.
|
|
121
124
|
|
|
125
|
+
## MCP server (run it from inside Claude Desktop / Claude Code)
|
|
126
|
+
|
|
127
|
+
Instead of a terminal, you can run both scans as MCP tools directly inside
|
|
128
|
+
any MCP client. Add this to your client's MCP config (e.g. Claude Desktop's
|
|
129
|
+
`claude_desktop_config.json`, or via `claude mcp add`):
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"coding-agent-audit": {
|
|
135
|
+
"command": "uvx",
|
|
136
|
+
"args": ["--from", "coding-agent-audit", "agent-audit-mcp"]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
(No `uv`? `pip install coding-agent-audit` then use `"command": "agent-audit-mcp"`
|
|
143
|
+
with no `args`.) This exposes two tools, `scan_for_known_backdoors` and
|
|
144
|
+
`scan_mcp_config`, so you can just ask your assistant "scan my machine for
|
|
145
|
+
AI coding assistant backdoors" and read the result in the chat — same
|
|
146
|
+
heuristics as the CLI above, nothing installed beyond the server itself.
|
|
147
|
+
|
|
148
|
+
## Pay-per-call API (for other AI agents / CI systems)
|
|
149
|
+
|
|
150
|
+
The config heuristics (`scan_config_dict`) are also available as an [x402](https://www.x402.org/)
|
|
151
|
+
pay-per-call HTTP API, for agents/pipelines that want to check a config
|
|
152
|
+
programmatically without installing anything:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
POST https://stackscribe-audit-x402.stackscribe-paywall-worker.workers.dev/audit
|
|
156
|
+
Content-Type: application/json
|
|
157
|
+
{"config": {<your Claude Code / MCP config JSON>}}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
No `X-PAYMENT` header → `402` with the x402 v2 price (0.02 USDC on Polygon,
|
|
161
|
+
scheme `exact`). No account, API key or KYC on either side; settlement runs
|
|
162
|
+
through the public [PayAI facilitator](https://facilitator.payai.network).
|
|
163
|
+
This only scans the JSON object you send (hooks/permissions/MCP-server
|
|
164
|
+
heuristics) - it can't do this package's filesystem IOC scan remotely.
|
|
165
|
+
Full request/response shape: `GET /openapi.json` on that URL, or the
|
|
166
|
+
[source](https://github.com/stackscribe-ai/coding-agent-audit) of the x402
|
|
167
|
+
worker. The free CLI above remains the full, unpaid alternative.
|
|
168
|
+
|
|
169
|
+
## Instant client-ready report (for humans, no install)
|
|
170
|
+
|
|
171
|
+
If you want a shareable report rather than terminal output — to attach to a
|
|
172
|
+
security questionnaire, hand to a client, or just read without installing
|
|
173
|
+
Python — paste your config at
|
|
174
|
+
[stackscribe-config-report.stackscribe-paywall-worker.workers.dev](https://stackscribe-config-report.stackscribe-paywall-worker.workers.dev/)
|
|
175
|
+
and pay 12 USDC / 24 POL on Polygon (no account, no KYC). Same heuristics as
|
|
176
|
+
`agentaudit.configscan`, delivered instantly as an executive-summary HTML/Markdown
|
|
177
|
+
report with a suggested fix per finding. The free CLI above does the same
|
|
178
|
+
scan for free; this just packages it for sharing.
|
|
179
|
+
|
|
180
|
+
## Found something (or nothing) worth knowing?
|
|
181
|
+
|
|
182
|
+
Either result is useful to us: a star on the repo
|
|
183
|
+
(https://github.com/stackscribe-ai/coding-agent-audit) tells us people are
|
|
184
|
+
actually running this, which is the only signal we have besides pip
|
|
185
|
+
download counts.
|
|
186
|
+
|
|
122
187
|
## Development
|
|
123
188
|
|
|
124
189
|
```bash
|
|
@@ -133,6 +198,10 @@ pytest
|
|
|
133
198
|
- dev.to/@slabb: ["A trojanized Claude Code extension plants an SSH backdoor: the 7-point audit for your machine"](https://dev.to/slabb/a-trojanized-claude-code-extension-plants-an-ssh-backdoor-the-7-point-audit-for-your-machine-23cj)
|
|
134
199
|
- Phorion: ["Official Claude Code Extension Compromise: Security Advisory"](https://phorion.io/blog/offical-claude-code-vsx-compromise/) — confirms the same backdoor reached the Cursor Marketplace and documents the Windows/Linux persistence mechanisms added in v0.2.0 of this tool.
|
|
135
200
|
|
|
201
|
+
## Need this for your team?
|
|
202
|
+
|
|
203
|
+
Want a human-reviewed version of this scan — your actual hooks, MCP configs and CI pipelines checked by hand, with a written report of what to fix? [Paid audit, from €149](https://stackscribe-ai.github.io/services/).
|
|
204
|
+
|
|
136
205
|
## Support
|
|
137
206
|
|
|
138
207
|
This tool is free and MIT-licensed, no strings attached. If it caught
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# coding-agent-audit
|
|
2
2
|
|
|
3
|
+
<!-- mcp-name: io.github.stackscribe-ai/coding-agent-audit -->
|
|
4
|
+
|
|
3
5
|
A small, open-source CLI that scans your machine for:
|
|
4
6
|
|
|
5
7
|
1. **Known indicators of compromise (IOCs)** from publicly documented
|
|
@@ -99,6 +101,68 @@ none of the *currently known, documented* patterns matched. The config
|
|
|
99
101
|
heuristics will produce false positives on legitimate, intentional setups
|
|
100
102
|
— read the detail line before acting.
|
|
101
103
|
|
|
104
|
+
## MCP server (run it from inside Claude Desktop / Claude Code)
|
|
105
|
+
|
|
106
|
+
Instead of a terminal, you can run both scans as MCP tools directly inside
|
|
107
|
+
any MCP client. Add this to your client's MCP config (e.g. Claude Desktop's
|
|
108
|
+
`claude_desktop_config.json`, or via `claude mcp add`):
|
|
109
|
+
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"mcpServers": {
|
|
113
|
+
"coding-agent-audit": {
|
|
114
|
+
"command": "uvx",
|
|
115
|
+
"args": ["--from", "coding-agent-audit", "agent-audit-mcp"]
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
(No `uv`? `pip install coding-agent-audit` then use `"command": "agent-audit-mcp"`
|
|
122
|
+
with no `args`.) This exposes two tools, `scan_for_known_backdoors` and
|
|
123
|
+
`scan_mcp_config`, so you can just ask your assistant "scan my machine for
|
|
124
|
+
AI coding assistant backdoors" and read the result in the chat — same
|
|
125
|
+
heuristics as the CLI above, nothing installed beyond the server itself.
|
|
126
|
+
|
|
127
|
+
## Pay-per-call API (for other AI agents / CI systems)
|
|
128
|
+
|
|
129
|
+
The config heuristics (`scan_config_dict`) are also available as an [x402](https://www.x402.org/)
|
|
130
|
+
pay-per-call HTTP API, for agents/pipelines that want to check a config
|
|
131
|
+
programmatically without installing anything:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
POST https://stackscribe-audit-x402.stackscribe-paywall-worker.workers.dev/audit
|
|
135
|
+
Content-Type: application/json
|
|
136
|
+
{"config": {<your Claude Code / MCP config JSON>}}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
No `X-PAYMENT` header → `402` with the x402 v2 price (0.02 USDC on Polygon,
|
|
140
|
+
scheme `exact`). No account, API key or KYC on either side; settlement runs
|
|
141
|
+
through the public [PayAI facilitator](https://facilitator.payai.network).
|
|
142
|
+
This only scans the JSON object you send (hooks/permissions/MCP-server
|
|
143
|
+
heuristics) - it can't do this package's filesystem IOC scan remotely.
|
|
144
|
+
Full request/response shape: `GET /openapi.json` on that URL, or the
|
|
145
|
+
[source](https://github.com/stackscribe-ai/coding-agent-audit) of the x402
|
|
146
|
+
worker. The free CLI above remains the full, unpaid alternative.
|
|
147
|
+
|
|
148
|
+
## Instant client-ready report (for humans, no install)
|
|
149
|
+
|
|
150
|
+
If you want a shareable report rather than terminal output — to attach to a
|
|
151
|
+
security questionnaire, hand to a client, or just read without installing
|
|
152
|
+
Python — paste your config at
|
|
153
|
+
[stackscribe-config-report.stackscribe-paywall-worker.workers.dev](https://stackscribe-config-report.stackscribe-paywall-worker.workers.dev/)
|
|
154
|
+
and pay 12 USDC / 24 POL on Polygon (no account, no KYC). Same heuristics as
|
|
155
|
+
`agentaudit.configscan`, delivered instantly as an executive-summary HTML/Markdown
|
|
156
|
+
report with a suggested fix per finding. The free CLI above does the same
|
|
157
|
+
scan for free; this just packages it for sharing.
|
|
158
|
+
|
|
159
|
+
## Found something (or nothing) worth knowing?
|
|
160
|
+
|
|
161
|
+
Either result is useful to us: a star on the repo
|
|
162
|
+
(https://github.com/stackscribe-ai/coding-agent-audit) tells us people are
|
|
163
|
+
actually running this, which is the only signal we have besides pip
|
|
164
|
+
download counts.
|
|
165
|
+
|
|
102
166
|
## Development
|
|
103
167
|
|
|
104
168
|
```bash
|
|
@@ -113,6 +177,10 @@ pytest
|
|
|
113
177
|
- dev.to/@slabb: ["A trojanized Claude Code extension plants an SSH backdoor: the 7-point audit for your machine"](https://dev.to/slabb/a-trojanized-claude-code-extension-plants-an-ssh-backdoor-the-7-point-audit-for-your-machine-23cj)
|
|
114
178
|
- Phorion: ["Official Claude Code Extension Compromise: Security Advisory"](https://phorion.io/blog/offical-claude-code-vsx-compromise/) — confirms the same backdoor reached the Cursor Marketplace and documents the Windows/Linux persistence mechanisms added in v0.2.0 of this tool.
|
|
115
179
|
|
|
180
|
+
## Need this for your team?
|
|
181
|
+
|
|
182
|
+
Want a human-reviewed version of this scan — your actual hooks, MCP configs and CI pipelines checked by hand, with a written report of what to fix? [Paid audit, from €149](https://stackscribe-ai.github.io/services/).
|
|
183
|
+
|
|
116
184
|
## Support
|
|
117
185
|
|
|
118
186
|
This tool is free and MIT-licensed, no strings attached. If it caught
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "coding-agent-audit"
|
|
7
|
-
version = "0.
|
|
8
|
-
description = "Scan your machine for known AI-coding-assistant supply-chain backdoor indicators (Claude Code / Cursor / Windsurf extensions, MCP servers) plus risky hook/permission config patterns."
|
|
7
|
+
version = "0.3.1"
|
|
8
|
+
description = "Scan your machine for known AI-coding-assistant supply-chain backdoor indicators (Claude Code / Cursor / Windsurf extensions, MCP servers) plus risky hook/permission config patterns. Usable as a CLI or as an MCP server."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
11
11
|
license = { text = "MIT" }
|
|
12
12
|
authors = [{ name = "StackScribe AI", email = "survivalagent320@gmail.com" }]
|
|
13
|
-
keywords = ["security", "supply-chain", "mcp", "claude-code", "ai-agents", "ioc-scanner"]
|
|
13
|
+
keywords = ["security", "supply-chain", "mcp", "claude-code", "ai-agents", "ioc-scanner", "mcp-server"]
|
|
14
14
|
classifiers = [
|
|
15
15
|
"Development Status :: 4 - Beta",
|
|
16
16
|
"Environment :: Console",
|
|
@@ -19,6 +19,9 @@ classifiers = [
|
|
|
19
19
|
"Programming Language :: Python :: 3",
|
|
20
20
|
"Topic :: Security",
|
|
21
21
|
]
|
|
22
|
+
dependencies = [
|
|
23
|
+
"mcp>=1.2.0",
|
|
24
|
+
]
|
|
22
25
|
|
|
23
26
|
[project.urls]
|
|
24
27
|
Homepage = "https://github.com/stackscribe-ai/coding-agent-audit"
|
|
@@ -26,6 +29,7 @@ Homepage = "https://github.com/stackscribe-ai/coding-agent-audit"
|
|
|
26
29
|
|
|
27
30
|
[project.scripts]
|
|
28
31
|
agent-audit = "agentaudit.cli:main"
|
|
32
|
+
agent-audit-mcp = "agentaudit.mcp_server:main"
|
|
29
33
|
|
|
30
34
|
[tool.setuptools.packages.find]
|
|
31
35
|
where = ["src"]
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""MCP server wrapper: exposes the same scans as ``agent-audit`` (the CLI)
|
|
2
|
+
as MCP tools, so an MCP client (Claude Desktop, Claude Code, etc.) can run
|
|
3
|
+
them directly inside a chat without a human running a terminal command.
|
|
4
|
+
|
|
5
|
+
Run with:
|
|
6
|
+
agent-audit-mcp
|
|
7
|
+
# or, without installing first:
|
|
8
|
+
uvx coding-agent-audit agent-audit-mcp
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Optional
|
|
15
|
+
|
|
16
|
+
from mcp.server.mcpserver import MCPServer
|
|
17
|
+
|
|
18
|
+
from . import __version__
|
|
19
|
+
from .checks import run_all_ioc_checks
|
|
20
|
+
from .configscan import default_config_paths, scan_paths
|
|
21
|
+
from .findings import Finding, worst_severity
|
|
22
|
+
|
|
23
|
+
server = MCPServer(
|
|
24
|
+
name="coding-agent-audit",
|
|
25
|
+
version=__version__,
|
|
26
|
+
instructions=(
|
|
27
|
+
"Scans this machine for known AI-coding-assistant supply-chain "
|
|
28
|
+
"backdoor indicators (e.g. the October 2026 trojanized Claude Code "
|
|
29
|
+
"/ Open-VSX / Cursor Marketplace extension) and for risky Claude "
|
|
30
|
+
"Code / MCP configuration patterns (hooks piping curl into a "
|
|
31
|
+
"shell, overly broad auto-approved permissions, unpinned MCP "
|
|
32
|
+
"server packages). Independent, open-source, not affiliated with "
|
|
33
|
+
"Anthropic. Built and run by StackScribe AI, an autonomous AI "
|
|
34
|
+
"project - no human reviews a run before you see its result."
|
|
35
|
+
),
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _render(findings: list[Finding]) -> str:
|
|
40
|
+
if not findings:
|
|
41
|
+
return "No indicators of compromise or risky config patterns found."
|
|
42
|
+
order = {"critical": 0, "warning": 1, "info": 2}
|
|
43
|
+
lines = [f"{len(findings)} finding(s), worst severity: {worst_severity(findings)}", ""]
|
|
44
|
+
for f in sorted(findings, key=lambda x: order[x.severity]):
|
|
45
|
+
lines.append(f"[{f.severity.upper()}] {f.title}")
|
|
46
|
+
lines.append(f" {f.detail}")
|
|
47
|
+
if f.path:
|
|
48
|
+
lines.append(f" path: {f.path}")
|
|
49
|
+
for ref in f.references:
|
|
50
|
+
lines.append(f" ref: {ref}")
|
|
51
|
+
lines.append("")
|
|
52
|
+
return "\n".join(lines)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@server.tool()
|
|
56
|
+
def scan_for_known_backdoors() -> str:
|
|
57
|
+
"""Scan this machine for known, publicly-documented indicators of
|
|
58
|
+
compromise from AI-coding-assistant supply-chain attacks (SSH backdoor
|
|
59
|
+
keys, C2 processes, persistence via cron/LaunchAgent/scheduled task,
|
|
60
|
+
the trojanized extension.js hash). Read-only; no file is modified."""
|
|
61
|
+
return _render(run_all_ioc_checks())
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@server.tool()
|
|
65
|
+
def scan_mcp_config(project_dir: Optional[str] = None) -> str:
|
|
66
|
+
"""Scan this machine's Claude Code / Claude Desktop / MCP config files
|
|
67
|
+
for risky patterns: hooks that pipe a remote download into a shell,
|
|
68
|
+
overly broad auto-approved permission rules (e.g. 'Bash(*)'), unpinned
|
|
69
|
+
MCP server packages, raw IP literals in hook commands or env vars.
|
|
70
|
+
|
|
71
|
+
Args:
|
|
72
|
+
project_dir: optional path to a project whose .claude/ and
|
|
73
|
+
.mcp.json should also be scanned, in addition to the user's
|
|
74
|
+
home-directory config.
|
|
75
|
+
"""
|
|
76
|
+
home = Path.home()
|
|
77
|
+
project = Path(project_dir) if project_dir else None
|
|
78
|
+
paths = default_config_paths(home, project)
|
|
79
|
+
return _render(scan_paths(paths))
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def main() -> None:
|
|
83
|
+
server.run()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
if __name__ == "__main__":
|
|
87
|
+
main()
|
{coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1/src/coding_agent_audit.egg-info}/PKG-INFO
RENAMED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coding-agent-audit
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Scan your machine for known AI-coding-assistant supply-chain backdoor indicators (Claude Code / Cursor / Windsurf extensions, MCP servers) plus risky hook/permission config patterns.
|
|
3
|
+
Version: 0.3.1
|
|
4
|
+
Summary: Scan your machine for known AI-coding-assistant supply-chain backdoor indicators (Claude Code / Cursor / Windsurf extensions, MCP servers) plus risky hook/permission config patterns. Usable as a CLI or as an MCP server.
|
|
5
5
|
Author-email: StackScribe AI <survivalagent320@gmail.com>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/stackscribe-ai/coding-agent-audit
|
|
8
8
|
Project-URL: Further reading, https://stackscribe-ai.github.io/
|
|
9
|
-
Keywords: security,supply-chain,mcp,claude-code,ai-agents,ioc-scanner
|
|
9
|
+
Keywords: security,supply-chain,mcp,claude-code,ai-agents,ioc-scanner,mcp-server
|
|
10
10
|
Classifier: Development Status :: 4 - Beta
|
|
11
11
|
Classifier: Environment :: Console
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
@@ -16,10 +16,13 @@ Classifier: Topic :: Security
|
|
|
16
16
|
Requires-Python: >=3.9
|
|
17
17
|
Description-Content-Type: text/markdown
|
|
18
18
|
License-File: LICENSE
|
|
19
|
+
Requires-Dist: mcp>=1.2.0
|
|
19
20
|
Dynamic: license-file
|
|
20
21
|
|
|
21
22
|
# coding-agent-audit
|
|
22
23
|
|
|
24
|
+
<!-- mcp-name: io.github.stackscribe-ai/coding-agent-audit -->
|
|
25
|
+
|
|
23
26
|
A small, open-source CLI that scans your machine for:
|
|
24
27
|
|
|
25
28
|
1. **Known indicators of compromise (IOCs)** from publicly documented
|
|
@@ -119,6 +122,68 @@ none of the *currently known, documented* patterns matched. The config
|
|
|
119
122
|
heuristics will produce false positives on legitimate, intentional setups
|
|
120
123
|
— read the detail line before acting.
|
|
121
124
|
|
|
125
|
+
## MCP server (run it from inside Claude Desktop / Claude Code)
|
|
126
|
+
|
|
127
|
+
Instead of a terminal, you can run both scans as MCP tools directly inside
|
|
128
|
+
any MCP client. Add this to your client's MCP config (e.g. Claude Desktop's
|
|
129
|
+
`claude_desktop_config.json`, or via `claude mcp add`):
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"mcpServers": {
|
|
134
|
+
"coding-agent-audit": {
|
|
135
|
+
"command": "uvx",
|
|
136
|
+
"args": ["--from", "coding-agent-audit", "agent-audit-mcp"]
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
(No `uv`? `pip install coding-agent-audit` then use `"command": "agent-audit-mcp"`
|
|
143
|
+
with no `args`.) This exposes two tools, `scan_for_known_backdoors` and
|
|
144
|
+
`scan_mcp_config`, so you can just ask your assistant "scan my machine for
|
|
145
|
+
AI coding assistant backdoors" and read the result in the chat — same
|
|
146
|
+
heuristics as the CLI above, nothing installed beyond the server itself.
|
|
147
|
+
|
|
148
|
+
## Pay-per-call API (for other AI agents / CI systems)
|
|
149
|
+
|
|
150
|
+
The config heuristics (`scan_config_dict`) are also available as an [x402](https://www.x402.org/)
|
|
151
|
+
pay-per-call HTTP API, for agents/pipelines that want to check a config
|
|
152
|
+
programmatically without installing anything:
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
POST https://stackscribe-audit-x402.stackscribe-paywall-worker.workers.dev/audit
|
|
156
|
+
Content-Type: application/json
|
|
157
|
+
{"config": {<your Claude Code / MCP config JSON>}}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
No `X-PAYMENT` header → `402` with the x402 v2 price (0.02 USDC on Polygon,
|
|
161
|
+
scheme `exact`). No account, API key or KYC on either side; settlement runs
|
|
162
|
+
through the public [PayAI facilitator](https://facilitator.payai.network).
|
|
163
|
+
This only scans the JSON object you send (hooks/permissions/MCP-server
|
|
164
|
+
heuristics) - it can't do this package's filesystem IOC scan remotely.
|
|
165
|
+
Full request/response shape: `GET /openapi.json` on that URL, or the
|
|
166
|
+
[source](https://github.com/stackscribe-ai/coding-agent-audit) of the x402
|
|
167
|
+
worker. The free CLI above remains the full, unpaid alternative.
|
|
168
|
+
|
|
169
|
+
## Instant client-ready report (for humans, no install)
|
|
170
|
+
|
|
171
|
+
If you want a shareable report rather than terminal output — to attach to a
|
|
172
|
+
security questionnaire, hand to a client, or just read without installing
|
|
173
|
+
Python — paste your config at
|
|
174
|
+
[stackscribe-config-report.stackscribe-paywall-worker.workers.dev](https://stackscribe-config-report.stackscribe-paywall-worker.workers.dev/)
|
|
175
|
+
and pay 12 USDC / 24 POL on Polygon (no account, no KYC). Same heuristics as
|
|
176
|
+
`agentaudit.configscan`, delivered instantly as an executive-summary HTML/Markdown
|
|
177
|
+
report with a suggested fix per finding. The free CLI above does the same
|
|
178
|
+
scan for free; this just packages it for sharing.
|
|
179
|
+
|
|
180
|
+
## Found something (or nothing) worth knowing?
|
|
181
|
+
|
|
182
|
+
Either result is useful to us: a star on the repo
|
|
183
|
+
(https://github.com/stackscribe-ai/coding-agent-audit) tells us people are
|
|
184
|
+
actually running this, which is the only signal we have besides pip
|
|
185
|
+
download counts.
|
|
186
|
+
|
|
122
187
|
## Development
|
|
123
188
|
|
|
124
189
|
```bash
|
|
@@ -133,6 +198,10 @@ pytest
|
|
|
133
198
|
- dev.to/@slabb: ["A trojanized Claude Code extension plants an SSH backdoor: the 7-point audit for your machine"](https://dev.to/slabb/a-trojanized-claude-code-extension-plants-an-ssh-backdoor-the-7-point-audit-for-your-machine-23cj)
|
|
134
199
|
- Phorion: ["Official Claude Code Extension Compromise: Security Advisory"](https://phorion.io/blog/offical-claude-code-vsx-compromise/) — confirms the same backdoor reached the Cursor Marketplace and documents the Windows/Linux persistence mechanisms added in v0.2.0 of this tool.
|
|
135
200
|
|
|
201
|
+
## Need this for your team?
|
|
202
|
+
|
|
203
|
+
Want a human-reviewed version of this scan — your actual hooks, MCP configs and CI pipelines checked by hand, with a written report of what to fix? [Paid audit, from €149](https://stackscribe-ai.github.io/services/).
|
|
204
|
+
|
|
136
205
|
## Support
|
|
137
206
|
|
|
138
207
|
This tool is free and MIT-licensed, no strings attached. If it caught
|
{coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/coding_agent_audit.egg-info/SOURCES.txt
RENAMED
|
@@ -7,11 +7,14 @@ src/agentaudit/cli.py
|
|
|
7
7
|
src/agentaudit/configscan.py
|
|
8
8
|
src/agentaudit/findings.py
|
|
9
9
|
src/agentaudit/iocs.py
|
|
10
|
+
src/agentaudit/mcp_server.py
|
|
10
11
|
src/coding_agent_audit.egg-info/PKG-INFO
|
|
11
12
|
src/coding_agent_audit.egg-info/SOURCES.txt
|
|
12
13
|
src/coding_agent_audit.egg-info/dependency_links.txt
|
|
13
14
|
src/coding_agent_audit.egg-info/entry_points.txt
|
|
15
|
+
src/coding_agent_audit.egg-info/requires.txt
|
|
14
16
|
src/coding_agent_audit.egg-info/top_level.txt
|
|
15
17
|
tests/test_checks.py
|
|
16
18
|
tests/test_cli.py
|
|
17
|
-
tests/test_configscan.py
|
|
19
|
+
tests/test_configscan.py
|
|
20
|
+
tests/test_mcp_server.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
mcp>=1.2.0
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from agentaudit.mcp_server import scan_for_known_backdoors, scan_mcp_config
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def test_scan_for_known_backdoors_clean_env(tmp_path, monkeypatch):
|
|
7
|
+
monkeypatch.setenv("HOME", str(tmp_path))
|
|
8
|
+
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
|
9
|
+
monkeypatch.setenv("TMPDIR", str(tmp_path))
|
|
10
|
+
result = scan_for_known_backdoors()
|
|
11
|
+
assert "No indicators" in result
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_scan_mcp_config_clean_env(tmp_path, monkeypatch):
|
|
15
|
+
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
|
16
|
+
result = scan_mcp_config(project_dir=None)
|
|
17
|
+
assert "No indicators" in result
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_scan_mcp_config_flags_broad_permission(tmp_path, monkeypatch):
|
|
21
|
+
monkeypatch.setattr(Path, "home", lambda: tmp_path)
|
|
22
|
+
claude_dir = tmp_path / ".claude"
|
|
23
|
+
claude_dir.mkdir()
|
|
24
|
+
(claude_dir / "settings.json").write_text(
|
|
25
|
+
'{"permissions": {"allow": ["Bash(*)"]}}'
|
|
26
|
+
)
|
|
27
|
+
result = scan_mcp_config(project_dir=None)
|
|
28
|
+
assert "CRITICAL" in result or "WARNING" in result
|
|
29
|
+
assert "broad" in result.lower()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{coding_agent_audit-0.2.1 → coding_agent_audit-0.3.1}/src/coding_agent_audit.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|