العودة إلى التحديثات
New releaseAug 16, 2026

k8scout v0.1.2

قم بإسقاط ملف ثنائي واحد في Pod Kubernetes مخترق وقم فورًا بتخطيط كل مسار هجوم واقعي إلى cluster-admin، node escape، secret theft، و cloud IAM takeover.

مشاركة

شعار k8scout

نجوم GitHub شوكات GitHub مشكلات GitHub رخصة GitHub

k8scout

بيتا — محرك مسارات الهجوم على Kubernetes بشكل ثنائي واحد لتقييمات الأمان المصرح بها.

أسقطه في جراب مخترق، وشغّله، واحصل على خريطة لكل مسار تصعيد واقعي — من موقعك الحالي إلى مدير العنقود، وصول العقدة، سرقة الأسرار، وأدوار IAM السحابية.


الفكرة

لديك RCE في جراب Kubernetes. ماذا بعد؟

يجيب k8scout على هذا السؤال. يكتشف تلقائيًا ما يمكن لحساب خدمة الجراب المخترق فعله، ويرسم خريطة RBAC، ويتتبع مسارات الهجوم متعددة الخطوات من موقعك الحالي إلى الأهداف عالية القيمة.

يعمل في ثلاثة أوضاع:

  • الوضع الهجومي (افتراضي) — التشغيل من داخل جراب مخترق. يكتشف هويتك، وأذوناتك، وجميع مسارات التصعيد القابلة للوصول من موقعك الحالي.
  • وضع المراجع (--reviewer-mode) — التشغيل بحساب خدمة للقراءة فقط لتدقيق سطح الهجوم الكامل للعنقود لجميع الهويات.
  • وضع الاستطلاع (--recon) — نظرة سريعة منخفضة البصمة على هويتك فقط، والأذونات الفعلية، والموارد التي يمكنك لمسها. بدون رسم بياني أو إيجاد مسار. أضف --bruteforce-ns لاكتشاف مساحات الأسماء التي لا يمكنك سردها على مستوى العنقود.

عرض توضيحي

عرض k8scout توضيحي


ما يكتشفه

يبني k8scout رسمًا بيانيًا موزونًا للأذونات ويشغل إيجاد المسار القائم على Dijkstra لاكتشاف سلاسل هجوم واقعية متعددة الخطوات:

  • من الجراب إلى مدير العنقود — عبر روابط RBAC، أو تعديل عبء العمل، أو إنشاء CRB
  • الهروب من الحاوية إلى العقدة — عبر حاويات مميزة، hostPID، hostNetwork، قدرات خطيرة، أو تركيبات hostPath
  • الحركة الجانبية — تنفيذ أوامر في جرابات أخرى، سرقة رموز حسابات الخدمة الخاصة بها، التمرير عبر أذوناتها
  • سرقة الأسرار وبيانات الاعتماد — رموز حسابات الخدمة المثبتة، الأسرار، configmaps مع بيانات اعتماد مسربة، رموز مهملة
  • تصعيد IAM السحابي — IRSA (AWS)، GKE Workload Identity، Azure Workload Identity، إساءة استخدام جمهور الرمز المسقط
  • سلاسل الانتحال — استيلاء SA-to-SA عبر أذونات الانتحال
  • تعديل عبء العمل — تصحيح نشر لتغيير حساب الخدمة الخاص به، ثم وراثة أذونات حساب الخدمة هذا
  • حقن webhook — التحكم في webhook متحول للحقن في أعباء العمل المستقبلية
  • إساءة استخدام مشغل GitOps — ArgoCD، Flux، External Secrets، وتصعيد صلاحيات مشغل Vault
  • اكتشاف سوء التكوين — روابط معلقة، أفعال wildcard، رموز مثبتة تلقائيًا، أسرار نصية واضحة في متغيرات البيئة

كل نتيجة تتضمن معرفات تقنية MITRE ATT&CK، ودرجة مخاطر، ومسار هجوم خطوة بخطوة مع العقد الفعلية للرسم البياني المعنية. إجمالي 50 قاعدة كشف.


بدء سريع

من داخل جراب مخترق (حالة الاستخدام الأساسية)

# Copy the binary into the pod
kubectl cp k8scout-linux-amd64 <ns>/<pod>:/tmp/k8scout

