Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
octoscan — Octoscan هو ماسح ثغرات أمنية ثابت لسير عمل GitHub Actions. | Kitploit
أدوات/GitHubGitHub/synacktiv/octoscan
التحليل الثابتماسحات الثغرات الأمنيةتحليل الكودتدقيق التكوينDevSecOpsكشف الأسرارأمن سلسلة التوريدسوء التكوين
GitHubsynacktiv/octoscan

octoscan

Octoscan هو ماسح ثغرات أمنية ثابت لسير عمل GitHub Actions.

عرض المستودع
273218منذ 5 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
:octocat:

octoscan

Octoscan هو ماسح ضوئي ثابت للثغرات الأمنية في سير عمل GitHub Actions.


جدول المحتويات

  • جدول المحتويات
  • التثبيت
  • الاستخدام
    • تنزيل سير العمل عن بُعد
    • التحليل
    • إجراء GitHub
  • القواعد
    • dangerous-checkout
    • dangerous-action
    • dangerous-write
    • expression-injection
    • runner-label
    • repo-jacking
    • unsecure-commands
    • bot-check
    • known-vulnerability
    • dangerous-artefact
    • credentials
    • shellcheck
    • local-action
    • oidc-action
  • شكر وتقدير
  • الموارد

التثبيت

root@kitploit:~
$ go mod tidy
$ go build

أو باستخدام docker:

root@kitploit:~
$ docker pull ghcr.io/synacktiv/octoscan:latest

الاستخدام

تنزيل سير العمل عن بُعد

يمكن تشغيل Octoscan على مستودع git محلي، أو يمكنك تنزيل جميع سير العمل باستخدام إجراء dl:

root@kitploit:~
$ octoscan dl -h  
Octoscan.

Usage:
	octoscan dl [options] --org <org> [--repo <repo> --token <pat> --default-branch --max-branches <num> --path <path> --output-dir <dir> --include-archives]

Options:
	-h, --help  						Show help
	-d, --debug  						Debug output
	--verbose  						Verbose output
	--org <org>  						Organizations to target
	--repo <repo>  						Repository to target
	--token <pat>  						GHP to authenticate to GitHub
	--default-branch  					Only download workflows from the default branch
	--max-branches <num>  					Limit the number of branches to download
	--path <path>  						GitHub file path to download [default: .github/workflows]
	--output-dir <dir>  					Output dir where to download files [default: octoscan-output]
	--include-archives  					Also download archived repositories
root@kitploit:~
./octoscan dl --token ghp_<token> --org apache --repo incubator-answer

التحليل

إذا كنت لا تعرف ما الذي يجب تشغيله، فشغّل هذا:

root@kitploit:~
./octoscan scan path/to/repos/ --disable-rules shellcheck,local-action --filter-triggers external

سيؤدي ذلك إلى تقليل النتائج الإيجابية الخاطئة ومنح النتائج الأكثر إثارة للاهتمام.

إذا قمت بتنزيل سير العمل باستخدام أمر dl، فقد تحصل على سير عمل مكررة لأن octoscan سينزّل افتراضيًا جميع سير العمل من جميع الفروع. لحذف سير العمل المكررة وتسريع التحليل، يمكنك استخدام أمر fdupes قبل تشغيل التحليل:

root@kitploit:~
fdupes -n -r -N -d path/to/repo
root@kitploit:~
$ octoscan scan -h
octoscan

Usage:
	octoscan scan [options] --list-rules
	octoscan scan [options] <target>
	octoscan scan [options] <target> [--debug-rules --filter-triggers=<triggers> --filter-run --ignore=<pattern> ((--disable-rules | --enable-rules ) <rules>) --config-file <config>]

Options:
	-h, --help
	-v, --version
	-d, --debug
	--verbose
	--format <format>  				Output format, json, sarif or custom template to format error messages in Go template syntax. See https://github.com/rhysd/actionlint/tree/main/docs/usage.md#format
	--oneline 					Use one line per one error. Useful for reading error messages from programs

