SecAudit
Açık kaynakMITYalnızca savunma amaçlı

Açığı bulur.Kanıtını gösterir.

SecAudit bir kaynak kodu deposunu, sahiplik beyan edilmişse çalışan bir hedefi de denetler. Her bulgu; dosyası, satırı ve güvenilmez girdiden tehlikeli çağrıya giden yolu ile birlikte raporlanır.

Claude Code eklentisi olarak ya da bağımsız araç olarak kullanılır. API anahtarı, ücretli plan ve ağ erişimi gerektirmez; çalışma zamanı bağımlılığı bulunmaz.

tek bir bulgu, tam hâliyleTAINT-JS-CMDI
12const host = req.query.host
13exec('ping -c 1 ' + host)
  • CWE-78 · Critical
  • L12 → L13 · argument 0
  • erişilebilir · çürütülebilir

CWE, bulgunun kapsadığı iki satır ve değeri taşıyan argüman — aracın yazdığı biçimiyle. Bir desen eşleyici 13. satırı görür görmez işaretler; bu çekirdek onu 12. satır oraya ulaştığı için raporlar ve kararın arkasındaki yolu da yayımlar.

Ne yapıyor

Tek komut kodu tarar ve bulduğunu raporlar.

Üç aşama; hiçbiri hesap, ağ bağlantısı ya da model gerektirmez.

  • Hedefsecaudit ./repoBir checkout, tek bir dosya ya da sahiplik beyan edildiğinde çalışan bir URL.
  • Analiz115 detector · taint15 dilde desen detector'ları ve güvenilmez girdiyi giriş noktasından onu tüketen çağrıya kadar izleyen bir geçiş.
  • Çıktısarif · sbom · openvex · craHer bulgu; dosyası, satırı ve yolu ile birlikte. Code scanning için SARIF; SBOM, bağımlılık kararları ve CRA kanıt paketi aynı koşudan üretilir.

Tespit oranı

Tespit oranı, iki ayrı veri kümesinde ölçüldü.

Recall, var olan zafiyetlerin bulunan oranıdır. Precision, raporlanan bulguların gerçek olan oranıdır. F3 ikisini birleştirir ve recall'a dokuz kat ağırlık verir; kaçırılan bir zafiyetin maliyeti yanlış alarmdan yüksektir. Tüm rakamlar Tier 0'dır: LLM, dış tarayıcı ve ağ kullanılmaz. Esas alınması gereken, soldaki dış sonuçtur — üçüncü tarafa ait veri kümesi, üçüncü tarafa ait etiketler, üçüncü tarafa ait puanlayıcı.

RealVuln — dış veri kümesi, Python

66 gerçek zafiyetli deponun 62 tanesi. Etiketleme bu projeden bağımsız yapıldı, puanlama kıyaslamanın kendi puanlayıcısıyla gerçekleşti. Yayımlanmış kural tabanlı referans Semgrep, aynı veri kümesinde 17.7% alıyor. Bu veri kümesi Python; JavaScript tarafı ayrıca gerçek npm paketlerindeki 573 etiketli sink üzerinde ölçülüyor ve bunların 54.4% kadarını buluyor.

  • 61.2%F3 (recall × 9)
  • 65.6%precision
  • 60.7%recall
  • 62/ 66 depo

İç fixture'lar — regresyon tabanı

62 etiketli açık ve 62 yanlış pozitif tuzağı; her tuzak, zafiyetli ikizindeki işlevin güvenli uygulamasıdır. Bu rakamlar çekirdeğin çalışmaya devam ettiğini gösterir; başka bir kod tabanı için öngörü niteliği taşımaz.

  • 98.4%recall
  • 100.0%precision (üst sınır)
  • 98.6%F3 (recall ağırlıklı)
  • 0tuzaklarda yanlış pozitif

Aynı puanlayıcı, aynı koşunun daha katı okumasını F3 57.0% olarak raporlar. Kıyaslamanın kendi referanslarıyla karşılaştırma dışındaki her amaç için bu rakam kullanılmalıdır. Ham puanlayıcı çıktısı depoda bulunur; bu sayfadaki bir rakam çıktıyla örtüşmeyi bıraktığında CI başarısız olur.

Açık beyanrakamı aktarmadan önce okuyun

Skor artık körlemesine alınmıyor; bu, rakamı niteler.

Tek veri kümesi üzerinde 30 koşu. İlk koşuda çekirdek bu veri kümesini görmemişti. Sonraki koşularda eklenen kurallar, kıyaslamanın kendi kaçırdığı bulgular okunarak seçildi.

Eklenen kuralların tamamı, herhangi bir SAST aracının içerdiği türdendir; hiçbiri tek bir fixture'a göre uyarlanmamıştır. Ancak seçim veri kümesine bakılarak yapılmıştır: 12.5 ile 61.2 arasındaki fark bu avantajın büyüklüğüdür. Görülmemiş bir kod tabanı için temkinli rakam 12.5'tir. Bu ölçümün dürüst devamı, bu deponun hiç okumadığı yeni bir kıyaslamadır.

Kapsam15

On beş dil, her biri için raporlanan recall.

Fixture veri kümesindeki her dilin eşleştirilmiş zafiyetli ve güvenli birer uygulaması vardır. Aşağıdaki rakamlar, deterministik katmanın her dilde aldığı skordur; tam not almayan diller de listededir.

  • C#100%
  • Dart100%
  • Dockerfile100%
  • Go100%
  • Java100%
  • JSON100%
  • Kotlin100%
  • PHP100%
  • Info.plist100%
  • Python100%
  • Ruby100%
  • Rust100%
  • Terraform100%
  • YAML100%
  • JavaScript94%

