SecAudit
6 yüzeytek çekirdekv1.0.0

Tek çekirdek.Her giriş yolu.

Eklenti, CLI, MCP sunucusu, Action, imaj ve hook'lar aynı deterministik katmanı çalıştırır — dış sayıyı taşıyan katmanı. Hiçbiri diğerinin kısıtlanmış sürümü değildir; uygun yüzey, iş akışında zaten bulunandır. Bu sayfadaki her komut derleme anında onu tanımlayan dosyadan okunur; adı değişen bir bayrak kullanıcının terminalini değil, bu derlemeyi kırar.

Bu yolların hiçbiri API anahtarı gerektirmez. Deterministik katman ağ ve hesap istemez; isteğe bağlı model katmanı etkinleştirilene kadar kapalı kalır. Manifestlerden birebir okunan açıklamalar İngilizcedir: çevrilmiş bir kopya, kaynak dosya değiştiğinde sessizce yanlış hâle gelirdi.

Yüzey seçimi

Hangi yüzey — tek tabloda.

Aynı çekirdek, aynı bulgular, aynı rapor. Değişen şey: kimin çalıştırdığı, ne zaman çalıştığı ve neye erişmesine izin verildiği.

DurumYüzeyMaliyeti
Mevcut bir Claude Code iş akışıClaude Code eklentisiİki satır; canlı hedef izi beraberinde
CI, pull request'lere kapıGitHub ActionOn satır workflow, kurulum adımı yok
Codex, Cursor, OpenCode ya da başka bir MCP istemcisiMCP sunucusuTek config girdisi
Yerel, betiklenebilir ve çevrimdışı kullanımBağımsız CLITek paket, sıfır bağımlılık
Sabit araç zinciri, izole tarayıcıDockerTek derleme, root değil
Commit'ten sonra değil, öncepre-commitYalnızca staged dosyalar, bir saniyenin altında

Tek gerçek asimetri canlı hedef. Çalışan bir sistemi yoklamak insan kararıdır, o yüzden yalnızca eklentide ve yalnızca yetkilendirme kapısının arkasında var — diğer satırlardan hiçbiri bir host'a ulaşmaz. Geri kalan her şey aynı kod: detector'lar, taint analizi, bağımlılık erişilebilirlik geçişi ve kanıt paketi.

1 / 6Claude Code

Eklenti: canlı hedef dahil metodolojinin tamamı.

Claude Code isteminde iki satır. Marketplace ve eklenti kimlikleri .claude-plugin/marketplace.json dosyasından geliyor — Claude Code'un kendisinin okuduğu dosya — böylece bu sayfa bir sürüm önce adı değişmiş bir marketplace'i anamaz. Canlı hedef izine sahip tek yüzey ve P1–P10'u baştan sona çalıştıran tek yüzey bu; diğerleri altındaki deterministik çekirdek.

Aktif test, scope.yaml içinde sahiplik beyan edilene kadar engellidir. Bu bir PreToolUse hook'udur, modele verilmiş bir talimat değil: çağrıyı harness reddeder, dolayısıyla konuşma içindeki hiçbir ikna, sahiplenilmemiş bir host'a ulaşmaz.

/plugin marketplace add mtvrkan/secaudit
/plugin install secaudit@secaudit-kit
/secaudit .

Sonra /secaudit yazın. Komut, argüman ipucuyla birlikte görünmeli — görünmüyorsa marketplace eklenmiş ama eklenti kurulmamıştır.

plugins/secaudit/commands/4
  • 1

    /secaudit<url | path> [--lang tr|en] [--passive] [--active] [--code] [--deps]

  • 2

    /secaudit-code[path] [--lang tr|en]

  • 3

    /secaudit-deps[path] [--lang tr|en]

  • 4

    /secaudit-passive<url> [--lang tr|en]

2 / 6anahtar yok, ağ yok

CLI: etrafında hiçbir şey olmayan aynı çekirdek.