Args:
	<target>					Target File or directory to scan
	--filter-triggers <triggers>			Scan workflows with specific triggers (comma separated list: "push,pull_request_target" or pre-configured: external/allnopr)
	--filter-run					Search for expression injection only in run shell scripts.
	--ignore <pattern>				Regular expression matching to error messages you want to ignore.
	--disable-rules <rules>				Disable specific rules. Split on ","
	--enable-rules <rules>				Enable specific rules, this will disable all other rules. Split on ","
	--debug-rules					Enable debug rules.
	--config-file <config>				Config file.

Examples:
	$ octoscan scan ci.yml --disable-rules shellcheck,local-action --filter-triggers external

إجراء GitHub

يمكن أيضًا استخدام هذه الأداة مباشرةً كإجراء GitHub لفحص مستودعك عند أحداث push/pull_request. لمزيد من المعلومات، يرجى الاطلاع على هذا المستودع.

القواعد

يمكن العثور على القائمة الكاملة للقواعد باستخدام هذا الأمر:

root@kitploit:~
$ octoscan scan --list-rules  
2024/08/07 16:50:48 [INFO] Available rules
- shellcheck
	Checks for shell script sources in "run:" using shellcheck
- credentials
	Checks for credentials in "services:" configuration
- dangerous-action
	Check for dangerous actions.
- dangerous-checkout
	Check for dangerous checkout.
- expression-injection
	Check for expression injection.
- dangerous-write
	Check for dangerous write operation on $GITHUB_OUTPUT or $GITHUB_ENV.
- local-action
	Check for local actions.
- runner-label
	Checks for GitHub-hosted and preset self-hosted runner labels in "runs-on:"
- unsecure-commands
	Check 'ACTIONS_ALLOW_UNSECURE_COMMANDS' env variable.
- known-vulnerability
	Check for known vulnerabilities.
- bot-check
	Check for if statements that are based on a bot identity.
- dangerous-artefact
	Check for workflow that upload artefacts containing sensitive files.
- debug-external-trigger
	Check for workflow that can be externally triggered.
- debug-artefacts
	Check for workflow that upload artefacts.
- debug-js-exec
	Check for workflow that execute system commands in JS scripts.
- debug-oidc-action
	Check for OIDC actions.
- repo-jacking
	Verify that external actions are pointing to a valid GitHub user or organization.

dangerous-checkout

المشغلات مثل workflow_run أو pull_request_target تعمل في سياق مميَّز، حيث تمتلك صلاحية قراءة الأسرار وربما صلاحية كتابة على المستودع المستهدف. إجراء عملية checkout صريحة على الكود غير الموثوق سيؤدي إلى تنزيل كود المهاجم في هذا السياق.

excalidraw

أمثلة

  • FreeRDP
  • Excalidraw
  • AutoGPT
  • Cypress
  • Apache Doris
  • Angular

dangerous-action

تحذّر هذه القاعدة المستخدم إذا تم استخدام إجراء خطير. وهي تركّز بشكل أساسي على القطع الأثرية غير الموثوقة.

من الشائع استخدام القطع الأثرية (artifacts) لنقل البيانات بين سير العمل المختلفة. كثيرًا ما نواجه هذا مع مشغّل workflow_run حيث يقوم سير العمل المُشغِّل بإعداد بعض البيانات التي سيتم إرسالها بعد ذلك إلى سير العمل المُشغَّل. نظرًا للطبيعة غير الموثوقة لبيانات القطع الأثرية هذه، فمن الضروري التعامل معها بحذر والاعتراف بها كتهديد محتمل. تنشأ الثغرة من حقيقة أن كيانات خارجية، مثل جهات خبيثة، يمكنها التأثير على محتوى بيانات القطعة الأثرية.

ant-design

أمثلة

  • ant-design
  • Swagger-editor
  • Firebase
  • Firebase
  • Rust

dangerous-write

ينشئ GitHub متغيرات بيئة افتراضية يمكن استخدامها داخل كل خطوة في سير العمل. المتغيران GITHUB_ENV وGITHUB_OUTPUT مثيران للاهتمام بشكل خاص. من الممكن تعريف متغير بيئة في خطوة واستخدام هذا المتغير في خطوة أخرى، وذلك بكتابته إلى المتغير المرتبط به. إذا تمكن المستخدم من التحكم في محتوى المتغير الذي يتم تعيينه، فقد يؤدي ذلك إلى تنفيذ كود عشوائي.