# Run it
kubectl exec -it <ns>/<pod> -- chmod +x /tmp/k8scout
kubectl exec -it <ns>/<pod> -- /tmp/k8scout --out /tmp/result.json

# Pull the results
kubectl cp <ns>/<pod>:/tmp/result.json ./result.json

# This flow works exactly like this in you're revshell!

يكتشف الثنائي تلقائيًا أنه يعمل داخل العنقود، ويحدد الجراب وحساب الخدمة، ويبدأ إيجاد المسار من موقعك الحالي.

الاستخدام المقصود: مهام اختبار الاختراق، عمليات الفريق الأحمر، مراجعات الأمان الداخلية، وتدقيق تعزيز العنقود. احصل دائمًا على التصريح المناسب قبل التشغيل ضد أي عنقود.

من جهازك المحلي

# Uses ~/.kube/config or $KUBECONFIG
k8scout --all-namespaces --out result.json

# Target a single namespace
k8scout --namespace production --out result.json

وضع الاستطلاع (فحص سريع للأذونات والموارد)

# Who am I, what can I do, and what resources can I access?
k8scout --recon

# Discover namespaces you can't list cluster-wide (built-in wordlist)
k8scout --recon --bruteforce-ns

# Bruteforce with your own namespace wordlist (one name per line)
k8scout --recon --bruteforce-ns --ns-wordlist ./namespaces.txt

يتجاوز وضع الاستطلاع بناء الرسم البياني والاستدلال والذكاء الاصطناعي — إنها أسرع طريقة للإجابة على "ما الذي يمتلكه هذا الرمز فعليًا؟". يُبلغ عن الهوية الحالية، وأذوناتها الفعلية (SelfSubjectRulesReview)، ومصفوفة قدرات لكل مورد (SelfSubjectAccessReview). --bruteforce-ns يؤكد وجود مساحة اسم عبر قراءة كائنات معروفة تمتلكها كل مساحة اسم (كائن مساحة الاسم نفسه، حساب الخدمة الافتراضي default، أو ConfigMap kube-root-ca.crt) — مفيد عندما لا تستطيع الهوية سرد مساحات الأسماء ولكن قد تظل قادرة على الوصول إلى مساحات محددة.

وضع المراجع (تدقيق كامل للعنقود)

# Deploy the read-only RBAC and job
kubectl apply -f deploy/rbac.yaml
kubectl apply -f deploy/job.yaml

# Or run directly with reviewer permissions
k8scout --reviewer-mode --all-namespaces --out result.json

مع سرد ذكاء اصطناعي

export OPENAI_API_KEY="sk-..."
k8scout --all-namespaces --out result.json

التثبيت

ثنائيات مُجمّعة مسبقًا

نزّلها من صفحة الإصدارات. جميع الثنائيات مرتبطة بشكل ثابت بدون اعتماديات.

الملف الثنائيالمنصة
k8scout-linux-amd64لينكس x86-64
k8scout-linux-arm64لينكس ARM64
k8scout-darwin-amd64ماك Intel
k8scout-darwin-arm64ماك Apple Silicon

البناء من المصدر

يتطلب Go 1.22+.

git clone https://github.com/hac01/k8scout
cd k8scout
make build          # native binary
make build-linux    # static Linux amd64 binary
make build-all      # all four release targets

كيف يعمل

k8scout (running inside compromised pod)
 |
 ├── 1. Detect foothold
 │     Pod name (HOSTNAME), SA (TokenReview), Node (downward API)
 │
 ├── 2. Discover permissions
 │     SSRR per namespace + ~30 concurrent SSAR spot-checks
 │     (always permitted, no RBAC needed)
 │
 ├── 3. Enumerate cluster objects (graceful degradation if denied)
 │     Namespaces, RBAC, Workloads, Pods, Secrets, Nodes, Webhooks, CRDs
 │
 ├── 4. Build attack graph
 │     Nodes: pods, SAs, roles, bindings, secrets, workloads, nodes, cloud identities
 │     Edges: runs_as, mounts, authenticates_as, can_exec, can_patch,
 │            can_impersonate, runs_on, assumes_cloud_role, granted_by, ...
 │
 ├── 5. Find attack paths (Dijkstra from foothold to high-value targets)
 │     Weighted by attacker effort — cheapest (most realistic) paths first
 │     Targets: cluster-admin, nodes, SA tokens, cloud IAM, privileged workloads
 │
 ├── 6. Run inference rules (50 rules with MITRE ATT&CK mapping)
 │
 ├── 7. Optional: AI risk narrative (GPT-4o)
 │
 └── 8. Output: text summary + JSON report

