基于 AI Agent + MCP 工具链 + 渗透 Skill 编排, 配合大语言模型, 自然语言输入 → 自动完成「信息收集 → 漏洞发现 → 漏洞利用 → 报告生成」全流程。
This report presents the forensic synthetic code analysis of Unclecheng-li/VulnClaw, a Python project with 2,067 GitHub stars. SynthScan v2.0 examined 136,070 lines of code across 464 source files, recording 1859 pattern matches distributed across 17 syntactic categories. The overall adjusted score of 18.8 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1859 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/App.tsx | 222 | function openBoundaryForActiveTask() { | CODE |
| LOW | frontend/src/utils/preferences.ts | 82 | function normalizeBoundaryDefaults(value: unknown): BoundaryDefaults { | CODE |
| LOW | frontend/src/utils/taskLabels.ts | 123 | export function countConstraintViolations( | CODE |
| LOW | frontend/src/pages/SafetyBoundaryPage.tsx | 90 | function boundaryDefaultsToConstraints(defaults: BoundaryDefaults): Record<string, unknown> { | CODE |
| LOW | tests/test_reasoning_prompt_context.py | 37 | def test_session_state_persists_reasoning(tmp_path): | CODE |
| LOW | tests/test_reasoning_prompt_context.py | 59 | def test_build_round_context_injects_reasoning_and_reflexion(tmp_path): | CODE |
| LOW | tests/test_release.py | 6 | def test_package_version_matches_pyproject() -> None: | CODE |
| LOW | tests/test_token_counter.py | 25 | def test_multimodal_list_content(self): | CODE |
| LOW | tests/test_token_counter.py | 76 | def test_no_truncation_under_budget(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 90 | def test_preserves_system_prompt(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 96 | def test_preserves_recent_messages(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 102 | def test_inserts_truncation_notice(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 116 | def test_drops_oldest_middle_first(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 125 | def test_no_system_when_preserve_false(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 132 | def test_zero_max_tokens_returns_copy(self): | CODE |
| LOW⚡ | tests/test_token_counter.py | 138 | def test_few_messages_than_min_recent(self): | CODE |
| LOW⚡ | tests/test_system_prompt_constraints.py | 19 | def test_prompt_includes_constraints_block_when_constraints_set(): | CODE |
| LOW⚡ | tests/test_system_prompt_constraints.py | 27 | def test_prompt_omits_constraints_block_when_constraints_empty(): | CODE |
| LOW⚡ | tests/test_system_prompt_constraints.py | 33 | def test_prompt_omits_constraints_block_when_constraints_none(): | CODE |
| LOW | tests/test_basic.py | 22 | def test_all_submodules_importable(): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 52 | def test_start_local_server_marks_running_and_healthy(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 60 | def test_stop_server_sets_unknown_and_clears_running(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 101 | async def test_context_manager_starts_and_stops(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 114 | def test_terminate_then_no_kill_when_process_exits(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 124 | def test_kill_when_terminate_does_not_stop(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 147 | async def test_async_terminate_no_kill_when_already_dead(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 162 | async def test_restart_succeeds_first_attempt(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 292 | async def test_unavailable_when_subprocess_dead(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 301 | async def test_no_calls_keeps_current_status(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 309 | async def test_unknown_server_returns_unknown(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 318 | def test_get_server_stats_reports_counts_and_latency(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 335 | def test_record_restart_updates_stats(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 345 | def test_health_window_is_bounded(self): | CODE |
| LOW⚡ | tests/test_mcp_lifecycle.py | 354 | async def test_call_tool_records_latency(self): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 74 | def test_stop_all_stops_tracked_processes(self): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 86 | async def test_astop_all_stops_in_parallel(self): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 135 | async def test_async_terminate_escalates_to_kill(self): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 173 | async def test_restart_retries_with_backoff_then_succeeds(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 199 | async def test_restart_gives_up_after_max_attempts(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 220 | async def test_call_tool_restarts_dead_subprocess(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 383 | def test_attach_success_registers_known_tools(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 406 | def test_attach_failure_degrades_and_falls_back(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 424 | async def test_get_or_create_session_dispatches_http(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 437 | async def test_call_tool_routes_streamable_http_server(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 469 | def test_burp_attach_success_registers_runtime_tools(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 506 | async def test_get_or_create_session_dispatches_sse(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 519 | async def test_call_tool_routes_sse_server(self, monkeypatch): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 552 | async def test_sse_shutdown_noise_is_ignored(self): | CODE |
| LOW | tests/test_mcp_lifecycle.py | 601 | def test_persistent_stdio_shutdown_has_no_cross_task_error(): | STRING |
| LOW | tests/test_mcp_lifecycle.py | 669 | def test_smoke_event_loop_isolation(): | STRING |
| LOW⚡ | tests/test_kb_fallback.py | 49 | def test_falls_back_to_keyword_when_chromadb_missing(self, tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 59 | def test_status_disabled_when_no_data(self, tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 73 | def test_retrieve_ranks_relevant_first(self, tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 83 | def test_retrieve_matches_cve_by_service(self, tmp_path): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 89 | def test_retrieve_empty_query_returns_empty(self, tmp_path): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 94 | def test_retrieve_no_match_returns_empty(self, tmp_path): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 99 | def test_has_data_false_on_empty_store(self, tmp_path): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 109 | def test_get_status_returns_enum(self, tmp_path, monkeypatch): | CODE |
| LOW⚡ | tests/test_kb_fallback.py | 115 | def test_status_detail_is_string(self, tmp_path, monkeypatch): | CODE |
| LOW | tests/test_kb_fallback.py | 147 | def test_same_query_uses_cache(self, tmp_path, monkeypatch): | CODE |
| 907 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 39 | # ── 沙箱依赖(python_execute 运行时)────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_mcp_lifecycle.py | 48 | # ── start / stop ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_mcp_lifecycle.py | 110 | # ── graceful termination (SIGTERM-then-SIGKILL semantics) ──────────── | COMMENT |
| MEDIUM⚡ | tests/test_mcp_lifecycle.py | 157 | # ── auto-restart ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_mcp_lifecycle.py | 314 | # ── stats tracking ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_mcp_lifecycle.py | 255 | # ── health check ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_mcp_lifecycle.py | 571 | # ── stdio cross-task shutdown noise (issue #81) ────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_kb_fallback.py | 45 | # ── Automatic degradation when ChromaDB unavailable ────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_kb_fallback.py | 69 | # ── Keyword retrieval functionality ────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_kb_fallback.py | 105 | # ── Status reporting ───────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_kb_fallback.py | 123 | # ── Retrieval result caching (via kb_context) ──────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_kb_fallback.py | 181 | # ── Full-corpus loading from store ─────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent.py | 7 | # ── context.py ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent.py | 529 | # ── memory.py ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent.py | 608 | # ── prompts.py ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent.py | 680 | # ── core.py ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_finding_similarity.py | 15 | # ── normalize_text ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_finding_similarity.py | 37 | # ── text_similarity ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_finding_similarity.py | 63 | # ── url_similarity ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_finding_similarity.py | 97 | # ── normalize_vuln_type ────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_finding_similarity.py | 134 | # ── finding_similarity ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_finding_similarity.py | 184 | # ── deduplicate_findings ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_finding_similarity.py | 238 | # ── SessionState integration ───────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_recon_tools.py | 48 | # ── JS 提取(纯函数)──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_recon_tools.py | 112 | # ── 空间测绘:查询构造 + 解析 ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_recon_tools.py | 165 | # ── 目录枚举:全局伪装 200 识别 ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_recon_tools.py | 207 | # ── 子域名枚举:被动聚合 + 字典爆破关闭时不解析 ───────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_headless.py | 87 | # ── Exit-code contract ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_headless.py | 146 | # ── Run artifacts ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_headless.py | 40 | # ── Scan-mode presets ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_cli_noninteractive.py | 221 | # ── Exit-code contract ────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_cli_noninteractive.py | 286 | # ── Prescribed workflow docs parse-check ──────────────────────────── | COMMENT |
| MEDIUM | tests/test_cli_noninteractive.py | 80 | # ── Non-interactive: no prompts, structured output ────────────────── | COMMENT |
| MEDIUM | tests/test_cli_noninteractive.py | 153 | # ── Scan-mode presets applied to the engine ───────────────────────── | COMMENT |
| MEDIUM | tests/test_report.py | 5 | # ── generator.py ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_report.py | 430 | # ── poc_builder.py ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_token_provider.py | 26 | # ── static mode ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_token_provider.py | 46 | # ── oauth store + resolution ───────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_token_provider.py | 81 | # ── Sign in with ChatGPT (Codex OAuth client) ──────────────────────── | COMMENT |
| MEDIUM | tests/test_solver.py | 449 | # ── Parallel exploration tests ────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_solver.py | 611 | # ── Blackboard seq restore test ───────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_config.py | 4 | # ── schema.py ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_config.py | 155 | # ── settings.py ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_chatgpt_proxy.py | 14 | # ── Pure translation functions ─────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_chatgpt_proxy.py | 138 | # ── Integration: proxy server ↔ mock ChatGPT backend ───────────────── | COMMENT |
| MEDIUM⚡ | tests/test_skills.py | 375 | # ── flag_skills.py ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_skills.py | 4 | # ── loader.py ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_skills.py | 231 | # ── dispatcher.py ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_skills.py | 438 | # ── crypto_tools.py ──────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_agent_graph.py | 41 | # ── Node lifecycle ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_agent_graph.py | 221 | # ── Persistence ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent_graph.py | 133 | # ── Root-completion rule (fail-loud) ───────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent_graph.py | 176 | # ── Bounded fan-out caps ───────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_agent_graph.py | 266 | # ── Resume ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_kb.py | 4 | # ── store.py ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_kb.py | 130 | # ── retriever.py ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_kb.py | 260 | # ── updater.py ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_mcp.py | 103 | # ── router.py ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_mcp.py | 7 | # ── registry.py ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_mcp.py | 195 | # ── lifecycle.py ───────────────────────────────────────────────────── | COMMENT |
| 228 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | conftest.py | 1 | CODE | |
| LOW | tests/test_release.py | 1 | CODE | |
| LOW | tests/test_mcp_lifecycle.py | 3 | CODE | |
| LOW | tests/test_finding_similarity.py | 3 | CODE | |
| LOW | tests/test_recon_tools.py | 1 | CODE | |
| LOW | tests/test_agent_context_protocol.py | 14 | CODE | |
| LOW | tests/test_mcp_fetch_cookies.py | 8 | CODE | |
| LOW | tests/test_headless.py | 3 | CODE | |
| LOW | tests/test_cli_noninteractive.py | 3 | CODE | |
| LOW | tests/test_release_workflow.py | 1 | CODE | |
| LOW | tests/test_team_agents.py | 1 | CODE | |
| LOW | tests/test_parallel_agents.py | 3 | CODE | |
| LOW | tests/test_stream_robustness.py | 13 | CODE | |
| LOW | tests/test_token_provider.py | 3 | CODE | |
| LOW | tests/test_builtin_plugins.py | 1 | CODE | |
| LOW | tests/test_plugin_cli.py | 1 | CODE | |
| LOW | tests/test_solver.py | 1 | CODE | |
| LOW | tests/test_chatgpt_proxy.py | 3 | CODE | |
| LOW | tests/test_plugin_runtime.py | 1 | CODE | |
| LOW | tests/test_agent_graph.py | 3 | CODE | |
| LOW | tests/test_llm_client_streaming.py | 3 | CODE | |
| LOW | tests/test_run_persistence.py | 1 | CODE | |
| LOW | tests/test_blackboard.py | 1 | CODE | |
| LOW | tests/test_plugin_integration.py | 1 | CODE | |
| LOW | tests/test_tool_parallel.py | 3 | CODE | |
| LOW | tests/test_constraint_tool_action.py | 3 | CODE | |
| LOW | tests/traffic/test_report_export.py | 3 | CODE | |
| LOW | tests/traffic/test_normalize_replay.py | 3 | CODE | |
| LOW | tests/traffic/test_store.py | 3 | CODE | |
| LOW | tests/traffic/test_backends.py | 3 | CODE | |
| LOW | tests/traffic/test_tools.py | 3 | CODE | |
| LOW | vulnclaw/headless.py | 22 | CODE | |
| LOW | vulnclaw/targets.py | 3 | CODE | |
| LOW | vulnclaw/repl_runner.py | 3 | CODE | |
| LOW | vulnclaw/run_context.py | 3 | CODE | |
| LOW | vulnclaw/orchestrator.py | 3 | CODE | |
| LOW | vulnclaw/traffic/store.py | 11 | CODE | |
| LOW | vulnclaw/traffic/models.py | 10 | CODE | |
| LOW | vulnclaw/traffic/paths.py | 9 | CODE | |
| LOW | vulnclaw/traffic/mitm_addon.py | 15 | CODE | |
| LOW | vulnclaw/traffic/mitm_addon.py | 32 | CODE | |
| LOW | vulnclaw/traffic/normalize.py | 11 | CODE | |
| LOW | vulnclaw/traffic/tools.py | 9 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 10 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 12 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 13 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 24 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 25 | CODE | |
| LOW | vulnclaw/traffic/__init__.py | 25 | CODE | |
| LOW | vulnclaw/traffic/browser.py | 14 | CODE | |
| LOW | vulnclaw/traffic/browser.py | 31 | CODE | |
| LOW | vulnclaw/traffic/capture.py | 9 | CODE | |
| 167 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_report.py | 267 | except Exception: | CODE |
| LOW | tests/test_token_provider.py | 147 | except Exception: | CODE |
| LOW | tests/test_mcp.py | 242 | except Exception: | CODE |
| LOW | vulnclaw/__init__.py | 14 | except Exception: | CODE |
| LOW | vulnclaw/orchestrator.py | 181 | except Exception as exc: | CODE |
| LOW | vulnclaw/traffic/models.py | 40 | except Exception: | CODE |
| LOW | vulnclaw/traffic/mitm_addon.py | 33 | except Exception: | CODE |
| LOW | vulnclaw/traffic/tools.py | 171 | except Exception as exc: # network / transport errors | CODE |
| LOW | vulnclaw/traffic/browser.py | 32 | except Exception: | CODE |
| LOW | vulnclaw/traffic/browser.py | 49 | except Exception: | CODE |
| LOW | vulnclaw/intel/osint.py | 302 | except Exception: | CODE |
| LOW | vulnclaw/intel/osint.py | 345 | except Exception: | CODE |
| LOW | vulnclaw/intel/osint.py | 703 | except Exception as exc: # never raise into the agent loop | CODE |
| LOW | vulnclaw/intel/remediation.py | 266 | except Exception as e: | CODE |
| LOW | vulnclaw/intel/remediation.py | 295 | except Exception as e: | CODE |
| LOW⚡ | vulnclaw/kb/retriever.py | 39 | except Exception as exc: # pragma: no cover - exercised when chromadb missing | CODE |
| LOW | vulnclaw/kb/retriever.py | 213 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | vulnclaw/kb/retriever.py | 219 | except Exception as exc: | CODE |
| LOW | vulnclaw/kb/retriever.py | 262 | except Exception as exc: # pragma: no cover - defensive | CODE |
| LOW | vulnclaw/target_state/planner.py | 247 | except Exception: | CODE |
| LOW | vulnclaw/config/settings.py | 422 | except Exception: | CODE |
| LOW | vulnclaw/config/url_utils.py | 23 | except Exception: | CODE |
| LOW | vulnclaw/plugins/runtime.py | 69 | except Exception as exc: | CODE |
| LOW | vulnclaw/web/services/task_service.py | 96 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 328 | except Exception as e: # 单引擎失败不影响其他引擎 | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 332 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 384 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 387 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 405 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 542 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 546 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 685 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 705 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 746 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 830 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 841 | except Exception: | CODE |
| LOW | vulnclaw/agent/recon_tools.py | 851 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/loop_controller.py | 267 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/loop_controller.py | 373 | except Exception: | CODE |
| LOW | vulnclaw/agent/loop_controller.py | 391 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/kb_context.py | 28 | except Exception as exc: # defensive — never break the agent loop | CODE |
| LOW | vulnclaw/agent/kb_context.py | 68 | except Exception as exc: # defensive — retrieval must never break the loop | CODE |
| LOW | vulnclaw/agent/prompt_context.py | 380 | except Exception: | CODE |
| LOW | vulnclaw/agent/solver.py | 680 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/solver.py | 715 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/solver.py | 810 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/solver.py | 920 | except Exception as exc: | CODE |
| LOW | vulnclaw/agent/tool_call_manager.py | 153 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/core.py | 53 | except Exception: | CODE |
| LOW | vulnclaw/agent/core.py | 92 | except Exception: | CODE |
| LOW | vulnclaw/agent/core.py | 99 | except Exception: | CODE |
| LOW | vulnclaw/agent/core.py | 231 | except Exception: | CODE |
| LOW | vulnclaw/agent/core.py | 252 | except Exception: | CODE |
| LOW | vulnclaw/agent/core.py | 475 | except Exception as e: | CODE |
| LOW | vulnclaw/agent/team.py | 106 | except Exception: | CODE |
| LOW | vulnclaw/agent/team.py | 143 | except Exception: | CODE |
| LOW | vulnclaw/agent/chatgpt_proxy.py | 414 | except Exception: # noqa: BLE001 - models listing is best-effort | CODE |
| LOW | vulnclaw/agent/chatgpt_proxy.py | 451 | except Exception as exc: # noqa: BLE001 - surface anything as an API error | CODE |
| LOW | vulnclaw/agent/llm_client.py | 47 | except Exception: | CODE |
| LOW | vulnclaw/agent/llm_client.py | 181 | except Exception as exc: | CODE |
| 110 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 591 | # Step 1: 启动 Chrome 远程调试 | COMMENT |
| LOW | README.md | 597 | # Step 2: 启用 VulnClaw 配置(自动通过 npx 拉取,无需手动安装) | COMMENT |
| LOW⚡ | README.md | 621 | # Step 1: 克隆并构建 | COMMENT |
| LOW⚡ | README.md | 627 | # Step 2: 加载到 Burp Suite | COMMENT |
| LOW⚡ | README.md | 630 | # Step 3: 在 Burp 的 MCP 标签页勾选 "Enabled"(默认监听 127.0.0.1:9876) | COMMENT |
| LOW⚡ | README.md | 632 | # Step 4: 启用 VulnClaw 配置 | COMMENT |
| LOW⚡ | docs/mcp-deployment.md | 111 | #### Step 1: 克隆并构建 | COMMENT |
| LOW⚡ | docs/mcp-deployment.md | 121 | #### Step 2: 加载到 Burp Suite | COMMENT |
| LOW⚡ | docs/mcp-deployment.md | 128 | #### Step 3: 启用 MCP Server | COMMENT |
| LOW⚡ | vulnclaw/config/token_provider.py | 209 | # WARNING: This authenticates against OpenAI's first-party Codex OAuth client. | COMMENT |
| LOW | …6-04-19_php-weak-comparison_double-write-md5-bypass.md | 100 | # Step 1: 设置 L1 + L2 session | COMMENT |
| LOW | …6-04-19_php-weak-comparison_double-write-md5-bypass.md | 104 | # Step 2: 触发 L3 + 获取 flag | COMMENT |
| LOW⚡ | vulnclaw/agent/builtin_tools.py | 1316 | # Step 1: Get login page for initial CSRF and session | COMMENT |
| LOW | vulnclaw/agent/builtin_tools.py | 1346 | # Step 2: Try each password | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 50 | ## Step 1: Confirm device and app presence | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 67 | ## Step 2: Prepare packet visibility first | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 77 | ## Step 3: Drive the real business flow | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 89 | ## Step 4: After each important action, inspect runtime evidence | COMMENT |
| LOW | …verse/references/android-authorized-app-pentest-sop.md | 105 | ## Step 5: Branch by packet result | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 35 | ### Step 1: Prepare the runtime view | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 58 | ### Step 2: Create a visual checkpoint | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 68 | ### Step 3: Analyze the current screen | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 93 | ### Step 4: Execute the next UI action | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 126 | ### Step 5: Tie UI action to packet capture | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 139 | ### Step 6: Promote the packet into replay analysis | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 55 | ### Step 1: Confirm device and app presence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 72 | ### Step 2: Prepare packet visibility first | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 82 | ### Step 3: Drive the app to the target feature | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 108 | ### Step 4: Inspect the screenshot before reversing | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 125 | ### Step 5: Review logs for cheap evidence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 137 | ### Step 6: Check Burp and Charles | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 151 | ### Step 7: Branch by packet visibility | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 9 | ## Step 1: 从页面提取作者标识 | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 62 | ## Step 2: GitHub 追踪 | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 126 | ## Step 3: 跨平台关联 | COMMENT |
| LOW | …/specialized/osint-recon/references/author-tracking.md | 157 | ## Step 4: 信息汇总模板 | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 50 | ## Step 1: Confirm device and app presence | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 67 | ## Step 2: Prepare packet visibility first | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 77 | ## Step 3: Drive the real business flow | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 89 | ## Step 4: After each important action, inspect runtime evidence | COMMENT |
| LOW | …ntest/references/android-authorized-app-pentest-sop.md | 105 | ## Step 5: Branch by packet result | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 35 | ### Step 1: Prepare the runtime view | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 58 | ### Step 2: Create a visual checkpoint | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 68 | ### Step 3: Analyze the current screen | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 93 | ### Step 4: Execute the next UI action | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 126 | ### Step 5: Tie UI action to packet capture | COMMENT |
| LOW | …ences/android-ui-driven-observation-and-packet-loop.md | 139 | ### Step 6: Promote the packet into replay analysis | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 55 | ### Step 1: Confirm device and app presence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 72 | ### Step 2: Prepare packet visibility first | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 82 | ### Step 3: Drive the app to the target feature | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 108 | ### Step 4: Inspect the screenshot before reversing | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 125 | ### Step 5: Review logs for cheap evidence | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 137 | ### Step 6: Check Burp and Charles | COMMENT |
| LOW | …erences/android-external-url-runtime-first-workflow.md | 151 | ### Step 7: Branch by packet visibility | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/orchestrator.py | 40 | CODE | |
| LOW | vulnclaw/intel/compliance.py | 255 | CODE | |
| LOW | vulnclaw/intel/osint.py | 357 | CODE | |
| LOW | vulnclaw/intel/osint.py | 398 | CODE | |
| LOW | vulnclaw/intel/attack.py | 780 | CODE | |
| LOW | vulnclaw/intel/topology.py | 430 | CODE | |
| LOW | vulnclaw/intel/remediation.py | 244 | CODE | |
| LOW | vulnclaw/intel/cve.py | 84 | CODE | |
| LOW | vulnclaw/kb/store.py | 44 | CODE | |
| LOW | vulnclaw/kb/store.py | 113 | CODE | |
| LOW | vulnclaw/kb/store.py | 160 | CODE | |
| LOW | vulnclaw/config/domain_models.py | 356 | CODE | |
| LOW | vulnclaw/config/settings.py | 103 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 357 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 426 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 644 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 783 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 671 | CODE | |
| LOW | vulnclaw/agent/recon_tools.py | 375 | CODE | |
| LOW | vulnclaw/agent/loop_controller.py | 87 | CODE | |
| LOW | vulnclaw/agent/loop_controller.py | 292 | CODE | |
| LOW | vulnclaw/agent/prompt_context.py | 12 | CODE | |
| LOW | vulnclaw/agent/solver.py | 210 | CODE | |
| LOW | vulnclaw/agent/solver.py | 581 | CODE | |
| LOW | vulnclaw/agent/token_counter.py | 33 | CODE | |
| LOW | vulnclaw/agent/team.py | 150 | CODE | |
| LOW | vulnclaw/agent/chatgpt_proxy.py | 175 | CODE | |
| LOW | vulnclaw/agent/chatgpt_proxy.py | 289 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 149 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 279 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 544 | CODE | |
| LOW | vulnclaw/agent/llm_client.py | 658 | CODE | |
| LOW | vulnclaw/agent/input_analysis.py | 115 | CODE | |
| LOW | vulnclaw/agent/input_analysis.py | 263 | CODE | |
| LOW | vulnclaw/agent/network_scan.py | 449 | CODE | |
| LOW | vulnclaw/agent/finding_parser.py | 84 | CODE | |
| LOW | vulnclaw/agent/ctf_mode.py | 29 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 153 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 339 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 763 | CODE | |
| LOW | vulnclaw/agent/builtin_tools.py | 1247 | CODE | |
| LOW | vulnclaw/agent/skill_context.py | 94 | CODE | |
| LOW | vulnclaw/agent/reasoning_state.py | 230 | CODE | |
| LOW | vulnclaw/agent/agent_graph.py | 158 | CODE | |
| LOW | vulnclaw/agent/parallel_agents.py | 221 | CODE | |
| LOW | vulnclaw/mcp/diagnostics.py | 16 | CODE | |
| LOW | vulnclaw/mcp/lifecycle.py | 246 | CODE | |
| LOW | vulnclaw/cli/tui_textual.py | 546 | CODE | |
| LOW | vulnclaw/cli/tui_textual.py | 200 | CODE | |
| LOW | vulnclaw/cli/tui_textual.py | 400 | CODE | |
| LOW | vulnclaw/cli/tui_textual.py | 489 | CODE | |
| LOW | vulnclaw/cli/tui_textual.py | 930 | CODE | |
| LOW | vulnclaw/cli/tui_textual.py | 1188 | CODE | |
| LOW | vulnclaw/cli/tui.py | 448 | CODE | |
| LOW | vulnclaw/cli/tui.py | 736 | CODE | |
| LOW | vulnclaw/cli/tui.py | 1290 | CODE | |
| LOW | vulnclaw/cli/tui.py | 2450 | CODE | |
| LOW | vulnclaw/cli/tui.py | 465 | CODE | |
| LOW | vulnclaw/cli/main.py | 263 | CODE | |
| LOW | vulnclaw/cli/_helpers.py | 106 | CODE | |
| 5 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/run_context.py | 117 | def update_manifest(self, **updates: Any) -> None: | CODE |
| LOW | vulnclaw/traffic/__init__.py | 27 | __all__ = [ | CODE |
| LOW | vulnclaw/intel/remediation.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | vulnclaw/kb/retriever.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/kb/__init__.py | 10 | __all__ = [ | CODE |
| LOW | vulnclaw/config/settings.py | 103 | def set_config_value(key: str, value: str) -> None: | CODE |
| LOW | vulnclaw/plugins/__init__.py | 33 | __all__ = [ | CODE |
| LOW | vulnclaw/plugins/web/__init__.py | 14 | __all__ = [ | CODE |
| LOW | vulnclaw/web/__init__.py | 7 | __all__ = ["__version__"] | CODE |
| LOW | vulnclaw/web/task_manager.py | 61 | def set_restoring(self, task_id: str, *, snapshot_id: str | None = None) -> None: | CODE |
| LOW | vulnclaw/web/task_manager.py | 70 | def set_running(self, task_id: str) -> None: | CODE |
| LOW | vulnclaw/web/task_manager.py | 93 | def set_failed(self, task_id: str, error: str) -> None: | CODE |
| LOW | vulnclaw/web/task_manager.py | 101 | def set_stopped(self, task_id: str) -> None: | CODE |
| LOW | vulnclaw/agent/constraint_policy.py | 18 | __all__ = [ | CODE |
| LOW | vulnclaw/agent/kb_context.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | vulnclaw/agent/think_filter.py | 13 | __all__ = ["strip_think_tags", "format_think_tags"] | CODE |
| LOW | vulnclaw/agent/core.py | 668 | def _update_recon_dimension_completion(self, response: str) -> None: | CODE |
| LOW | vulnclaw/agent/recon_tracker.py | 140 | def update_recon_dimension_completion(agent: AgentContext, response: str) -> None: | CODE |
| LOW⚡ | vulnclaw/agent/agent_context.py | 124 | def _update_recon_dimension_completion(self, response: str) -> None: | CODE |
| LOW | vulnclaw/agent/finding_similarity.py | 23 | __all__ = [ | CODE |
| LOW | vulnclaw/agent/agent_graph.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 79 | def set_server_running(self, name: str, running: bool, pid: Optional[int] = None) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 89 | def set_server_execution_mode(self, name: str, mode: str) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 94 | def set_server_health(self, name: str, health_status: str) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 99 | def set_server_attach_result(self, name: str, attempted: bool, succeeded: bool) -> None: | CODE |
| LOW⚡ | vulnclaw/mcp/registry.py | 105 | def set_server_error(self, name: str, error: str, error_type: str | None = None) -> None: | CODE |
| LOW | vulnclaw/mcp/registry.py | 140 | def set_last_call_latency(self, name: str, latency_ms: float) -> None: | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 97 | def set_task_constraints(self, constraints: Any) -> None: | CODE |
| LOW | vulnclaw/cli/tui_textual.py | 95 | def _set_prompt(session: dict[str, Any], ptype: str, *args: Any) -> None: | CODE |
| LOW | vulnclaw/cli/tui_textual.py | 877 | def _set_bar(self, text: str = "", style: str = "") -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 708 | def _set_prompt_input(session: dict[str, Any], label: str, callback: PromptCallback, default: str = "") -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 712 | def _set_prompt_choice(session: dict[str, Any], label: str, choices: list[str], callback: PromptCallback) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 716 | def _set_prompt_confirm(session: dict[str, Any], label: str, callback: Callable[[bool], None]) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 720 | def _set_prompt_message(session: dict[str, Any], text: str) -> None: | CODE |
| LOW⚡ | vulnclaw/cli/tui.py | 724 | def _set_prompt_chain(session: dict[str, Any], fields: list, idx: int, callback: Callable[[], None]) -> None: | CODE |
| LOW | vulnclaw/report/__init__.py | 25 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | vulnclaw/intel/remediation_rules.py | 662 | sudo apt update && sudo apt upgrade -y | CODE |
| HIGH | vulnclaw/agent/builtin_tools.py | 283 | return f"[!] 工具 {tool_name} 返回空结果 (undefined),调用可能失败" | CODE |
| HIGH | vulnclaw/skills/loader.py | 195 | # gate. Any other value (missing, null, 0, "false", …) keeps | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | vulnclaw/agent/tool_schemas.py | 0 | build openai function calling schema from mcp tools + built-in tools. | STRING |
| HIGH | vulnclaw/agent/core.py | 0 | build openai function calling schema from mcp tools + built-in tools. | STRING |
| HIGH | vulnclaw/agent/builtin_tools.py | 0 | build openai function calling schema from mcp tools + built-in tools. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/orchestrator.py | 40 | CODE | |
| LOW | vulnclaw/config/finding_similarity.py | 149 | CODE | |
| LOW | vulnclaw/agent/team.py | 150 | CODE | |
| LOW | vulnclaw/cli/tui.py | 326 | CODE | |
| LOW | vulnclaw/cli/main.py | 852 | CODE | |
| LOW | vulnclaw/cli/main.py | 922 | CODE | |
| LOW | vulnclaw/cli/main.py | 1203 | CODE | |
| LOW | vulnclaw/cli/main.py | 1300 | CODE | |
| LOW | vulnclaw/cli/main.py | 1490 | CODE | |
| LOW | vulnclaw/cli/main.py | 1577 | CODE | |
| LOW | vulnclaw/cli/main.py | 1666 | CODE | |
| LOW | vulnclaw/cli/main.py | 1874 | CODE | |
| LOW | vulnclaw/cli/main.py | 2476 | CODE | |
| LOW | vulnclaw/cli/main.py | 3030 | CODE | |
| LOW | vulnclaw/cli/main.py | 1171 | CODE | |
| LOW | vulnclaw/report/filter.py | 153 | CODE | |
| LOW | vulnclaw/report/filter.py | 227 | CODE | |
| LOW | vulnclaw/report/filter.py | 241 | CODE | |
| LOW | vulnclaw/report/filter.py | 263 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_mcp.py | 306 | assert any(item.execution_mode in {"placeholder", "local"} for item in view.services) | CODE |
| LOW | tests/test_mcp.py | 357 | assert state.execution_mode == "placeholder" | CODE |
| LOW | vulnclaw/agent/core.py | 316 | api_key=token or "placeholder", | CODE |
| LOW | vulnclaw/mcp/registry.py | 44 | execution_mode: str = "placeholder" # local/sdk/subprocess/sse/placeholder | CODE |
| LOW | vulnclaw/mcp/diagnostics.py | 29 | execution_mode = state.execution_mode if state else "placeholder" | CODE |
| LOW | vulnclaw/mcp/diagnostics.py | 36 | elif execution_mode == "placeholder": | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 294 | self.registry.set_server_execution_mode(name, "sdk" if attached else "placeholder") | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 308 | self.registry.set_server_execution_mode(name, "sse" if attached else "placeholder") | CODE |
| LOW | vulnclaw/mcp/lifecycle.py | 322 | self.registry.set_server_execution_mode(name, "http" if attached else "placeholder") | CODE |
| LOW | vulnclaw/cli/main.py | 284 | if srv_state.health_status in ("degraded", "unavailable") and srv_state.execution_mode in ("placeholder",): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ized/rapid-checklist/references/testing-methodology.md | 550 | > 官方地址: https://genai.owasp.org/resource/agentic-ai/ | CODE |
| MEDIUM | …curity/references/04-ai-and-mcp-security-integrated.md | 5439 | https://allabouttesting.org/owasp-agentic-ai-threat-t9-identity-spoofing-impersonation-in-ai-systems/ | CODE |
| MEDIUM | …zed/ai-mcp-security/references/ai-identity-security.md | 462 | https://allabouttesting.org/owasp-agentic-ai-threat-t9-identity-spoofing-impersonation-in-ai-systems/ | CODE |
| MEDIUM | …d/secknowledge-skill/references/testing-methodology.md | 550 | > 官方地址: https://genai.owasp.org/resource/agentic-ai/ | CODE |
| MEDIUM | …lized/secknowledge-skill/references/ai-identity-app.md | 460 | https://allabouttesting.org/owasp-agentic-ai-threat-t9-identity-spoofing-impersonation-in-ai-systems/ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_agent.py | 582 | # Create a new store instance pointing to the same dir | COMMENT |
| MEDIUM | tests/test_kb.py | 116 | # Create a new store loading from the same dir | COMMENT |
| MEDIUM | vulnclaw/cli/tui_textual.py | 301 | # Create the Input widget once for the entire chain lifecycle. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | vulnclaw/cli/tui_textual.py | 756 | # Build reverse lookup dict for robust label → lang_key resolution | COMMENT |
| MEDIUM | vulnclaw/skills/dispatcher.py | 76 | # Full/deep recon — trigger osint-recon for comprehensive 4-dimension collection | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/agent/llm_client.py | 737 | # We need to check if there are tool calls from the accumulated chunks | COMMENT |
| LOW⚡ | vulnclaw/agent/builtin_tools.py | 1316 | # Step 1: Get login page for initial CSRF and session | COMMENT |
| LOW | vulnclaw/agent/builtin_tools.py | 1346 | # Step 2: Try each password | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/agent/llm_client.py | 730 | # Check if we have tool calls | COMMENT |
| LOW | vulnclaw/cli/main.py | 2996 | # Check if user specified a path | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | vulnclaw/config/domain_models.py | 121 | def model_post_init(self, *args, **kwargs) -> None: | COMMENT |
| LOW | …lized/ctf-crypto/references/lattice-and-lwe-attacks.md | 81 | COMMENT |