swagger

أمثلة

  • Swagger-editor
  • dgraph-io/badger
  • Firebase
  • microsoft/vscode-github-triage-actions

expression-injection

يأتي كل مشغّل سير عمل مع سياق GitHub مرتبط به، يوفر معلومات شاملة حول الحدث الذي أدى إلى تشغيله. يتضمن ذلك تفاصيل حول المستخدم الذي قام بتشغيل الحدث، واسم الفرع، ومعلومات سياقية أخرى ذات صلة. لا يمكن التلاعب ببعض مكونات بيانات الحدث هذه، مثل اسم المستودع الأساسي أو رقم طلب السحب، أو استغلالها للحقن من قبل المستخدم الذي بدأ الحدث (على سبيل المثال، في حالة طلب السحب). وهذا يضمن مستوى من التحكم والأمان في المعلومات التي يوفرها سياق GitHub أثناء تنفيذ سير العمل.

ومع ذلك، يمكن للمهاجم التحكم في بعض العناصر، ويجب تنظيفها (sanitize) قبل استخدامها. فيما يلي قائمة بهذه العناصر:

  • github.event.issue.title
  • github.event.issue.body
  • github.event.pull_request.title
  • github.event.pull_request.body
  • github.event.comment.body
  • github.event.review.body
  • github.event.pages.*.page_name
  • github.event.commits.*.message
  • github.event.head_commit.message
  • github.event.head_commit.author.email
  • github.event.head_commit.author.name
  • github.event.commits.*.author.email
  • github.event.commits.*.author.name
  • github.event.pull_request.head.ref
  • github.event.pull_request.head.label
  • github.event.pull_request.head.repo.default_branch
  • github.head_ref
  • env.*
  • steps.*.outputs.*
  • needs.*.outputs.*

autogpt

أمثلة

  • AutoGPT
  • microsoft/generative-ai-for-beginners

runner-label

يتيح GitHub إمكانية استضافة العاملات (runners) الخاصة بك وتخصيص البيئة المستخدمة لتشغيل المهام (jobs) في سير العمل. تُسمى هذه العاملات بالعاملات ذاتية الاستضافة (self-hosted).

يوجد نوعان من العاملات ذاتية الاستضافة: مؤقتة (ephemeral) وغير مؤقتة (non-ephemeral). افتراضيًا، تكون العاملات غير مؤقتة، مما يعني أن البيئة التي تستخدمها العاملات لا يتم تنظيفها بعد اكتمال المهمة. إذا تمكن المهاجمون من تنفيذ كود على عاملة غير مؤقتة، فيمكنهم زرع باب خلفي (backdoor) فيها بإضافة عملية في الخلفية وسرقة الأسرار الحساسة. لذلك فإن هذا النوع من العاملات حساس للغاية.

excalidraw

يمكن تحديد العاملات غير المؤقتة من خلال النظر في سجلات التشغيل. يمكن استخدام أداة تسمى gato لأتمتة هذه العملية.

أمثلة

  • Haskell
  • lovell/Sharp
  • WasmEdge
  • Scroll
  • Akash Network
  • actions/runner-images
  • tensorflow
  • pytorch

repo-jacking

تم عرض ثغرة اختطاف المستودع (repo jacking) في DEFCON 31 بواسطة Asi Greenholts. تحدث هذه الثغرة عندما يشير إجراء GitHub إلى إجراء على منظمة أو مستخدم GitHub غير موجود.

AcalaNetwork

لاحظ أن هذه القاعدة تحتاج إلى اتصال بالإنترنت للتحقق مما إذا كان الهجوم ممكنًا أم لا. جميع الفحوصات الأخرى تتم دون اتصال.

أمثلة

  • Azure/bicep-registry-modules
  • HangfireIO/Hangfire

unsecure-commands

