۱. قبلاز شروع
⏱️ مدت: ۰۳:۰۰
به codelab عملی برای ایمنسازی برنامه با CodeMender در پلاتفرم Gemini Enterprise Agent در Google Cloud خوش آمدید.
در این کارگاه، شما در نقش یک مهندس امنیت ابری قرار میگیرید که وظیفه دارد OWASP Juice Shop را ممیزی و ایمن کند—یک برنامه وب استاندارد صنعتی که بهطور عمدی آسیبپذیر ساخته شده و با Node.js، Express، TypeScript، و Angular توسعه یافته است.
ابزارهای سنتی اسکن امنیتی (SAST/DAST) تیمهای توسعه را با هزاران یافته امنیتی ایستا، نرخهای مثبت کاذب بالا، و صفر اصلاح کد قابلاجرا غرق میکنند. توسعهدهندگان ساعتها وقت صرف اولویتبندی گزارشها، ردیابی جریانهای داده، و نوشتن دستی وصلههایی میکنند که اغلب رفتار برنامه موجود را مختل میکند.
CodeMender با پیچیدن یک زیرساخت عامل تنظیمشده در اطراف مدلهای زبانی بزرگ Gemini از Google، امنیت کد را متحول میکند. CodeMender بااستفاده از پیاموارههای مهندسیشده Google DeepMind، مهارتهای امنیتی تخصصی، و هماهنگسازی چندعاملی، بهعنوان یک «توسعهدهنده مشترک امنیتی هوش مصنوعی» مستقل عمل میکند که آسیبپذیریهای نرمافزاری را مستقیماً در مخازن منبع محلی پیدا، تأیید، و اصلاح میکند.
پیشنیازها
- درک اولیه از آسیبپذیریهای برنامه وب (OWASP Top 10، مانند تزریق SQL و XSS)
- آشنایی پایه با برنامههای JavaScript/TypeScript و Node.js
- آشنایی اولیه با ابزارهای میانای خط فرمان (CLI)
آنچه خواهید آموخت
- نحوه راهاندازی، اصالتسنجی، و مقداردهی اولیه CodeMender (
cm) CLI در Google Cloud Shell. - نحوه اسکن خودکار مخزن برای کشف آسیبپذیریهای قابلسوءاستفاده (
cm find). - نحوه اعتبارسنجی آسیبپذیریها در جعبههای شنی مجزا و بازرسی کردن مصنوعات درستیسنجی (
cm verify). - نحوه ترکیب، آزمایش، و اعمال خودکار وصلههای امنیتی متناسب با بافتار (
cm fix). - نحوه ممیزی کردن دورسنجی توکن و صادر کردن گزارشهای رعایت مقررات چندقالبی (
cm stats،cm report).
آنچه نیاز دارید
- پروژه Google Cloud با صورتحساب فعالشده
- Google Cloud Shell با اتصال پروژه فعال (شامل
gcloud،git، و Node.js 18+ ازپیش نصبشده) - مخزن آغازگر: مخزن OWASP Juice Shop GitHub
۲. مقدمهای بر معماری CodeMender
⏱️ مدت: ۰۴:۰۰
قبلاز اینکه به اسکن و اصلاح کد بپردازیم، بیایید ببینیم CodeMender چگونه طبق استانداردهای رسمی معماری Google Cloud در «پلاتفرم عامل Gemini Enterprise» عمل میکند.
معماری سیستم: عامل و دیمون کارخواه

از دیدگاه کاربر، CodeMender از دو مؤلفه معماری اصلی تشکیل شده است:
پلاتفرم چندعاملی میزبانیشده: سیستم چندعاملی میزبانیشدهای که روی Google Cloud اجرا میشود و منطق کسبوکار امنیتی اصلی، مهندسی پیامواره مدل زبانی بزرگ، و استدلال امنیتی را اجرا میکند.
رابط خط فرمان کارخواه محلی و Daemon جعبه امن (cm): کارخواهی که در Google Cloud Shell اجرا میشود و هم بهعنوان رابط خط فرمان (برای صدور فرمانهایی مثل cm find، cm verify، cm fix) و هم بهعنوان daemon محلی (برای اجرای ایمن فرمانها ازطرف عامل در جعبه امن سطح فرایند مجزا) عمل میکند.
۳ قابلیت اصلی اصلاح