Değerler, detector'larla birlikte yazılmış fixture'lar üzerinde ölçülmüştür. Derinlik dile göre değişir: Python ve JS/TS taint analizi ile yapısal geçişleri, diğerleri desen paketini alır. Depodaki dil matrisi koddan üretilir.

YetkilendirmePreToolUse

Aktif test, beyan edilmiş bir yetkilendirme gerektirir.

SecAudit bir checkout'un yanı sıra çalışan bir hedefi de denetler; kapı altına alınan yetenek budur. Pasif keşif izin gerektirmez. Canlı bir hedefe yönelik aktif test, komut çalıştırılmadan önce deterministik bir PreToolUse hook'u tarafından reddedilir; bu, modele verilmiş bir talimat değildir. Sahiplik beyan edildiğinde aynı komut çalışır. Depoya commit'lenmiş bir kapsam dosyası geçerli sayılmaz: bu dosya clone ile birlikte gelir ve operatörün yaptığı bir beyan değildir.

active-scan-guard
$ nuclei -u https://acme.example

18 aktif desen engellendi, 12 pasif desene izin verildi; bu, her build'de hook'un kendi self-test'iyle doğrulanır — Linux ve Windows üzerinde.

Kanıt2026-09-11

Denetçinin talep ettiği belgeler, aynı taramadan üretilir.

Tek bir koşu; dağıtılan bileşenlerin envanterini, her bağımlılık advisory'si için bir kararı ve her bulgunun ilgili maddeye eşlenmesini üretir. AB Siber Dayanıklılık Yasası'nın zafiyet yönetimi yükümlülükleri 2026-09-11 tarihinde yürürlüğe girer. Bulgular ayrıca bir OWASP ASVS 5.0 bölümü ve — gereksinim metni destekliyorsa — bir PCI DSS 4.0.1 maddesi taşır.

Paket, uyumluluk sürecine girdidir; sertifika değildir ve bunu kendi çekince notunda belirtir. Kaynak taramasından beyan edilemeyen gereksinimler, gerekçesiyle birlikte reddedilmiş olarak listelenir.

--format cyclonedx

CycloneDX 1.6 SBOM

Bileşenler, lisanslar, hash'ler.

--format openvex

OpenVEX kayıt defteri

Her advisory için durum ve gerekçe.

--format cra

AB CRA kanıt paketi

Bulgular Ek I maddelerine eşlendi.

--format sarif

SARIF 2.1.0

GitHub code scanning'e yüklenir.

Sınırlar

Çekirdeğin neyi kaçırdığı, çekirdekten üretilir.

Elle güncellenen bir sınırlılıklar sayfası tek bir sürüm boyunca doğrudur, sonrasında eksik beyana dönüşür. Bu liste detector tablosundan ve ölçülmüş kaçırmalardan üretilir; koddan geri kalamaz.

Temiz bir rapor, sınırların tamamı okunmadan sorunsuzluk anlamına gelmez. Aracın ürettiği her rapor kendi sınırlarını da belirtir: ulaşılamayan bir alan varsa rapora kaydedilir.

  • 1

    İş mantığı hataları

    İhlal edilen kurallar ürüne aittir ve analizcinin okuyabileceği hiçbir yerde kayıtlı değildir. Bu sınıfa yalnızca model katmanı ulaşır ve o katmanın ölçülmüş bir skoru yoktur.

  • 2

    Handler düzeyinde bozuk erişim denetimi

    Dış veri kümesindeki 76 etiketli vakadan 2 tanesi tespit edildi. Bu etiketlerin çoğu bir fonksiyon tanımının üzerindedir: kusur, handler'ın döndürdüğü her şeyin özelliğidir.

  • 3

    Yarış koşulları ve TOCTOU

    Tespit, iş parçacıklarının araya girme modelini gerektirir. Sözdizimsel bir geçiş tek bir yürütmeyi okur, eşzamanlı iki yürütmeyi değil.

  • 4

    Dinamik çağrı çözümlemesinin arkasındaki kod

    Bir değişken, decorator ya da dağıtım tablosu üzerinden yapılan çağrılar çözümlenmez. Bu kenarın tahmin edilmesi, analizin gerçek sink'leri yanlış fonksiyona atfetmeye başlaması demektir.

Kurulum

Claude Code'da iki satır ya da tek bir pip install.

En sık kullanılan iki yöntem. Toplam 6 yüzey vardır: MCP sunucusu, GitHub Action, konteyner imajı ve pre-commit hook'ları kalan dördüdür. Hepsi aynı çekirdeği çalıştırır, hiçbiri diğerinin kısıtlanmış sürümü değildir.

  • 115deterministik detector
  • 62etiketli fixture açığı
  • 45CI kapısı
  • 57ASVS 5.0'a eşlenmiş CWE

Claude Code eklentisi olarak:

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

Bağımsız kullanım — Claude Code, API anahtarı ve ücretli plan gerekmez, çalışma zamanı bağımlılığı bulunmaz. CI'da, cron'da ve ağdan yalıtılmış makinelerde çalışır:

python3 -m secaudit_core.cli ./repo --min high
python3 -m secaudit_core.cli ./repo --format sarif   # GitHub code scanning
python3 -m secaudit_core.cli ./repo --format cra     # EU CRA evidence pack

Denetimi, istenmeden önce tamamlayın.

SecAudit bir depoyu ya da sahipliği beyan edilmiş çalışan bir hedefi tarar. Deterministik katman yalnızca Python gerektirir ve kendi kapsam sınırlarını raporlar.