secaudit-kit yalnızca secaudit komutunu kurar — hesap yok, anahtar yok, plan yok ve güvenmeden önce denetlemeniz gereken bir çalışma zamanı bağımlılığı yok. Ağ kablosu çıkarılmış bir makinede çalışır ki denetlenmeye değer kodun çoğu tam olarak o durumda yaşar. Python 3.9 veya üzeri.

İlk sürüm yayımlanana kadar pip install secaudit-kit komutu, başka birinin paketiyle başarılı olabilecek bir komuttur: bekleyen bir trusted publisher ismi rezerve etmez. Yukarıdaki git+… satırı sürüm gerektirmez ve kesindir. Sıfır bağımlılık iddiası ise bir cümle değil, bir derleme kapısı: assert_no_runtime_deps.py bir bağımlılık eklendiği anda derlemeyi kırar ve bu paragrafın yanındaki liste kit/pyproject.toml'dan okunur.

# the released package
pip install secaudit-kit

# or the same package from any commit, no release needed
pip install "git+https://github.com/mtvrkan/secaudit#subdirectory=kit"

secaudit .                             # audit this tree
secaudit . --min high --format sarif   # for GitHub code scanning
secaudit . --since main                # only what this branch introduced
kit/pyproject.toml
  • packagesecaudit-kit
  • version1.0.0
  • python>=3.9
  • commandssecaudit, secaudit-mcp
  • runtime depsnone

3 / 6stdio

MCP sunucusu: Codex, Cursor, OpenCode ve sıradaki ne olursa.

stdio üzerinden tek süreç, 6 araç, eklentinin ve CLI'ın çalıştırdığı çekirdeğin aynısı. Her harness için ayrı bir uygulama, iki istemcinin bir dosyanın güvenli olup olmadığı konusunda anlaşmazlığa düşmesinin yoludur — o yüzden yok: yayımlanan sayı bu sunucuyu da anlatır.

Buradaki hiçbir araç URL, host veya endpoint kabul etmez ve test paketi hiçbir şemanın böyle bir alan kazanmadığını doğrular. Bir tools/call, yoklamayı birinin yetkilendirdiğine dair kanıt taşımaz; kendisine verilen her şeyi tarayan bir araç, prompt injection'ın önüne koyduğu her şeyi tarayan bir araçtır.

her istemcinin ihtiyacı
  • Commandpython3 (or python on Windows)
  • Arguments-m, secaudit_mcp
  • Transportstdio
python3 -m secaudit_mcp --tools        # prints the tool manifest and exits

İstemci başına

Claude Code — the plugin is the better path here, but the server works too

claude mcp add secaudit -- python3 -m secaudit_mcp

Codex CLI~/.codex/config.toml

[mcp_servers.secaudit]
command = "python3"
args = ["-m", "secaudit_mcp"]

Cursor.cursor/mcp.json in the project, or the global equivalent

{ "mcpServers": { "secaudit": { "command": "python3", "args": ["-m", "secaudit_mcp"] } } }

VS Code / Copilot CLI.mcp.json or .vscode/mcp.json

{ "servers": { "secaudit": { "command": "python3", "args": ["-m", "secaudit_mcp"] } } }

OpenCodeopencode.json

{ "mcp": { "secaudit": { "type": "local", "command": ["python3", "-m", "secaudit_mcp"] } } }

4 / 6pull request kapısı

Action: değişikliğin getirdiğine kurulan kapı.

Bir sürüm kurmak yerine checkout'taki kodu çalıştırır; denetlenen sürüm, incelenen commit olur ve bir güvenlik tarayıcısının ele geçirilmiş sürümünün, depo zaten checkout edilmişken çalıştığı bir pencere oluşmaz. Pull request'te varsayılan olarak base dalla karşılaştırır; kapı, değişikliğin getirdiği bulgulara tepki verir, getirmediklerine sessiz kalır.

comment varsayılan olarak kapalı. Bir workflow, birinin dokümanındaki örnekte bayrak açık kaldı diye pull request'lerinize yazma yetkisi kazanmamalı.

