dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
翻译准备中
106 次精选的开源 AI 代理、MCP 服务器和 LLM 应用安全扫描——24 项已确认修复,本地优先运行,使用 Semgrep、Gitleaks、Trivy 和 pip-audit。
AI 翻译
106 curated security scans of open-source AI agents, MCP servers and LLM apps - 24 confirmed fixes, run local-first with Semgrep, Gitleaks, Trivy and pip-audit.
安全PythonGitHub @elfrost在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证本地优先的 AI 代理安全扫描器,适用于 MCP 服务器和 LLM 应用:编排 Semgrep、Gitleaks、Trivy 和 pip-audit,然后将发现筛选至真实的部分。105 次公开扫描,24 项已确认修复。
AI 翻译
Local-first security scanner for AI agents, MCP servers and LLM apps: orchestrates Semgrep, Gitleaks, Trivy and pip-audit, then curates the findings down to what is real. 105 public scans, 24 confirmed fixes.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
AI PatchLab is an AI-assisted security remediation toolkit. The MVP starts with a
local repository scanner foundation that normalizes security findings and writes
actionable JSON and Markdown reports.查看完整 README ↗AI PatchLab is an AI-assisted security remediation toolkit. The MVP starts with a local repository scanner foundation that normalizes security findings and writes actionable JSON and Markdown reports.
Local-first by design. The whole point is a real security audit that runs on your machine — no source code leaves the host, no AI provider is contacted, and the same inputs produce the same report. Cloud remediation services (e.g. OpenAI's Daybreak) solve the same find → validate → reachable? → patch → verify loop from the opposite end; AI PatchLab is the path for code that can't be sent to a third party. See Daybreak, Patch the Planet, and why local-first still matters.
Public scan write-ups: elfrost.github.io/ai-patchlab.
# Setup
cd path\to\ai-patchlab
python -m venv .venv
.\.venv\Scripts\activate
pip install -e ".[dev]"
# Run a scan against a local repository
python scanner/run_scan.py --repo "C:\path\to\repo"
# Run this repository against itself
python scanner/run_scan.py --repo "."
# Scan a public repository by URL (shallow clone into a temp dir, then deleted)
python scanner/run_scan.py --from-git-url "https://github.com/owner/repo" --reports-dir "reports\owner-repo"
# Filter low-noise findings out of public reports (default keeps everything)
python scanner/run_scan.py --from-git-url "https://github.com/owner/repo" --reports-dir "reports\owner-repo" --min-severity medium
# Suppress known false-positive paths with a .gitignore-style ignore file
python scanner/run_scan.py --from-git-url "https://github.com/owner/repo" --reports-dir "reports\owner-repo" --ignore-file "reports\owner-repo\.aipatchlabignore"
# Tests
python -m pytest tests/ -v
# Lint and format
ruff check scanner src/ tests/
python -m black scanner src/ tests/
The scanner creates the reports/ directory when missing and writes:
reports/security_report.jsonreports/security_report.mdreports/raw/semgrep.json when Semgrep is installed and executedreports/raw/gitleaks.json when Gitleaks is installed and executedreports/raw/trivy.json when Trivy is installed and executedreports/raw/pip-audit.json when pip-audit is installed and executedreports/raw/ai-review.json only when AI review is enabled and the configured
local command is executedThe v0.1 foundation includes:
gitleaks CLIsemgrep CLItrivy CLIpip-auditEach scanner returns findings normalized to:
idtoolseveritytitledescriptionfilelinerecommendationconfidencepatch_beforepatch_afterremediation_explanationFindings are grouped by severity: critical, high, medium, low, and
info.
AI PatchLab enriches normalized finding recommendations with a deterministic
rule-based layer in scanner/recommendations.py. The enrichment matches finding
rule IDs, titles, tools, and descriptions for known security patterns, then
updates only the normalized recommendation field. Raw scanner output remains
unchanged.
Current enriched patterns:
subprocess calls using shell=TrueNo paid APIs are used for recommendation enrichment.
AI PatchLab also adds deterministic patch suggestions through
scanner/remediation/patch_suggestions.py. The engine matches normalized
findings by title, tool, and security keywords, then fills concise patch fields
for known vulnerability patterns:
patch_before - a short vulnerable-code examplepatch_after - a short safer-code exampleremediation_explanation - why the change addresses the issueCurrent patch suggestion patterns cover wildcard CORS, subprocess with
shell=True, SQL injection, hardcoded secrets, credential logging, missing
Subresource Integrity, Python non-literal imports, and JavaScript unsafe format
strings. The Markdown report includes these patch suggestions when a
deterministic rule matches. The module uses a small rule contract so a future
GPT-backed provider can be added without changing the report schema.
AI PatchLab calls the local semgrep executable. It does not bundle Semgrep.
Install Semgrep, add it to PATH, then verify it from PowerShell:
semgrep --version
AI PatchLab runs Semgrep with JSON output:
semgrep scan --config auto --json --output "reports\raw\semgrep.json" "C:\path\to\repo"
If Semgrep is not installed, the full scan still completes and the report
includes one info finding explaining that Semgrep was skipped.
Semgrep severities are normalized as ERROR -> high, WARNING -> medium,
and INFO -> low.
AI PatchLab calls the local gitleaks executable. It does not bundle Gitleaks.
Install Gitleaks for Windows, add it to PATH, then verify it from PowerShell:
gitleaks version
AI PatchLab runs Gitleaks with JSON output:
gitleaks detect --source "C:\path\to\repo" --report-format json --report-path "reports\raw\gitleaks.json" --no-git
If Gitleaks is not installed, the full scan still completes and the report
includes one info finding explaining that Gitleaks was skipped.
Confirmed Gitleaks secret findings are normalized as high severity with
high confidence.
AI PatchLab calls the local trivy executable. It does not bundle Trivy.
Install Trivy for Windows, add it to PATH, then verify it from PowerShell:
trivy --version
AI PatchLab runs Trivy in filesystem mode with JSON output:
trivy fs --format json --output "reports\raw\trivy.json" --scanners vuln,misconfig --no-progress --skip-version-check "C:\path\to\repo"
If Trivy is not installed, the full scan still completes and the report
includes one info finding explaining that Trivy was skipped.
Trivy severities are normalized as CRITICAL -> critical, HIGH -> high,
MEDIUM -> medium, LOW -> low, and UNKNOWN or missing values -> info.
The first Trivy integration normalizes vulnerabilities and misconfigurations;
secret scanning remains owned by Gitleaks.
AI PatchLab calls local pip-audit for Python dependency vulnerability scanning.
It does not bundle pip-audit.
Install pip-audit, then verify it from PowerShell:
python -m pip install pip-audit
pip-audit --version
AI PatchLab writes pip-audit JSON output to reports/raw/pip-audit.json.
For requirements files, it runs pip-audit with one or more --requirement
inputs:
pip-audit --format json --output "reports\raw\pip-audit.json" --progress-spinner off --requirement "C:\path\to\repo\requirements.txt"
If no root requirements file is found, AI PatchLab can audit a local Python
project with pyproject.toml or pylock.*.toml:
pip-audit --format json --output "reports\raw\pip-audit.json" --progress-spinner off "C:\path\to\repo"
pip-audit exit code 0 means no known vulnerabilities were found, and exit code
1 means one or more known vulnerabilities were found. Both are handled as
successful scanner executions. Other failures become info findings so the full
AI PatchLab report still completes.
AI security review is disabled by default. The default scan calls no AI
provider, no hosted model, and no remote or paid API. Reports include one
info finding (ai-review-disabled) explaining the opt-in.
To enable AI review, the user must configure a local command wrapper. AI
PatchLab executes that wrapper directly with subprocess.run(..., shell=False),
captures its JSON output, and normalizes the findings into the shared schema.
Configure with PowerShell environment variables before running a scan:
$env:AI_PATCHLAB_AI_REVIEW_ENABLED = "true"
$env:AI_PATCHLAB_AI_REVIEW_PROVIDER = "local_command"
$env:AI_PATCHLAB_AI_REVIEW_COMMAND = "C:\tools\ai-review-wrapper.cmd"
$env:AI_PATCHLAB_AI_REVIEW_TIMEOUT_SECONDS = "120"
You can also store the same AI_PATCHLAB_AI_REVIEW_* keys in a project .env
file at the repository root.
Supported provider values for v0.1: disabled, local_command. No default
remote provider, endpoint, model, or token variable is shipped. Adding any
future remote provider requires explicit configuration and a new ADR.
AI PatchLab calls the configured wrapper with:
C:\tools\ai-review-wrapper.cmd --repo "C:\path\to\repo" --output "reports\raw\ai-review.json"
The wrapper must either write JSON to the --output path or print JSON to
stdout. When stdout is used and the output file is missing, AI PatchLab writes
the captured stdout to reports/raw/ai-review.json for traceability.
Accepted JSON shapes:
[
{
"id": "ai-review-example",
"severity": "medium",
"title": "Potential unsafe dynamic execution",
"description": "A local AI reviewer flagged a risky execution pattern.",
"file": "src/example.py",
"line": 42,
"recommendation": "Replace with an allowlisted dispatcher.",
"confidence": "medium"
}
]
{
"findings": [
{
"id": "ai-review-example",
"severity": "medium",
"title": "Potential unsafe dynamic execution",
"description": "A local AI reviewer flagged a risky execution pattern.",
"file": "src/example.py",
"line": 42,
"recommendation": "Replace with an allowlisted dispatcher.",
"confidence": "medium"
}
]
}
Each record is normalized to the AI PatchLab finding schema, the tool field
is forced to ai-security-review, and missing patch fields default to empty
strings. Invalid severity or confidence values fall back to safe defaults.
Failure fallback: if AI review is enabled but the configured command is
missing, times out, exits non-zero with no findings, or emits unparseable JSON,
AI PatchLab emits one normalized info finding (ai-review-command-error,
ai-review-json-parse-error, ai-review-no-findings, or
ai-review-not-configured) and the full report still completes.
AI PatchLab v0.1 ships an optional fingerprint module that probes one live URL at a time and reports which of a small curated set of open-source template repositories the site was likely built from. The output is a signal, not an attribution — every report carries a "Probable template match — manual verification required" disclaimer.
What it does:
fingerprint/seeds/repos.json (add new
entries by PR — there is no auto-discovery)scanner/git_source.py:cloned_repo and runs
deterministic extractors (favicon SHA-256, distinctive static asset hashes,
HTML signatures) into fingerprint/db/<slug>.jsonrobots.txt,
caps bytes per asset and total assets per targetreports/fingerprint/What it does NOT do:
--target per invocation is the entire CLI.beautifulsoup4, no lxml, no headless browser).Rebuild the local fingerprint database from the seed list. Each seed is shallow-cloned into a temp directory; the clone is deleted on exit.
python fingerprint/run_index.py --rebuild
# Or index one ad-hoc repo
python fingerprint/run_index.py --repo-url https://github.com/owner/repo
Probe one live URL against the local fingerprint database.
python fingerprint/run_match.py --target https://example.com
# Optional: drop low-score candidates from the Markdown summary
python fingerprint/run_match.py --target https://example.com --min-score 0.3
Reports are written to reports/fingerprint/match_<host>_<UTC-timestamp>.json
and .md. The CLI always exits 0 — an unreachable target, an empty database,
a robots.txt disallow, or an invalid scheme all produce a valid report with
the appropriate notes value.
Configurable via AI_PATCHLAB_FINGERPRINT_* environment variables (or .env):
AI_PATCHLAB_FINGERPRINT_MAX_BYTES_PER_ASSET — bytes cap per asset
(default 524288, i.e. 512 KiB)AI_PATCHLAB_FINGERPRINT_MAX_ASSETS_PER_TARGET — total assets fetched per
target including the homepage (default 16)AI_PATCHLAB_FINGERPRINT_FETCH_READ_TIMEOUT_SECONDS — read timeout
(default 10)AI_PATCHLAB_FINGERPRINT_FETCH_TOTAL_TIMEOUT_SECONDS — connect/write
timeout (default 5)AI_PATCHLAB_FINGERPRINT_USER_AGENT — User-Agent header (default
ai-patchlab-fingerprint/0.1)ai-patchlab/
|-- scanner/ # Scanner CLI, finding model, recommendations, reports
|-- scanner/remediation/ # Deterministic patch suggestion engine
|-- scanner/scanners/ # Semgrep, Gitleaks, Trivy, and dependency adapters
|-- scanner/tools/ # External scanner process runners
|-- fingerprint/ # Web template fingerprinting (experimental)
|-- fingerprint/seeds/ # Curated open-source template seed list
|-- fingerprint/db/ # Generated per-repo fingerprint JSONs
|-- reports/ # Generated security reports
|-- reports/fingerprint/ # Generated fingerprint match reports
|-- src/ # Legacy scaffold entry point
|-- tests/ # pytest tests
|-- examples/ # Reference implementation patterns
|-- PRPs/ # Product Requirements Prompts
|-- docs/ # GitHub Pages site (public scan write-ups)
|-- .claude/ # Claude commands and agents
|-- .agents/ # Codex skills
|-- AGENTS.md # Codex/OpenAI runtime instructions
|-- CLAUDE.md # Claude runtime instructions
`-- pyproject.toml # Dependencies and tool config
--ignore-file accepts a .gitignore-style file whose patterns suppress matching
findings after path rebasing. Patterns match the repo-relative POSIX path of
each finding (e.g. tests/cassettes/foo.yaml). Lines starting with # are
comments; !-prefixed lines re-include previously excluded paths.
Example for a project whose own safety-engine tests embed crafted fake secrets that look real to Gitleaks:
# Crafted fixtures in the safety policy engine tests.
tests/unit_tests/safety_engine/**
# Smoke tests that ship fake API tokens to exercise integrations.
tests/smoke_tests/integrations/**
# Re-include one specific file that's actually worth scanning.
!tests/unit_tests/safety_engine/test_real_findings.py
Findings with an empty file field (e.g. info-level "tool not installed"
placeholders) are never suppressed — they describe infrastructure state, not
file content, and a ** pattern should not silently drop them.
MIT — © 2026 elfrost