حتى مع حساب خدمة ضئيل لا يمكنه سرد الجرابات أو كائنات RBAC، يقوم الأداة بتجميع رسم بياني للتواجد من بيانات الهوية وحدها وتكتشف ما يمكن الوصول إليه عبر أذونات SSRR/SSAR.


تصور الرسم البياني للهجوم

حمّل تقرير JSON في web/graph.html في أي متصفح (سحب وإفلات، لا حاجة لخادم).

  • علامة التبويب مسارات الهجوم — مرتبة حسب درجة المخاطر، كل منها يظهر السلسلة الكاملة متعددة القفزات من نقطة البداية إلى الهدف
  • عرض السلاسل المتعددة — تصور مسارات الهجوم المتداخلة في وقت واحد على رسم بياني واحد
  • رسم بياني موجه بالقوة — جميع العقد والحواف مع تصنيفات ملونة وحلقات درجة المخاطر
  • وضع التركيز — يخفف الضوضاء الهيكلية لإبراز العقد ذات الصلة بالهجوم
  • زر تبديل RBAC — يخفي عقد RBAC لكنه يظهرها تلقائيًا عندما تكون جزءًا من مسار هجوم نشط
  • الخريطة المصغرة — التنقل في الرسوم البيانية الكبيرة دون فقدان السياق
  • تفاصيل العقدة — انقر على أي عقدة للحصول على البيانات الوصفية والاتصالات والنتائج ذات الصلة
  • التصدير — تنزيل تقرير اختبار اختراق HTML مستقل

مرجع سطر الأوامر

k8scout [flags]

Flags:
  --out string            Output JSON file path (default "k8scout-result.json")
  --namespace string      Enumerate a single namespace
  --all-namespaces        Enumerate all accessible namespaces (default true)
  --format string         Output format: text | json (default "text")
  --timeout int           Per-request timeout in seconds (default 60)
  --log-level string      debug | info | warn | error (default "info")
  --kubeconfig string     Path to kubeconfig (auto-detected if not set)
  --reviewer-mode         Full cluster RBAC audit for all identities
  --recon                 Quick recon: identity, permissions (SSRR), accessible resources (SSAR)
  --bruteforce-ns         Bruteforce namespace names to find ones you can't list (use with --recon)
  --ns-wordlist string    Custom namespace wordlist for --bruteforce-ns (defaults to a built-in list)
  --stealth               Skip SSRR/SSAR to reduce audit log footprint
  --skip-ssar             Skip SSAR spot-checks only
  --openai-key string     OpenAI API key (or OPENAI_API_KEY env var)
  --openai-model string   OpenAI model (default "gpt-4o")
  --skip-ai               Skip AI narrative generation

متطلبات RBAC

عند التشغيل من جراب مخترق: لا حاجة إلى RBAC خاص. SSRR و SSAR مسموحان دائمًا. تتدهور الأداة بشكل أنيق إذا لم يستطع حساب الخدمة سرد كائنات العنقود — فهي تكتشف الأذونات وتولد النتائج مما هو متاح.

للتعداد الكامل (موصى به لحساب خدمة k8scout): وصول للقراءة فقط معرف في deploy/rbac.yaml:

  • namespaces, nodes: get, list
  • serviceaccounts, secrets (metadata only), configmaps: get, list
  • pods, deployments, daemonsets, statefulsets, jobs, cronjobs: get, list
  • roles, rolebindings, clusterroles, clusterrolebindings: get, list
  • mutatingwebhookconfigurations, validatingwebhookconfigurations: get, list

لا تُقرأ قيم الأسرار أبدًا إلا إذا أكدت الهوية إذن GET عبر SSAR.


ملاحظات عن الإصدار بيتا

k8scout في مرحلة تطوير نشطة. إذا واجهت خطأ، أو نتيجة إيجابية كاذبة، أو فجوة في الاكتشاف في عنقودك، فيرجى فتح مشكلة. النتائج الإيجابية الكاذبة والمسارات المفقودة مفيدة بشكل خاص — يرجى تضمين JSON النتيجة مجهولة المصدر إذا كان ذلك ممكنًا.


الترخيص

MIT

الفئات