.github/workflows/security.yml

- uses: actions/checkout@v5
    with: { fetch-depth: 0 }      # so --since can see the base branch
- uses: mtvrkan/secaudit@v1.0.0
    with:
      fail-on: high
      sarif: audit.sarif

5 / 6root değil

İmaj: depodan derlenen sabit bir araç zinciri.

Çekilecek bir imaj yoktur; bu tasarım gereğidir. İmaj, depodaki Dockerfile'dan derlenir. Taban imaj etikete değil digest'e sabitlenmiştir, dolayısıyla bugün derlenen imaj başkasının geçen ay derlediği imajın aynısıdır ve içine giren her şey tek dosyada okunabilir.

Yetkisiz bir uid'ye düşer ve yukarıdaki çalıştırma, ağacı salt okunur bağlar. Bir tarayıcının taradığı şeye yazma erişimine ihtiyacı yoktur; bunun önem kazandığı tek durum, hedefin kurcalanmış olduğu durumdur.

docker build -t secaudit .
docker run --rm -v "$PWD:/src:ro" secaudit /src --min high
Dockerfile
  • basepython:3.12-slim-bookworm
  • pinned tosha256:4766d8b510c428e595d74b9cc5bbb2fae8e26316fffb4adc89908d79aacd58a2
  • runs asuid 10001
  • entrypointsecaudit

6 / 6staged dosyalar

Hook'lar: daldan önce, dal oluştuktan sonra değil.

İki hook, ikisi de commit edilen dosyalarla sınırlı. Burada bütçe kapsamdan önemlidir: on saniye süren bir hook bir hafta içinde --no-verify ile atlanır ve atlanan hook hiçbir şey yakalamaz. Bu yüzden varsayılan, bağımlılık ve dış tarayıcı katmanları kapalı hâldeki deterministik geçiş; tam denetim yavaş olmayı kaldırabildiği yerde, CI'da kalır.

Tam hook bir depoda hayatta kalamayacak kadar yavaşsa dar olanı uygulanır. Bir sır, sonradan telafisi en zor bulgudur; commit'e girdiği anda geçmiştedir. Dolayısıyla yalnızca sırların yakalanması, hiçbir şeyin yakalanmamasından kat kat değerlidir.

.pre-commit-config.yaml

repos:
  - repo: https://github.com/mtvrkan/secaudit
    rev: v1.0.0
    hooks:
      - id: secaudit
  • 1

    secaudit

    SecAudit (staged files, deterministic pass)
    --min high --no-deps --no-scanners

  • 2

    secaudit-secrets

    SecAudit (secrets only)
    --min high --no-deps --no-scanners --no-taint --only secret

İsteğe bağlı, asla zorunlu değil

PATH üzerinde bulunduklarında kullanılan dış tarayıcılar.

Çekirdeğin kendi bulguları bunların hiçbirine bağlı değildir. Kurulu olan aracın sonuçları birleştirilir ve o araca atfedilir; kurulu olmayan için rapor bunu belirtir ve neyi aradığını sessizce daraltmaz. Temiz bir sonuç, iki makinede de aynı anlama gelmelidir.

  • semgreppipx install semgrepSAST (code)
  • gitleaksbrew/scoop install gitleakssecret detection
  • osv-scannergo install github.com/google/osv-scanner/v2/cmd/osv-scanner@latestdependency CVEs

Bunların hiçbiri kurulu değilken yapılan bir tarama yine her detector'ı, taint analizini ve bağımlılık erişilebilirlik geçişini çalıştırır. Canlı mod araç zinciri — testssl.sh ve gerisi — çekirdeğe değil eklentiye aittir ve tamamı docs/tooling-setup.md içinde listelidir.

Kurulumdan sonra.

Getting started ilk taramayı, yetkilendirme kapısını ve rapor formatlarını adım adım anlatır. Kıyaslama sayfasında dış sayı ve arkasındaki her şey var.