تمتلك الإجراءات القدرة على التفاعل مع جهاز العامل (runner)، مما يمكنها من تعيين متغيرات البيئة، وتحديد قيم المخرجات لاستخدامها بواسطة إجراءات أخرى، وإدراج رسائل تصحيح في سجلات المخرجات، وتنفيذ مهام أخرى متنوعة. ومع ذلك، قبل عام 2020، كان من الممكن التحكم في متغيرات البيئة عن طريق كتابة البيانات إلى STDOUT بهذه الطريقة:

root@kitploit:~
run: |
   echo "##[set-env name=ENV_NAME;]value"
   # or
   echo "echo "::set-env name=ENV_NAME::value"

كانت أوامر سير العمل المنفذة غير آمنة بطبيعتها بسبب الممارسة الشائعة لتسجيل المخرجات في STDOUT. فتحت هذه الثغرة المجال أمام هجمات محتملة، مما سمح بحقن حمولات خبيثة بسهولة وتشغيل أمر set-env. أدخلت القدرة على تعديل متغيرات البيئة مسارات متعددة لتنفيذ الكود عن بُعد، وكان الحمولة الواضحة بشكل خاص هي تلك الموضحة سابقًا. تم الإبلاغ عن هذه الثغرة في البداية من قبل باحث أمني من مشروع Project Zero.

على الرغم من أن أمر set-env مهمَل وغير قابل للاستخدام افتراضيًا، إلا أنه إذا قام مطور بتعيين متغير البيئة ACTIONS_ALLOW_UNSECURE_COMMANDS في سير العمل، يصبح أمر set-env متاحًا ويمكن استخدامه:

alibaba

أمثلة

  • alibaba/nacos

bot-check

من الممكن تجاوز الفحص التالي:

root@kitploit:~
jobs:
  merge-dependabot-pr:
    runs-on: ubuntu-latest
    if: github.actor == 'dependabot[bot]'
    steps:
		...

تتمثل فكرة الهجوم في تشغيل Dependabot على مستودع متفرع (forked) بحيث يتم إنشاء طلب سحب (PR) على المستودع المتفرع بواسطة Dependabot، ثم يتم فتح طلب سحب من فرع Dependabot على المستودع المعرض للخطر، وأخيرًا يتم تشغيل Dependabot مرة أخرى لإطلاق سير العمل المعرض للخطر.

dependabot

يمكنك العثور على جميع تفاصيل الاستغلال هنا: https://www.synacktiv.com/publications/github-actions-exploitation-dependabot

أمثلة

  • spring-projects/spring-security
  • spring-projects/spring-session
  • trpc/trpc

known-vulnerability

ابحث عن الإجراءات المعروفة بوجود ثغرات فيها استنادًا إلى osv.dev.

dangerous-artefact

تحقق من سير العمل التي ترفع قطعًا أثرية تحتوي على ملفات حساسة مثل .git/config. تستند هذه القاعدة إلى هذه المقالة.

credentials

تتحقق من وجود بيانات اعتماد في إعداد services:. هذه القاعدة مأخوذة من actionlint.

اختبار

shellcheck

تشغيل shellcheck على جميع مهام bash. هذه القاعدة مأخوذة من actionlint.

local-action

إصدار تنبيه إذا تم استخدام إجراء GitHub محلي. حاليًا لا يمكن للأداة تحليل ملفات الإجراءات المحلية، لذلك يتم إصدار تنبيه لأنها قد تحتوي أيضًا على ثغرات.

oidc-action

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

💡 أصبحت هذه الآن قاعدة تصحيح (debug rule)، تحتاج إلى إضافة --debug-rules للبحث عنها.

شكر وتقدير

ما كان لهذه الأداة أن تُطوَّر دون actionlint. شكر جزيل لـ @rhysd.

الموارد

  • استغلال GitHub Actions: مقدمة
  • استغلال GitHub Actions: مدخلات غير موثوقة
  • استغلال GitHub Actions: اختطاف المستودع والتلاعب بالبيئة
  • استغلال GitHub Actions: العاملات ذاتية الاستضافة
  • استغلال GitHub Actions: Dependabot
  • https://0xn3va.gitbook.io/cheat-sheets/ci-cd/github/actions
  • https://cloud.hacktricks.xyz/pentesting-ci-cd/github-security
  • https://unit42.paloaltonetworks.com/github-repo-artifacts-leak-tokens
تنزيل الأداة