CodeMender امنیت کد را ازطریق سه مرحله یکپارچه مدیریت میکند:
یافتن آسیبپذیریها (cm find): پایگاههای کد را بااستفاده از «مدل زبانی بزرگ» تحت هدایت عامل اسکن میکند و از ابزارهای امنیتی تخصصی و مهندسی پیامواره برای متمرکز کردن مدل روی نقصهای امنیتی بهره میبرد. (یا میتوان یافتهها را از ابزارهای اسکن امنیتی خارجی وارد کرد).
درستیسنجی آسیبپذیریها (cm verify): کد را بهصورت محلی میسازد و تلاش میکند از نقصهای کشفشده سوءاستفاده کند تا بررسی کند که آیا قابلسوءاستفاده هستند یا نه. این کار موارد مثبت کاذب را حذف میکند و مصنوعات درستیسنجی فضای کاری دائمی در .exploit/ (info.yaml، PLAN.md، LOG.md، exploit.sh، REPORT.md) ایجاد میکند.
رفع آسیبپذیریها (cm fix): وصلههای منبع آگاه از زبان را ترکیب میکند و آنها را با اجرای مجموعههای آزمون رگرسیون و ساخت پروژه (npm test) در جعبه امن محلی تأیید میکند.
۳. راهاندازی محیط OWASP Juice Shop
⏱️ مدت: ۰۵:۰۰
در این مرحله، محیط پایانه Google Cloud را باز میکنید و مخزن برنامه هدف را واکشی میکنید.
مرحله ۱: باز کردن Cloud Shell در کنسول Google Cloud
در مرورگرتان به کنسول Google Cloud بروید.
در نوار پیمایش بالا، روی دکمه فعال کردن Cloud Shell (نماد >_) کلیک کنید.
Cloud Shell یک پایانه Linux مبتنی بر مرورگر با gcloud، git، و Node.js ازپیش نصبشده و اصالتسنجیشده ارائه میدهد.
مرحله ۲: کلون کردن مخزن OWASP Juice Shop
در Cloud Shell یا پایانه محلی، مخزن OWASP Juice Shop را شبیهسازی کنید:
git clone https://github.com/juice-shop/juice-shop.git --depth 1
cd juice-shop
مرحله ۳: بررسی فایلهای کلیدی برنامه
OWASP Juice Shop از Express.js در پسزمینه با ماژولهای TypeScript استفاده میکند. نگاهی سریع به ساختار فهرست راهنما بیندازید:
ls -la routes/ lib/
به فایلهای مسیر کلیدی که اصالتسنجی، پُرسمانهای کاربر، و مدیریت سبد خرید را انجام میدهند توجه کنید:
routes/login.ts: اصالتسنجی کاربر و اجرای پُرسمان SQL خام را مدیریت میکند.
routes/search.ts: جستجوی محصول و ارائه پاسخ را مدیریت میکند.
routes/basket.ts: بازیابی سبد خرید کاربر را مدیریت میکند.
routes/trackOrder.ts: پیگیری سفارش را ازطریق پُرسمانهای NoSQL مدیریت میکند.
lib/xml.ts: تجزیه XML و بارگذاری فایل را مدیریت میکند.
lib/insecurity.ts: برنامههای کمکی برای کد جلسه و رمزگذاری.
۴. نصب CodeMender CLI (cm) و اصالتسنجی اعتبارنامههای GCP
⏱️ مدت: ۰۸:۰۰
در این مرحله، Google Cloud APIهای لازم را فعال میکنید، بااستفاده از gcloud اجازههای IAM را اعطا میکنید، فایل دودویی cm CLI را بارگیری و نصب میکنید، و «اعتبارنامههای پیشفرض برنامه» (ADC) را پیکربندی میکنید.
مرحله ۱: میاناهای برنامهسازی کاربردی Google Cloud موردنیاز را ازطریق gcloud فعال کنید
CodeMender به Agent Platform API (aiplatform.googleapis.com) و Cloud Resource Manager API (cloudresourcemanager.googleapis.com) در Gemini Enterprise Agent Platform نیاز دارد.
در Cloud Shell یا پایانه خود، «شناسه پروژه» فعال خود را بازیابی کنید (یا منو کرکرهای پروژه را در بالای «کنسول Google Cloud» بررسی کنید) و میاناهای برنامهسازی کاربردی سرویس موردنیاز را فعال کنید:
# Automatically retrieve and set your active Google Cloud project ID
export PROJECT_ID=$(gcloud config get-value project)
gcloud config set project ${PROJECT_ID}
# Enable required Google Cloud APIs
gcloud services enable \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
serviceusage.googleapis.com \
--project=${PROJECT_ID}
بررسی کنید که میاناهای برنامهسازی کاربردی فعال باشند:
gcloud services list --enabled --filter="name:(aiplatform.googleapis.com OR cloudresourcemanager.googleapis.com)"
مرحله ۲: اعطای اجازههای IAM ازطریق gcloud
برای تعامل با موتور استدلال ابری CodeMender، کاربران و حسابهای سرویس باید نقش IAM roles/aiplatform.user (Agent Platform User) را داشته باشند.
اعطای نقش «مدیریت هویت و دسترسی» به حساب کاربری ازطریق CLI
# Get your active authenticated gcloud account email
USER_EMAIL=$(gcloud config get-value account)
# Add IAM policy binding for user account
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="user:${USER_EMAIL}" \
--role="roles/aiplatform.user"
مرحله ۳: بارگیری و نصب cm CLI در Cloud Shell
در Google Cloud Shell، دادههای کاربر بهطور دائم در فهرست راهنمای $HOME شما ذخیره میشود. فرمانهای زیر را اجرا کنید تا cm را بدون نیاز به sudo در ~/bin نصب کنید. هنوز در ~/juice-shop از بخش قبلی هستید، بنابراین فرمانها در دایرکتوری موقت بارگیری میشوند و سپس آن را پاک میکنند. بهاینترتیب، هیچ فایل نصبکنندهای در مخزن Juice Shop قرار نمیگیرد:
# Download into a temporary directory so nothing lands in the Juice Shop repository
CM_TMP=$(mktemp -d)
curl -L -o "${CM_TMP}/cm-linux-amd64.zip" "https://artifactregistry.googleapis.com/download/v1/projects/cmoc-prod/locations/us/repositories/codemender-cli-production/files/cm:stable:cm-linux-amd64.zip:download?alt=media"
unzip -o "${CM_TMP}/cm-linux-amd64.zip" -d "${CM_TMP}"
# Install into your persistent ~/bin directory and clean up
mkdir -p ~/bin
install -m 0755 "${CM_TMP}/cm" ~/bin/cm
rm -rf "${CM_TMP}"
# Add ~/bin to PATH for this session and future Cloud Shell sessions
export PATH="$HOME/bin:$PATH"
grep -qxF 'export PATH="$HOME/bin:$PATH"' ~/.bashrc || echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc
مرحله ۴: درستیسنجی cm نصب CLI
cm --version را اجرا کنید تا مطمئن شوید که باینری CLI بهدرستی نصب شده است:
cm --version
خروجی موردانتظار:
cm version 0.17.0
مرحله ۵: پیکربندی «اعتبارنامههای پیشفرض برنامه» (ADC) در Google Cloud
«اطلاعات اعتباری پیشفرض برنامه Google Cloud» (ADC) را پیکربندی کنید تا cm بتواند درخواستهای ارسالشده به موتور استدلال ابری را اصالتسنجی کند:
gcloud auth application-default login
کادر گفتگوی مدال مجوزی با برچسب مجاز کردن Cloud Shell ظاهر خواهد شد. برای اعطای دسترسی، روی مجاز کردن کلیک کنید.
۵. مقداردهی اولیه و درستیسنجی فضای کاری CodeMender
⏱️ مدت: ۰۳:۰۰
اکنون که cm نصب و اصالتسنجی شده است، فضای کاری CodeMender را در دایرکتوری پروژه هدف مقداردهی اولیه خواهید کرد و راهاندازی محیط خود را درستیسنجی خواهید کرد.
مرحله ۱: مقداردهی اولیه فضای کاری CodeMender (cm init)
cm init را از ریشه فهرست راهنمای پروژه خود اجرا کنید تا فایلهای ردیابی وضعیت محلی را مقداردهی اولیه کنید و پیکربندیهای پایه را ایجاد کنید:
cm init
خروجی:
✅ Initialized CodeMender workspace at /home/user/.codemender
مرحله ۲: اجرای عیبیابی سلامت سرتاسری (cm health)
پیشاز راهاندازی جلسه نماینده، cm health را اجرا کنید تا اعتبارنامهها، پیکربندی، دسترسپذیری، و مجوز شما تأیید شود:
cm health
خروجی:
CodeMender Health Check ─────────────────────── Backend: iapi Endpoint: https://aiplatform.googleapis.com Location: global Project: my-gcp-project ✓ credentials passed (0ms) Token acquired for project "my-gcp-project" ✓ config passed (0ms) Configuration valid (backend "iapi") ✓ reachability passed (250ms) Endpoint https://aiplatform.googleapis.com responded ✓ authorization passed (68ms) Caller authorized for project "my-gcp-project" Status: HEALTHY (exit code 0, 319ms)
مرحله ۳: درک پارامترهای پیکربندی (config.yaml)
CodeMender یک فایل پیکربندی فضای کاری در .codemender/config.yaml (یا ~/.codemender/config.yaml) ایجاد میکند. این فایل مرزهای خطمشی، قوانین گنجاندن فایل، و قلابهای درستیسنجی آزمایش را تعریف میکند:
# CodeMender CLI configuration.
# The server endpoint is baked in at build time (see build profiles).
# Override it here only if you need a different endpoint.
server: {}
location: "global" # Service location: "global" (default), "us", "eu", or "us-central1" (overridden by $CM_LOCATION)
# Customer-supplied team identifier sent as the X-CodeMender-Team-Id
# telemetry header. Overridden by --team-id flag or $CM_TEAM_ID env var.
# Max 63 chars, must match [A-Za-z0-9._-]. Omit to skip the header.
# team_id: "acme-security"
scan:
extensions:
include: [".py", ".java", ".go", ".js", ".jsx", ".mjs", ".cjs", ".ts", ".tsx", ".c", ".cc", ".cpp", ".cxx", ".h", ".hh", ".hpp", ".hxx", ".inl", ".ipp", ".cs", ".rs", ".kt", ".kts", ".rb", ".php", ".sol", ".tf", ".hcl"]
exclude: [".min.js", ".generated.go", ".pb.go"]
# A leading "/" matches only that directory at the scan root.
exclude_dirs: ["node_modules", "vendor", "dist", "/target", "/obj", "/build", ".gradle"]
max_file_size_kb: 2048 # Maximum file size for discovery (2048 KB / 2 MiB)
incremental: true
# Restrict agent file access to these directories (all commands).
# When empty, the scan target directory is used as the boundary.
# project_paths: []
output:
format: table # "table", "json", "sarif"
tools:
confirm_commands: true # Prompt Y/N before running shell commands (default: true)
confirm_writes: true # Prompt Y/N before writing/modifying files (default: true)
# cleanup_candidate_branches: true # Auto-delete temporary candidate branches on completion (default: true)
# Use --yes flag on find/fix/session resume to skip all confirmations
# Version Control and Automated Testing Guardrails
vcs:
type: "" # VCS type: "git", "mercurial", "custom", or "" (auto-detect)
commands:
reset: "" # Shell command to reset codebase (auto-populated for known VCS)
diff: "" # Shell command to show changes (auto-populated for known VCS)
status: "" # Shell command to list modified files (auto-populated for known VCS)
stage: "" # Shell command to stage changes (auto-populated for known VCS)
build:
command: "npm test" # Shell command to build/verify changes from the agent
sandbox:
enabled: true # Process-level OS sandbox (default: true)
mounts:
target_dir: "."
network:
profile: "permissive-closed" # Complete network isolation; set to "permissive-open" if build requires internet
security:
protected_files: [] # Files mounted read-only inside sandbox (e.g. ["~/.ssh/*"])
۶. آسیبپذیریها را با cm find کاوش کنید .
⏱️ مدت: ۰۷:۰۰
در این مرحله، cm find . --quick را اجرا خواهید کرد تا اسکن امنیتی عاملی را در سراسر پایگاه کد Juice Shop اجرا کنید.
مرحله ۱: cm find . --quick را اجرا کنید
از CodeMender نسخه ۰.۱۶.۰، cm find <path> بهطور پیشفرض روی اسکن عمیق ( تنظیم شده است
--deep
) برای تجزیهوتحلیل جامع فایلبهفایل، درحالیکه اسکن سریع (
--quick
) اولویتبندی سریع مخزن را ارائه میدهد. cm find . --quick را اجرا کنید تا «اسکن سریع» در سراسر مخزن OWASP Juice Shop انجام شود (زمان اجرای تخمینی: حدود ۸ دقیقه برای تریاژ کامل پایگاه کد ۶۸۴ فایلی):
cm find . --quick -y --sandbox=false --bypass-warning --model gemini-3.8-flash
cm یک جلسه اسکن را در پلاتفرم Gemini Enterprise Agent راهاندازی میکند و فایلهای کد منبع را در همه ماژولهای مخزن تجزیهوتحلیل میکند:
⚠️ Sandbox DISABLED and command approval OFF: the agent can run commands on this machine without asking. Code in the scanned repository could steer it. Re-enable the sandbox or command approval (drop --yes, or set tools.confirm_commands: true) unless you trust the repository. 🔍 Discovering files in /home/user/juice-shop... Found 684 source files 🚀 Starting FIND session (mode: QUICK)... Server: https://aiplatform.googleapis.com Session: ChBjMjI4YWY5MzljZjUzNTQ4EAgaAjg1KgRtYWlu Operation: ChBjMjI4YWY5MzljZjUzNTQ4EAgaAjg1KgRtYWlu 📂 Scan target: /home/user/juice-shop 🔒 Sandbox roots (agent can only access these directories): • /home/user/juice-shop 📡 Waiting for server (https://aiplatform.googleapis.com)... ──────────────────────────────────────────────────────────── 2026-10-29T03:01:47Z [INFO] 🔧 [Step 1] list_dir → /home/user/juice-shop 2026-10-29T03:01:56Z [INFO] 🔧 [Step 2] list_dir → .../juice-shop/routes 2026-10-29T03:02:08Z [INFO] 🔧 [Step 3] read_file → .../juice-shop/server.ts 2026-10-29T03:02:47Z [INFO] 🔧 [Step 7] read_file → .../juice-shop/routes/login.ts 2026-10-29T03:02:56Z [INFO] 🔧 [Step 8] read_file → .../juice-shop/routes/search.ts 2026-10-29T03:03:48Z [INFO] 🔧 [Step 13] read_file → .../juice-shop/routes/fileUpload.ts 2026-10-29T03:04:30Z [INFO] 🔧 [Step 16] read_file → .../juice-shop/routes/userProfile.ts 2026-10-29T03:06:11Z [INFO] 🔧 [Step 25] read_file → .../juice-shop/routes/trackOrder.ts 2026-10-29T03:07:57Z [INFO] 🔧 [Step 33] read_file → .../juice-shop/routes/order.ts 2026-10-29T03:09:30Z [INFO] ✅ Completed 33 tool steps in 7m48s | Tokens: 2.6M in / 8k out / 2.7M total ──────────────────────────────────────────────────────────── 🔒 Found 12 vulnerabilities: ID SEVERITY TYPE FILE TITLE CONFIDENCE ──────── ──────── ──── ──── ───── ────────── 43aa7446 🔴 CRITICAL SQL INJECTION routes/login.ts SQL Injection in User Login Handler Allows Authentication Bypass 100% dd83d0a4 🟠 HIGH SQL INJECTION routes/search.ts UNION-Based SQL Injection in Product Search Allows Database Exfiltration 100% 4dfe2409 🟠 HIGH CODE INJECTION routes/userProfile.ts Remote Code Execution via Eval in User Profile Template Handler 100% 79d490b0 🟠 HIGH PATH TRAVERSAL routes/fileUpload.ts Path Traversal (Zip Slip) in Zip File Upload Allows Arbitrary File Overwrite 100% 4f2b050c 🟠 HIGH XML EXTERNAL ENTITY (XXE) routes/fileUpload.ts XML External Entity (XXE) Injection in File Upload Route Leaks System Files 100% 1ece0e25 🟠 HIGH IMPROPER ACCESS CONTROL server.ts Missing Authorization on Product Update Endpoint Allows Unauthorized Product Tampering 100% 757fd438 🟠 HIGH CWE-943 routes/trackOrder.ts NoSQL / JavaScript Injection in Order Tracking Allows Database Record Exfiltration 100% 349bac9f 🟡 MEDIUM SERVER-SIDE REQUEST FORGERY (SSRF) routes/profileImageUrlUpload.ts Server-Side Request Forgery (SSRF) in Profile Image URL Upload Route 100% be5e1459 🟡 MEDIUM OPEN REDIRECT routes/redirect.ts Open Redirect via Inadequate Allowlist Substring Match 100% 06ecf8a5 🟡 MEDIUM INSECURE DIRECT OBJECT REFERENCE (IDOR) routes/basket.ts Insecure Direct Object Reference (IDOR) Allows Access to Arbitrary User Baskets 100% 02f6a293 🟡 MEDIUM PATH TRAVERSAL routes/dataErasure.ts Local File Read via Insecure Template Layout Parameter in Data Erasure Route 100% 95ee59a3 🟡 MEDIUM CWE-943 routes/updateProductReviews.ts NoSQL Injection in Product Review Update Endpoint Allows Mass Modification 100% Summary: 1 CRITICAL, 6 HIGH, 5 MEDIUM Run 'cm report' for detailed analysis, 'cm verify <finding-id>' to validate, or 'cm fix <finding-id>' to generate a patch. 2026-10-29T03:09:30Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T030140Z_ChBjMjI4YWY5MzljZjUzNTQ4EAgaAjg1KgRtYWlu.log
مرحله ۲: مرور یافتههای اسکن ازطریق cm report
cm report -f table را اجرا کنید تا همه یافتههای امنیتی کشفشده از پایگاه داده وضعیت SQLite محلی نمایش داده شود:
cm report -f table
خروجی:
┌──────────┬───────────┬──────┬───┬──────────────────────────────┬────────────────────────────────────────┐ │ID │Severity │Status│Fix│File │Title │ ├──────────┼───────────┼──────┼───┼──────────────────────────────┼────────────────────────────────────────┤ │ 43aa7446 │🔴 CRITICAL│OPEN │— │routes/login.ts │SQL Injection in User Login Handler A...│ │ dd83d0a4 │🟠 HIGH │OPEN │— │routes/search.ts │UNION-Based SQL Injection in Product ...│ │ 4dfe2409 │🟠 HIGH │OPEN │— │routes/userProfile.ts │Remote Code Execution via Eval in Use...│ │ 79d490b0 │🟠 HIGH │OPEN │— │routes/fileUpload.ts │Path Traversal (Zip Slip) in Zip File...│ │ 4f2b050c │🟠 HIGH │OPEN │— │routes/fileUpload.ts │XML External Entity (XXE) Injection i...│ │ 1ece0e25 │🟠 HIGH │OPEN │— │server.ts │Missing Authorization on Product Upda...│ │ 757fd438 │🟠 HIGH │OPEN │— │routes/trackOrder.ts │NoSQL / JavaScript Injection in Order...│ │ 349bac9f │🟡 MEDIUM │OPEN │— │routes/profileImageUrlUploa...│Server-Side Request Forgery (SSRF) in...│ │ be5e1459 │🟡 MEDIUM │OPEN │— │routes/redirect.ts │Open Redirect via Inadequate Allowlis...│ │ 06ecf8a5 │🟡 MEDIUM │OPEN │— │routes/basket.ts │Insecure Direct Object Reference (IDO...│ │ 02f6a293 │🟡 MEDIUM │OPEN │— │routes/dataErasure.ts │Local File Read via Insecure Template...│ │ 95ee59a3 │🟡 MEDIUM │OPEN │— │routes/updateProductReviews.ts│NoSQL Injection in Product Review Upd...│ └──────────┴───────────┴──────┴───┴──────────────────────────────┴────────────────────────────────────────┘ 12 finding(s): 1 CRITICAL, 6 HIGH, 5 MEDIUM · ✅ 0 fixed, 🔴 12 open 📋 Report generated at 2026-10-29 03:10:05 UTC 2026-10-29T03:10:05Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T031005Z_pending.log
مرحله ۳: درک کردن وضعیتهای چرخه حیات یافتهها و سطوح شدت
CodeMender آسیبپذیریها را ازطریق یک چرخه حیات رسمی چهارحالته ردیابی میکند:
درحال پیدا کردن حالت | مدیریت معنی و انتقال |
| آسیبپذیری کشف (یا وارد) شده است اما هنوز درستیسنجی، وصله، یا رد نشده است. |
| CodeMender وصلهای تولید کرده، تفاوت را اعمال کرده، و تأیید کرده است که مجموعههای ساخت/آزمون با موفقیت انجام میشوند و بهرهجوییها ناموفق هستند. |
| بهدلیل اطمینان پایین، خارج از مدل تهدید، یا تأیید بهعنوان مثبت کاذب، غیرفعال علامتگذاری شده است. هشدارهای بعدی را بیصدا میکند. |
| نقص |
طبقهبندیهای شدت
🔴 CRITICAL: خطر فوری و شدید (برای مثال، «اجرای کد از راه دور»، «تزریق SQL» تأییدنشده) که مستقیماً از مرزهای غیرقابلاعتماد قابلدسترسی است.
🟠 HIGH: نقص شدید (مثلاً خواندن پایگاه داده دلخواه، ارتقای امتیاز) که به بافت کاربر خاص یا شرایط زنجیرهای نیاز دارد.
🟡 MEDIUM: خطر متوسط با دامنه محدود یا نیازمند تعامل کاربر (مثلاً «تغییر مسیر باز»، «جعل درخواست بینسایتی»).
🔵 LOW: نقصهای بهداشتی دفاع در عمق یا بردارهای شناسایی با حداقل تأثیر مستقیم.
۷. درستیسنجی آسیبپذیریها و بررسی گامبهگام مصنوعات درستیسنجی ضبطشده
⏱️ مدت: ۱۰:۰۰
یکی از ویژگیهای کلیدی CodeMender تولید خودکار ساختههای درستیسنجی پایدار در هر بار اجرای cm verify است. بیایید یافته «تزریق SQL بحرانی» را در routes/login.ts (که در این آموزش بهصورت 43aa7446 نشان داده شده است) درستیسنجی کنیم و مصنوعات ایجادشده توسط عامل را بررسی کنیم.
مرحله ۱: اجرای cm verify <login-finding-id>
شناسه یافته مربوط به routes/login.ts را در جدول cm report پیدا کنید (برای مثال، 43aa7446)، و cm verify <finding-id> --sandbox=false --bypass-warning -y را اجرا کنید (زمان اجرای تخمینی: حدود ۲۰ دقیقه برای اجرای مراحل ابزار خودکار، شروع سرویسهای پسزمینهای، و اجرای اسکریپتهای بهرهبرداری اثبات مفهوم زنده):
# Replace 43aa7446 with your actual login.ts finding ID
# --sandbox=false turns off only the OS-level sandbox; the path boundary and command policy stay enforced
cm verify 43aa7446 --sandbox=false --bypass-warning -y --model gemini-3.8-flash
خروجی:
⚠️ Sandbox DISABLED and command approval OFF: the agent can run commands on this machine without asking. Code in the scanned repository could steer it. Re-enable the sandbox or command approval (drop --yes, or set tools.confirm_commands: true) unless you trust the repository. 🔬 Verifying finding: SQL Injection in User Login Handler Allows Authentication Bypass ID: 43aa7446-40de-467d-8ca4-8571dca16036 File: /home/user/juice-shop/routes/login.ts Severity: 🔴 CRITICAL Type: SQL INJECTION Resetting workspace at /home/user/juice-shop 🔧 Running: git checkout HEAD -- . && git clean -fd Removing .cm_project ✅ Reset complete. Ready for vulnerability research. 🚀 Starting VERIFY session... Server: https://aiplatform.googleapis.com Session: ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu Operation: ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu 📂 Scan target: /home/user/juice-shop/routes 🔒 Sandbox boundary (agent can explore within): • /home/user/juice-shop 📡 Waiting for verification agent (https://aiplatform.googleapis.com)... ──────────────────────────────────────────────────────────── 2026-10-29T03:11:31Z [INFO] 🔧 [Step 1] run_command → mkdir -p /home/user/juice-shop/.exploit 2026-10-29T03:11:42Z [INFO] 🔧 [Step 2] read_file → .../juice-shop/routes/login.ts 2026-10-29T03:12:03Z [INFO] 🔧 [Step 4] read_file → .../juice-shop/package.json 2026-10-29T03:12:14Z [INFO] 🔧 [Step 5] write_to_file → .../juice-shop/.exploit/PLAN.md 2026-10-29T03:19:00Z [INFO] 🔧 [Step 25] run_command → npm run build:server 2026-10-29T03:29:20Z [INFO] 🔧 [Step 61] write_to_file → .../juice-shop/.exploit/info.yaml 2026-10-29T03:29:53Z [INFO] 🔧 [Step 63] write_to_file → .../juice-shop/.exploit/LOG.md 2026-10-29T03:30:17Z [INFO] 🔧 [Step 64] write_to_file → .../juice-shop/.exploit/REPORT.md 2026-10-29T03:30:55Z [INFO] 🔧 [Step 66] run_command → git status --short 2026-10-29T03:31:46Z [INFO] ✅ Completed 66 tool steps in 20m23s | Tokens: 2.8M in / 7k out / 2.8M total ──────────────────────────────────────────────────────────── 2026-10-29T03:31:46Z [INFO] Artifacts manifest written: /home/user/.codemender/artifacts/ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu/manifest.json (7 artifacts) 📦 Captured 7 agent artifacts in /home/user/.codemender/artifacts/ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu Pulling artifacts for session ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu Resetting workspace at /home/user/juice-shop 🔧 Running: git checkout HEAD -- . && git clean -fd Removing .cm_project Removing .exploit/LOG.md Removing .exploit/PLAN.md Removing .exploit/REPORT.md Removing .exploit/exploit.sh Removing .exploit/info.yaml Removing .exploit/server_runner.js ✅ Reset complete. Ready for vulnerability research. 📥 Copying 7 finding artifact(s) to workspace... • /home/user/juice-shop/.exploit/LOG.md • /home/user/juice-shop/.exploit/PLAN.md • /home/user/juice-shop/.exploit/REPORT.md • /home/user/juice-shop/.exploit/exploit.sh • /home/user/juice-shop/.exploit/info.yaml • /home/user/juice-shop/.exploit/server.log • /home/user/juice-shop/.exploit/server_runner.js 🚀 Programmatically running exploit script to confirm: /home/user/juice-shop/.exploit/exploit.sh EXPLOIT SUCCESSFUL ✅ Exploit execution succeeded. Finding VERIFIED (confidence: 100%) Run 'cm report' to see updated findings. 2026-10-29T03:31:52Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T031121Z_ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu.log
مرحله ۲: نمای کلی از مدارک درستیسنجی ضبطشده
از CodeMender نسخه ۰.۱۶.۰، مصنوعات درستیسنجی در ریشه مخزن تحت .exploit/ استانداردسازی میشوند، درحالیکه یک نسخه دائمی در ~/.codemender/artifacts/<session-id>/ حفظ میشود. اینها فایلهای کاری محلی هستند و بخشی از اصلاحیه شما نیستند، بنابراین قبلاز آمادهسازی وصله در بخش بعدی، آنها را از Git مستثنی خواهید کرد. ls -la .exploit/ را اجرا کنید تا آنها را فهرست کنید:
ls -la .exploit/
خروجی:
total 40 drwxrwxr-x 2 user user 4096 Oct 29 03:31 . drwxrwxr-x 35 user user 4096 Oct 29 03:31 .. -rwxr-xr-x 1 user user 3272 Oct 29 03:31 exploit.sh -rw-r--r-- 1 user user 313 Oct 29 03:31 info.yaml -rw-r--r-- 1 user user 2196 Oct 29 03:31 LOG.md -rw-r--r-- 1 user user 771 Oct 29 03:31 PLAN.md -rw-r--r-- 1 user user 6387 Oct 29 03:31 REPORT.md -rw-rw-r-- 1 user user 2438 Oct 29 03:31 server.log -rw-rw-r-- 1 user user 462 Oct 29 03:31 server_runner.js
فایل دادههای جلسه | دسته | هدف |
| مانیفست فراداده | YAML ساختاریافته که شناسه UUID، عنوان، شدت ( |
| راهبرد عامل | طرح درستیسنجی گامبهگام و بازبینه که بهطور خودکار توسط موتور استدلال CodeMender اجرا میشود. |
| گزارش ردیابی اجرا | رد ممیزی مُهرزماندار که هر فراخوانی ابزار، نقطه پایانی درخواست HTTP، و نتیجه آزمایش را ثبت میکند. |
| Helper Runner / Server Log | اسکریپت کمکی که نماینده برای شروع Juice Shop برای آزمایش ایجاد کرده است، و برونداد سرور ضبطشده. |
| پوشاننده اجرا / اثبات مفهوم مستقل | پوشاننده اسکریپت پوسته که سرویس هدف را راهاندازی میکند و کارخواه PoC را فراخوانی میکند، پاسخهای HTTP 200 را اعتبارسنجی میکند. |
| تحلیل علت ریشهای | خلاصه اجرایی، تجزیهوتحلیل آسیبپذیری خطبهخط، تفکیک SQL خام، و توصیههای پارامترسازی Sequelize. |
مرحله ۳: راهنمای گامبهگام عمیق از نکات برجسته مصنوع درستیسنجی
نماینده این مصنوعات را در هر اجرا بهصورت تازه مینویسد، بنابراین محتوای دقیق آنها هر بار متفاوت است. آنها را در «ویرایشگر Cloud Shell» (یا با cat) باز کنید و بهدنبال موارد زیر بگردید:
مصنوع | بهدنبال چه چیزی باید گشت |
| شناسه کامل، عنوان، شدت، اطمینان، و برچسبهای یافته، مثل |
| بازبینهای که نماینده دنبال کرده است، از خواندن فایل گزارششده تا نوشتن اسکریپت بازتولید. |
| کنشها و نتایج دارای مُهر زمان، ازجمله نتیجه هر اجرای متن بازتولید. |
| اسکریپت بازتولید مستقل: نحوه شروع برنامه، نقطه پایانی هدف، و نحوه تصمیمگیری درباره موفقیت ( |
| فایلهای کمکی که عامل برای شروع Juice Shop برای آزمایش ایجاد کرده است، و خروجی آن سرور. |
| تحلیل علت ریشهای: خط آسیبپذیر در |
۸. اصلاح تزریق SQL با اصلاح cm
⏱️ مدت: ۱۰:۰۰
اکنون که یافته تزریق SQL را در routes/login.ts (شناسه نمونه 43aa7446) درستیسنجی کردهایم و آرتیفکتهای آن را بررسی کردهایم، بیایید cm fix را اجرا کنیم تا وصله پُرسمان پارامتریشده خودکار را اعمال کنیم.
مرحله ۱: اجرای cm fix <login-finding-id> -y
cm fix <finding-id> --sandbox=false --bypass-warning -y را اجرا کنید (43aa7446 را با شناسه یافته ورود به سیستم واقعی خود از cm report جایگزین کنید) تا اصلاحیهای را ترکیب و اعمال کنید:
# Replace 43aa7446 with your actual login.ts finding ID
cm fix 43aa7446 --sandbox=false --bypass-warning -y --model gemini-3.8-flash
خروجی:
⚠️ Sandbox DISABLED and command approval OFF: the agent can run commands on this machine without asking. Code in the scanned repository could steer it. Re-enable the sandbox or command approval (drop --yes, or set tools.confirm_commands: true) unless you trust the repository.
🩹 Fixing finding: SQL Injection in User Login Handler Allows Authentication Bypass
File: /home/user/juice-shop/routes/login.ts
Severity: CRITICAL
🔒 Sandbox roots (agent can only access these directories):
• /home/user/juice-shop
Found latest VERIFY session ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu for finding 43aa7446-40de-467d-8ca4-8571dca16036
Pulling artifacts for session ChBkZTRhMWU3YTI4MjU5ZDY0EAgaAmU4KgRtYWlu
Resetting workspace at /home/user/juice-shop
🔧 Running: git checkout HEAD -- . && git clean -fd
Removing .cm_project
Removing .exploit/LOG.md
Removing .exploit/PLAN.md
Removing .exploit/REPORT.md
Removing .exploit/exploit.sh
Removing .exploit/info.yaml
Removing .exploit/server_runner.js
✅ Reset complete. Ready for vulnerability research.
📥 Copying 7 finding artifact(s) to workspace...
• /home/user/juice-shop/.exploit/LOG.md
• /home/user/juice-shop/.exploit/PLAN.md
• /home/user/juice-shop/.exploit/REPORT.md
• /home/user/juice-shop/.exploit/exploit.sh
• /home/user/juice-shop/.exploit/info.yaml
• /home/user/juice-shop/.exploit/server.log
• /home/user/juice-shop/.exploit/server_runner.js
Session: ChA0YjllNzFkMTgyM2JmZDQ0EAgaAjdiKgRtYWlu
Operation: ChA0YjllNzFkMTgyM2JmZDQ0EAgaAjdiKgRtYWlu
📡 Waiting for fix agent (https://aiplatform.googleapis.com)...
────────────────────────────────────────────────────────────
2026-10-29T03:41:30Z [INFO] 🔧 [Step 4] read_file → .../juice-shop/routes/login.ts
2026-10-29T03:41:58Z [INFO] 🔧 [Step 6] run_command → npm run test:server
2026-10-29T03:43:11Z [INFO] 🔧 [Step 9] grep_search → pattern="sequelize\\.query" path=.../juice-shop/routes
2026-10-29T03:43:54Z [INFO] 🔧 [Step 12] read_file → .../juice-shop/routes/vulnCodeSnippet.ts
2026-10-29T03:44:41Z [INFO] 🔧 [Step 13] read_file → .../juice-shop/routes/vulnCodeFixes.ts
2026-10-29T03:53:14Z [INFO] 🔧 [Step 31] search_and_replace → .../juice-shop/routes/login.ts
2026-10-29T03:53:52Z [INFO] 🔧 [Step 33] run_command → npm run build:server
2026-10-29T03:55:23Z [INFO] 🔧 [Step 37] run_command → npm run test:server
2026-10-29T03:55:49Z [INFO] 🔧 [Step 38] run_command → git diff
2026-10-29T03:57:18Z [INFO] ✅ Completed 43 tool steps in 16m54s | Tokens: 1.6M in / 4k out / 1.6M total
────────────────────────────────────────────────────────────
✨ Patch generated successfully!
diff --git a/routes/login.ts b/routes/login.ts
index fb9fce3..57f3afe 100644
--- a/routes/login.ts
+++ b/routes/login.ts
@@ -31,7 +31,14 @@ export function login () {
return (req: Request, res: Response, next: NextFunction) => {
verifyPreLoginChallenges(req) // vuln-code-snippet hide-line
- models.sequelize.query(`SELECT * FROM Users WHERE email = '${req.body.email || ''}' AND password = '${security.hash(req.body.password || '')}' AND deletedAt IS NULL`, { model: UserModel, plain: true }) // vuln-code-snippet vuln-line loginAdminChallenge loginBenderChallenge loginJimChallenge
+ models.sequelize.query('SELECT * FROM Users WHERE email = :email AND password = :password AND deletedAt IS NULL', {
+ replacements: {
+ email: typeof req.body?.email === 'string' ? req.body.email : '',
+ password: security.hash(typeof req.body?.password === 'string' ? req.body.password : '')
+ },
+ model: UserModel,
+ plain: true
+ }) // vuln-code-snippet vuln-line loginAdminChallenge loginBenderChallenge loginJimChallenge
.then((authenticatedUser) => { // vuln-code-snippet neutral-line loginAdminChallenge loginBenderChallenge loginJimChallenge
const user = utils.queryResultToJson(authenticatedUser)
if (user.data?.id && user.data.totpSecret !== '') {
────────────────────────────────────────────────────────────
2026-10-29T03:57:18Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T034021Z_ChA0YjllNzFkMTgyM2JmZDQ0EAgaAjdiKgRtYWlu.log
مرحله ۲: بررسی وضعیت VCS و تفاوت بااستفاده از cm vcs
cm vcs status و cm vcs diff را اجرا کنید تا فایلهای فضای کاری اصلاحشده را ببینید:
cm vcs status
cm vcs diff
خروجی:
📂 CodeMender VCS Status ────────────────────────────────────────────────── Directory: /home/user/juice-shop Command: git status --short ────────────────────────────────────────────────── M routes/login.ts ?? .cm_project ?? .exploit/ 2026-10-29T03:59:47Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T035947Z_pending.log
دو ورودی ردیابینشده فایلهای محلی CodeMender هستند و بخشی از اصلاحیه نیستند: .exploit/ حاوی دادههای جلسه درستیسنجی از cm verify است و .cm_project ریشه پروژه را برای CodeMender علامتگذاری میکند. در مرحله بعد، آنها را از commit خود خارج خواهید کرد.
و cm vcs diff:
🔍 Running diff in /home/user/juice-shop: git diff
diff --git a/routes/login.ts b/routes/login.ts
index fb9fce3..57f3afe 100644
--- a/routes/login.ts
+++ b/routes/login.ts
@@ -31,7 +31,14 @@ export function login () {
return (req: Request, res: Response, next: NextFunction) => {
verifyPreLoginChallenges(req) // vuln-code-snippet hide-line
- models.sequelize.query(`SELECT * FROM Users WHERE email = '${req.body.email || ''}' AND password = '${security.hash(req.body.password || '')}' AND deletedAt IS NULL`, { model: UserModel, plain: true }) // vuln-code-snippet vuln-line loginAdminChallenge loginBenderChallenge loginJimChallenge
+ models.sequelize.query('SELECT * FROM Users WHERE email = :email AND password = :password AND deletedAt IS NULL', {
+ replacements: {
+ email: typeof req.body?.email === 'string' ? req.body.email : '',
+ password: security.hash(typeof req.body?.password === 'string' ? req.body.password : '')
+ },
+ model: UserModel,
+ plain: true
+ }) // vuln-code-snippet vuln-line loginAdminChallenge loginBenderChallenge loginJimChallenge
.then((authenticatedUser) => { // vuln-code-snippet neutral-line loginAdminChallenge loginBenderChallenge loginJimChallenge
const user = utils.queryResultToJson(authenticatedUser)
if (user.data?.id && user.data.totpSecret !== '') {
مرحله ۳: آمادهسازی وصله درستیسنجیشده با cm vcs stage
پساز بررسی تفاوت یکپارچه و تأیید اینکه اصلاحیه با استانداردهای کیفیت و امنیت شما مطابقت دارد، وصله را برای ثبت آماده کنید. چون cm vcs stage دستور git add -A را اجرا میکند، همه تغییرات را در درخت کاری آماده میکند، ازجمله ورودیهای ردیابینشده .exploit/ و .cm_project از مرحله ۲. ابتدا، آنها را به .git/info/exclude اضافه کنید، یک فایل نادیده محلی که Git هرگز آن را ثبت نمیکند، تا فقط وصله آمادهسازی شود:
# Keep CodeMender's local files out of Git (local-only; not committed)
printf '.exploit/\n.cm_project\n' >> .git/info/exclude
سپس تغییرات را بااستفاده از cm vcs stage آماده کنید:
cm vcs stage
خروجی:
📦 CodeMender VCS Stage ────────────────────────────────────────────────── Directory: /home/user/juice-shop Command: git add -A ────────────────────────────────────────────────── 2026-10-29T04:00:06Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T040006Z_pending.log ✅ Changes staged successfully.
تأیید کنید که فقط وصله در Git آماده شده است:
cm vcs status
خروجی:
📂 CodeMender VCS Status ────────────────────────────────────────────────── Directory: /home/user/juice-shop Command: git status --short ────────────────────────────────────────────────── M routes/login.ts
اگر cm vcs stage را قبلاز بهروزرسانی .git/info/exclude اجرا کردهاید، فایلهای CodeMender را با git restore --staged .exploit .cm_project از حالت آمادهسازی خارج کنید. فایلها در دیسک باقی میمانند؛ فقط از ناحیه آمادهسازی برداشته میشوند.
مرحله ۴: اعمال وصله و پاک کردن مصنوعات درستیسنجی
قبلاز رفع کردن یافته بعدی، وصله مرحلهای را ثبت کنید: هر اجرای cm fix و cm verify با بازنشانی فضای کاری (git checkout HEAD -- . && git clean -fd) شروع میشود که تغییرات ثبتنشده را حذف میکند. سپس پوشه محلی .exploit/ را حذف کنید تا اصلاح بعدی از فضای کاری تمیز شروع شود. چون .exploit/ اکنون نادیده گرفته میشود، git clean -fd دیگر آن را برای شما برنمیدارد. نسخه دائمی از مصنوعات در ~/.codemender/artifacts/<session-id>/ باقی میماند.
git commit -m "fix: use parameterized query in login route"
rm -rf .exploit/
اگر Git هویتتان را درخواست کرد، git config user.name "Your Name" و git config user.email "you@example.com" را در مخزن اجرا کنید و سپس دوباره ثبت کنید.
۹. اعتبارسنجی وصلهها، مدیریت جلسهها، و صادر کردن گزارشها (گزارش cm)
⏱️ مدت: ۰۸:۰۰
پساز اعمال وصله امنیتی تولیدشده با هوش مصنوعی، مدیریت جلسههای فعال، بازرسی آمار استفاده از کد، و تولید گزارشهای رعایت امنیت سازمانی بااستفاده از cm report ضروری است.
مرحله ۱: مدیریت جلسههای باحالت (cm session list / resume / cancel)
CodeMender هر اسکن، درستیسنجی، و تکلیف اصلاح را بهعنوان یک جلسه باحالت در پایگاه داده SQLite محلی خود (~/.codemender/state.db) ردیابی میکند. برای بازرسی جلسههایتان، cm session list را اجرا کنید:
cm session list
خروجی:
SESSION_ID TYPE STATUS TARGET CREATED RESUMABLE ────────── ──── ────── ────── ─────── ───────── ChA0Yjll FIX ✅ COMPLETED ...40de-467d-8ca4-8571dca16036 2026-10-29T03:40:21 — ChBkZTRh VERIFY ✅ COMPLETED ...40de-467d-8ca4-8571dca16036 2026-10-29T03:11:21 — ChBjMjI4 FIND ✅ COMPLETED /home/user/juice-shop 2026-10-29T03:01:40 — 3 session(s) total 2026-10-22T02:24:43Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261022T022443Z_pending.log
مرحله ۲: برای درستیسنجی یافتههای اصلاحشده، cm report را اجرا کنید
cm report -f table را اجرا کنید تا وضعیتهای بهروزشده یافتهها نمایش داده شود (توجه داشته باشید که یافتههای اصلاحشده اکنون FIXED را با ✅ applied در ستون Fix نمایش میدهند):
cm report -f table
خروجی:
┌──────────┬───────────┬──────┬──────────┬──────────────────────────────┬────────────────────────────────────────┐ │ID │Severity │Status│Fix │File │Title │ ├──────────┼───────────┼──────┼──────────┼──────────────────────────────┼────────────────────────────────────────┤ │ 43aa7446 │🔴 CRITICAL│FIXED │✅ applied│routes/login.ts │SQL Injection in User Login Handler A...│ │ dd83d0a4 │🟠 HIGH │OPEN │— │routes/search.ts │UNION-Based SQL Injection in Product ...│ │ 4dfe2409 │🟠 HIGH │OPEN │— │routes/userProfile.ts │Remote Code Execution via Eval in Use...│ │ 79d490b0 │🟠 HIGH │OPEN │— │routes/fileUpload.ts │Path Traversal (Zip Slip) in Zip File...│ │ 4f2b050c │🟠 HIGH │OPEN │— │routes/fileUpload.ts │XML External Entity (XXE) Injection i...│ │ 1ece0e25 │🟠 HIGH │OPEN │— │server.ts │Missing Authorization on Product Upda...│ │ 757fd438 │🟠 HIGH │OPEN │— │routes/trackOrder.ts │NoSQL / JavaScript Injection in Order...│ │ 349bac9f │🟡 MEDIUM │OPEN │— │routes/profileImageUrlUploa...│Server-Side Request Forgery (SSRF) in...│ │ be5e1459 │🟡 MEDIUM │OPEN │— │routes/redirect.ts │Open Redirect via Inadequate Allowlis...│ │ 06ecf8a5 │🟡 MEDIUM │OPEN │— │routes/basket.ts │Insecure Direct Object Reference (IDO...│ │ 02f6a293 │🟡 MEDIUM │OPEN │— │routes/dataErasure.ts │Local File Read via Insecure Template...│ │ 95ee59a3 │🟡 MEDIUM │OPEN │— │routes/updateProductReviews.ts│NoSQL Injection in Product Review Upd...│ └──────────┴───────────┴──────┴──────────┴──────────────────────────────┴────────────────────────────────────────┘ 12 finding(s): 1 CRITICAL, 6 HIGH, 5 MEDIUM · ✅ 1 fixed, 🔴 11 open 📋 Report generated at 2026-10-29 04:01:10 UTC 2026-10-29T04:01:10Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261029T040110Z_pending.log
مرحله ۳: بررسی مصرف نمانه بااستفاده از cm stats
cm stats را اجرا کنید تا مصرف محلی کد را در حالتهای اسکن (cm find --quick، cm verify، و cm fix) بررسی کنید:
cm stats
خروجی:
COMMAND REQUESTS POLLS INPUT OUTPUT CACHED THOUGHT TOOL_CALLS TOTAL CACHE_HIT% THINK_RATIO% DURATION ─────── ──────── ───── ───── ────── ────── ─────── ────────── ───── ────────── ──────────── ──────── total 3 186 10.7M 23.1k 9.9M 55.5k 0 10.8M 91.8% 70.7% 35m 54s cm find --quick 1 33 2.0M 9.4k 1.8M 15.2k 0 2.1M 90.6% 61.8% 05m 44s cm fix 1 33 870.9k 908 678.6k 20.3k 0 892.2k 77.9% 95.7% 04m 40s cm verify 1 120 7.8M 12.7k 7.3M 20.0k 0 7.9M 93.6% 61.1% 25m 31s 3 turn(s) across 3 command type(s) in the last 7 days 2026-10-22T02:24:46Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261022T022446Z_pending.log
مرحله ۴: تولید و پیشدید گزارش HTML تعاملی (cm report -f html)
یافتههای اسکن و وصلههای اعمالشده را بهعنوان داشبورد HTML تعاملی و مستقل صادر کنید:
cm report -f html
cp ~/.codemender/reports/report.html ./report.html
برای مشاهده report.html در Google Cloud Shell:
سرور وب پیشنمایش محلی را در پایانه Cloud Shell خود راهاندازی کنید:
python3 -m http.server 8080
در نوارابزار بالا سمت چپ Cloud Shell، روی دکمه پیشنمایش وب (نماد چشم/صفحه) ➔ پیشنمایش در درگاه ۸۰۸۰ کلیک کنید تا داشبورد تعاملی رعایت مقررات را در مرورگرتان ببینید.
(جایگزین) در کاوشگر فایل Cloud Shell Editor، روی report.html کلیک راست کنید و روی بارگیری کلیک کنید تا فایل را در مرورگر محلیتان مشاهده کنید.
مرحله ۵: ویژگیهای کلیدی گزارش HTML تعاملی تولیدشده
در زیر، تفکیک مؤلفههای کلیدی گزارش HTML تعاملی تولیدشده (report.html) ارائه شده است:

۱. کارتهای وضعیت و سرصفحه سنجههای اجرایی
فراداده سرصفحه: جزئیات مخزن هدف (OWASP Juice Shop)، تعداد کل فایلهای منبع اسکنشده (684 files)، و مُهر زمان تولید UTC را نمایش میدهد.
شبکه کارتهای سنجه: نمای کلی سطح بالا و فوری از کل یافتهها، توزیعهای شدت (CRITICAL، HIGH، MEDIUM، LOW)، و کل آسیبپذیریهای اصلاحشده (FIXED) ارائه میدهد.
۲. جدول خلاصه یافتههای تعاملی
ماتریس آسیبپذیری: جدولی قابلفیلتر کردن را نمایش میدهد که حاوی ID، Severity، Status (OPEN درمقابل FIXED)، CWE Type، File Location، Vulnerability Title، و Confidence Score است.
۳. تحلیل عمیق علت ریشهای و تکهکد منبع آسیبپذیر
تحلیل جمعشدنی (RCA): با کلیک کردن روی هر ردیف یافته، «تحلیل علت ریشهای» مفصل که توسط مدل استدلال امنیتی Gemini ترکیب شده است ازهم باز میشود.
تکهکد منبع آسیبپذیر: شمارههای دقیق خط و کد منبع با نحو برجستهشده را در اطراف سینک آسیبپذیر نمایش میدهد.
۴. تفاوتهای وصله اصلاحی هوش مصنوعی ترکیبی
نمای تفاضلی یکپارچه: برای آسیبپذیریهای اصلاحشده (FIXED)، CodeMender یک بلوک تفاضلی یکپارچه را ارائه میدهد که کدهای اضافهشده را به رنگ سبز (+) و کدهای آسیبپذیر حذفشده را به رنگ قرمز (-) برجسته میکند.
مرحله ۶: (اختیاری) وارد کردن یافتههای SAST طرف سوم (cm report import)
CodeMender به نقصهایی که اسکنر خودش کشف میکند محدود نمیشود. تیمها میتوانند نتایج SAST خارجی (مثلاً از Semgrep، Snyk، SonarQube، یا Fortify) را بااستفاده از طرحواره JSON استانداردشده یا جادوی تعاملی وارد کنند، که به CodeMender اجازه میدهد فوراً اصلاحات را برای آنها تأیید و ترکیب کند:
# Create a sample third-party findings JSON file
cat << 'EOF' > ./findings.json
[
{
"file_path": "routes/basket.ts",
"line": 18,
"title": "SQL Injection in Basket Handler",
"message": "Raw basket ID concatenated in query",
"severity": "HIGH",
"vuln_type": "CWE-89"
}
]
EOF
# Ingest findings into CodeMender state database
cm report import --file ./findings.json
خروجی:
Successfully imported 1 findings. 2026-10-22T02:27:10Z [INFO] 📄 Session log: /home/user/.codemender/logs/20261022T022710Z_pending.log
۱۰. پاکسازی منابع
⏱️ مدت: ۰۱:۰۰
برای جلوگیری از استفاده غیرضروری از دیسک در محیط Google Cloud Shell و پاکسازی منابع موقت کارگاه، این مراحل پاکسازی را دنبال کنید.
مرحله ۱: پاک کردن حافظه نهان محلی CodeMender و برداشتن مخزن
CodeMender یک فرمان cm clean داخلی برای پاکسازی پایگاه داده یافتههای محلی (~/.codemender/state.db)، گزارشهای HTML، و فایلهای پشتیبان منبع ارائه میدهد. فرمانهای زیر را در Cloud Shell اجرا کنید:
# Purge local SQLite findings cache, HTML reports, and backup files
cm clean
# Remove cloned repository
cd ~
rm -rf ~/juice-shop
مرحله ۲: (اختیاری) غیرفعال کردن Google Cloud APIs
اگر قصد ندارید از CodeMender یا Agent Platform API در این پروژه برای توسعه بیشتر استفاده کنید، میتوانید میاناهای برنامهسازی کاربردی سرویس را غیرفعال کنید:
gcloud services disable \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
--project=${PROJECT_ID}
۱۱. تبریک میگوییم
⏱️ مدت: ۰۲:۰۰
تبریک! شما بااستفاده از CodeMender در «پلاتفرم عامل Gemini Enterprise» در Google Cloud، OWASP Juice Shop را باموفقیت از یک برنامه آسیبپذیر عمدی به یک پایگاه کد امن و مقاوم تبدیل کردهاید.
آنچه پوشش دادهاید
اصلاح حلقه بسته خودکار: CodeMender با اجرای یک چرخه حیات امنیتی کامل و خودگردان، از هشدار استاتیک غیرفعال فراتر میرود—از کشف مخزن (cm find) تا تأیید بهرهبرداری از محیط امن (cm verify) و ترکیب وصله آزمایششده با رگرسیون (cm fix).
اثباتهای بهرهبرداری مبتنی بر شواهد: CodeMender با ثبت مصنوعات درستیسنجی ملموس (PLAN.md، LOG.md، exploit.sh، REPORT.md)، موارد مثبت کاذب را حذف میکند و قابلیت بهرهبرداری در دنیای واقعی را قبلاز نوشتن هر کدی اثبات میکند.
اصلاحات اصطلاحی بافتآگاه: عوامل استدلال Gemini بهجای اعمال جایگزینیهای نوشتاری عمومی، معماری برنامه، مدلهای داده، و ORMها را تجزیهوتحلیل میکنند تا وصلههای تمیز و قابلنگهداری (مانند پُرسمانهای Sequelize پارامترشده) تولید کنند که منطق کسبوکار موجود را حفظ میکند.
حفاظهای ایمنی و آزمایشی داخلی: هر اصلاح پیشنهادی بهطور خودکار دربرابر مجموعههای آزمایشی پروژه (npm test) و بررسیکنندههای نوع (tsc) در محیطهای امن فضای کاری مجزا اعتبارسنجی میشود، قبلاز اینکه تغییرات آمادهسازی شوند.
تغییر طرز فکر توسعهدهنده
گردش کار SAST دستی سنتی | Autonomous Remediation with CodeMender (cm) |
خستگی از هشدار: ساعتها صرف اولویتبندی گزارشهای پرنوفه با نرخهای مثبت کاذب بالا میشود. | Agentic Code Discovery ( |
درستیسنجی دستی اثبات مفهوم: ساختن بار دادههای curl سفارشی و اسکریپتهای حمله برای تأیید آسیبپذیریها. | Automated Exploit Proofs ( |
بازسازی کد دستی پرخطر: وصله کردن دستی پُرسمانهای پیچیده پایگاه داده که اغلب باعث ایجاد خطاهای نحوی یا زمان اجرا میشود. | Idiomatic Patch Synthesis ( |
خطرات پسرفت تولید: وصلههای امنیتی اغلب منطق یا آزمایشهای کسبوکار پاییندستی را مختل میکنند. | حفاظهای آزمایش خودکار: اعتبارسنجی مداوم دربرابر مجموعه آزمونهای محلی و جعبههای شنی فرایند مجزا. |
مجموعههای انطباق دستی: جمعآوری دستی یافتهها در اسناد ثابت برای بررسیهای حسابرسی. | دور سنجی استانداردشده و SARIF ( |
مراحل بعدی
🚀 ادامه سهگانه CodeMender:
بخش ۲: ایمنسازی خط لوله CI/CD با CodeMender — خودکارسازی اسکن مداوم بدون واسط، ادغام داشبورد SARIF، و درخواستهای کشش خوداصلاحی در GitHub Actions.
بخش ۳: کدنویسی امن با Antigravity و CodeMender — توسعه هوش مصنوعی زایا را با دستیار امنیتی خودکار جفت کنید.
📖 کاوش اسناد:
CodeMender در اسناد Google Cloud
Google Cloud Security Solutions
💡 اعمال کردن بر پروژههای خودتان:
cm find . و cm fix را در مخازن Node.js، Python، Go، Java، Rust، یا C/C++ خودتان اجرا کنید!