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.
- 6giriş yolu
- 4slash komutu
- 6MCP aracı
- 0çalışma zamanı bağımlılığı
- 01Claude Code eklentisi
/secaudit .Canlı hedef dahil tam P1–P10 metodolojisi. - 02Bağımsız CLI
pip install secaudit-kitAnahtar yok, plan yok, ağ yok. Sıfır bağımlılık. - 03MCP sunucusu
python3 -m secaudit_mcpCodex, Cursor, OpenCode — aynı çekirdek. - 04GitHub Action
uses: mtvrkan/secauditHer push'ta code scanning'e SARIF. - 05Docker
docker run secauditDigest'e pinli, root değil, SBOM ekli. - 06pre-commit
repo: mtvrkan/secauditDala ulaşmadan yakalayın.
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.
| Durum | Yüzey | Maliyeti |
|---|---|---|
| Mevcut bir Claude Code iş akışı | Claude Code eklentisi | İki satır; canlı hedef izi beraberinde |
| CI, pull request'lere kapı | GitHub Action | On satır workflow, kurulum adımı yok |
| Codex, Cursor, OpenCode ya da başka bir MCP istemcisi | MCP sunucusu | Tek config girdisi |
| Yerel, betiklenebilir ve çevrimdışı kullanım | Bağımsız CLI | Tek paket, sıfır bağımlılık |
| Sabit araç zinciri, izole tarayıcı | Docker | Tek derleme, root değil |
| Commit'ten sonra değil, önce | pre-commit | Yalnı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.
- 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
- 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.
- Command
python3(orpythonon 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_mcpCodex 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"] } } }OpenCode — opencode.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
- 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
secauditSecAudit (staged files, deterministic pass)
--min high --no-deps --no-scanners - 2
secaudit-secretsSecAudit (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.
- semgrep
pipx install semgrepSAST (code) - gitleaks
brew/scoop install gitleakssecret detection - osv-scanner
go 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.