1. शुरू करने से पहले
⏱️ अवधि: 03:00
Google Cloud के Gemini Enterprise Agent प्लैटफ़ॉर्म पर, CodeMender की मदद से अपने ऐप्लिकेशन को सुरक्षित बनाने के लिए, इस कोडलैब में आपका स्वागत है.
इस वर्कशॉप में, आपको क्लाउड सिक्योरिटी इंजीनियर की भूमिका निभाने का मौका मिलेगा. आपको OWASP जूस शॉप का ऑडिट करने और उसे सुरक्षित बनाने का टास्क दिया जाएगा. यह एक इंडस्ट्री स्टैंडर्ड वेब ऐप्लिकेशन है, जिसे Node.js, Express, TypeScript, और Angular की मदद से बनाया गया है. इसमें जान-बूझकर कमज़ोरियां छोड़ी गई हैं.
सुरक्षा की जांच करने वाले पारंपरिक टूल (एसएएसटी/डीएएसटी), डेवलपमेंट टीमों को सुरक्षा से जुड़ी हज़ारों स्टैटिक गड़बड़ियां दिखाते हैं. इनमें से ज़्यादातर गड़बड़ियां गलत होती हैं और कोड में मौजूद गड़बड़ियों को ठीक करने के लिए कोई कार्रवाई नहीं की जा सकती. डेवलपर को लॉग की जांच करने, डेटा फ़्लो को ट्रैक करने, और मैन्युअल तरीके से पैच लिखने में घंटों लग जाते हैं. इससे अक्सर ऐप्लिकेशन के मौजूदा व्यवहार में रुकावट आती है.
CodeMender, कोड की सुरक्षा को बेहतर बनाने के लिए, Google के Gemini एलएलएम के साथ काम करने वाले एआई एजेंट के लिए फ़्रेमवर्क का इस्तेमाल करता है. CodeMender, Google DeepMind के बनाए गए प्रॉम्प्ट, सुरक्षा से जुड़ी खास स्किल, और मल्टी-एजेंट ऑर्केस्ट्रेशन का इस्तेमाल करता है. यह एक ऑटोनॉमस एआई सिक्योरिटी को-डेवलपर के तौर पर काम करता है. यह लोकल सोर्स रिपॉज़िटरी में मौजूद सॉफ़्टवेयर की कमियों का पता लगाता है, उनकी पुष्टि करता है, और उन्हें ठीक करता है.
ज़रूरी शर्तें
- वेब ऐप्लिकेशन से जुड़े जोखिमों की बुनियादी जानकारी (OWASP के टॉप 10 जोखिम, जैसे कि एसक्यूएल इंजेक्शन और XSS)
- JavaScript/TypeScript और Node.js ऐप्लिकेशन के बारे में बुनियादी जानकारी
- कमांड-लाइन इंटरफ़ेस (सीएलआई) टूल के बारे में बुनियादी जानकारी
आपको क्या सीखने को मिलेगा
- Google Cloud Shell में CodeMender (
cm) सीएलआई को सेट अप करने, उसकी पुष्टि करने, और उसे शुरू करने का तरीका. - किसी रिपॉज़िटरी को अपने-आप स्कैन करके, उसमें मौजूद ऐसी कमियों का पता लगाने का तरीका जिनका फ़ायदा उठाया जा सकता है (
cm find). - अलग-अलग सैंडबॉक्स में मौजूद कमज़ोरियों की पुष्टि करने और पुष्टि करने के आर्टफ़ैक्ट (
cm verify) की जांच करने का तरीका. - कॉन्टेक्स्ट-अवेयर सिक्योरिटी पैच (
cm fix) को अपने-आप सिंथेसाइज़, टेस्ट, और लागू करने का तरीका. - टोकन टेलीमेट्री का ऑडिट करने और अलग-अलग फ़ॉर्मैट में, नियमों के पालन की रिपोर्ट एक्सपोर्ट करने का तरीका (
cm stats,cm report).
आपको क्या करना होगा
- बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट
- ऐक्टिव प्रोजेक्ट कनेक्शन वाला Google Cloud Shell. इसमें पहले से इंस्टॉल किया गया
gcloud,git, और Node.js 18+ शामिल है - स्टार्टर रिपॉज़िटरी: OWASP जूस शॉप GitHub रिपॉज़िटरी
2. CodeMender के आर्किटेक्चर के बारे में जानकारी
⏱️ अवधि: 04:00
कोड स्कैन करने और समस्या को ठीक करने के बारे में जानने से पहले, आइए समझते हैं कि CodeMender, Gemini Enterprise Agent Platform में कैसे काम करता है. यह Google Cloud के आर्किटेक्चर के आधिकारिक स्टैंडर्ड के मुताबिक काम करता है.
सिस्टम आर्किटेक्चर: एजेंट और क्लाइंट डीमन

उपयोगकर्ता के नज़रिए से, CodeMender के आर्किटेक्चर में दो मुख्य कॉम्पोनेंट शामिल हैं:
होस्ट किया गया मल्टी-एजेंट प्लैटफ़ॉर्म: Google Cloud पर होस्ट किया गया मल्टी-एजेंट सिस्टम, जो सुरक्षा से जुड़े मुख्य कारोबारी नियम, एलएलएम प्रॉम्प्ट इंजीनियरिंग, और सुरक्षा से जुड़े तर्क को लागू करता है.
लोकल क्लाइंट सीएलआई और सैंडबॉक्स डीमन (cm): Google Cloud Shell में चलने वाला क्लाइंट, जो सीएलआई (cm find, cm verify, cm fix जैसे निर्देश देने के लिए) और लोकल डीमन (अलग-अलग प्रोसेस-लेवल सैंडबॉक्स में एजेंट की ओर से सुरक्षित तरीके से निर्देश लागू करने के लिए), दोनों के तौर पर काम करता है.
समस्या को ठीक करने की तीन मुख्य सुविधाएं

CodeMender, कोड की सुरक्षा को तीन चरणों में मैनेज करता है:
कमियां पता लगाना (cm find): यह एजेंट के ज़रिए एलएलएम का इस्तेमाल करके, कोड बेस को स्कैन करता है. साथ ही, सुरक्षा से जुड़े खास टूल और प्रॉम्प्ट इंजीनियरिंग का इस्तेमाल करके, मॉडल को सुरक्षा से जुड़ी कमियों पर फ़ोकस करने में मदद करता है. (इसके अलावा, बाहरी सुरक्षा स्कैनिंग टूल से भी नतीजे इंपोर्ट किए जा सकते हैं).
कमज़ोरियों की पुष्टि करना (cm verify): यह टूल, कोड को स्थानीय तौर पर बनाता है और उसमें मौजूद कमज़ोरियों का फ़ायदा उठाने की कोशिश करता है. इससे यह पुष्टि की जाती है कि क्या उन कमज़ोरियों का फ़ायदा उठाया जा सकता है. इससे फ़ॉल्स पॉज़िटिव की समस्या खत्म हो जाती है. साथ ही, .exploit/ (info.yaml, PLAN.md, LOG.md, exploit.sh, REPORT.md) में वर्कस्पेस की पुष्टि करने वाले आर्टफ़ैक्ट जनरेट होते हैं.
Fix Vulnerabilities (cm fix): यह सुविधा, भाषा के हिसाब से सोर्स पैच को सिंथेसाइज़ करती है. साथ ही, लोकल सैंडबॉक्स में प्रोजेक्ट बिल्ड और रिग्रेशन टेस्ट सुइट (npm test) चलाकर उनकी पुष्टि करती है.
3. OWASP जूस शॉप एनवायरमेंट सेट अप करना
⏱️ अवधि: 05:00
इस चरण में, आपको Google Cloud टर्मिनल एनवायरमेंट खोलना होगा और टारगेट ऐप्लिकेशन रिपॉज़िटरी को फ़ेच करना होगा.
पहला चरण: Google Cloud console में Cloud Shell खोलना
अपने ब्राउज़र में, Google Cloud Console पर जाएं.
सबसे ऊपर मौजूद नेविगेशन बार में, Cloud Shell चालू करें बटन (आइकॉन >_) पर क्लिक करें.
Cloud Shell, ब्राउज़र पर आधारित Linux टर्मिनल उपलब्ध कराता है. इसमें gcloud, git, और Node.js पहले से इंस्टॉल और पुष्टि किए हुए होते हैं.
दूसरा चरण: OWASP Juice Shop रिपॉज़िटरी को क्लोन करना
अपने Cloud Shell या लोकल टर्मिनल में, OWASP जूस शॉप रिपॉज़िटरी को क्लोन करें:
git clone https://github.com/juice-shop/juice-shop.git --depth 1
cd juice-shop
तीसरा चरण: ऐप्लिकेशन की मुख्य फ़ाइलों की जांच करना
OWASP जूस शॉप, TypeScript मॉड्यूल के साथ बैकएंड पर Express.js का इस्तेमाल करती है. डायरेक्ट्री के स्ट्रक्चर पर एक नज़र डालें:
ls -la routes/ lib/
पुष्टि करने, उपयोगकर्ता की क्वेरी, और कार्ट एडमिनिस्ट्रेशन को मैनेज करने वाली मुख्य रूट फ़ाइलों पर ध्यान दें:
routes/login.ts: यह उपयोगकर्ता की पुष्टि करने और रॉ एसक्यूएल क्वेरी को लागू करने की प्रोसेस को मैनेज करता है.
routes/search.ts: यह प्रॉडक्ट खोजने और जवाब रेंडर करने की प्रोसेस को मैनेज करता है.
routes/basket.ts: उपयोगकर्ता के शॉपिंग कार्ट को वापस पाने की प्रोसेस को मैनेज करता है.
routes/trackOrder.ts: NoSQL क्वेरी की मदद से, ऑर्डर ट्रैक करने की सुविधा को मैनेज करता है.
lib/xml.ts: यह एक्सएमएल पार्स करने और फ़ाइलें अपलोड करने की सुविधा देता है.
lib/insecurity.ts: सेशन टोकन और एन्क्रिप्शन के लिए मददगार सुविधाएं.
4. CodeMender सीएलआई (cm) इंस्टॉल करना और GCP क्रेडेंशियल की पुष्टि करना
⏱️ अवधि: 08:00
इस चरण में, आपको ज़रूरी Google Cloud API चालू करने होंगे. साथ ही, gcloud का इस्तेमाल करके आईएएम अनुमतियां देनी होंगी. इसके बाद, cm सीएलआई बाइनरी को डाउनलोड और इंस्टॉल करना होगा. साथ ही, ऐप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल (एडीसी) को कॉन्फ़िगर करना होगा.
पहला चरण: gcloud की मदद से, ज़रूरी Google Cloud API चालू करें
CodeMender को Gemini Enterprise Agent Platform पर, Agent Platform API (aiplatform.googleapis.com) और Cloud Resource Manager API (cloudresourcemanager.googleapis.com) की ज़रूरत होती है.
Cloud Shell या अपने टर्मिनल में, अपना चालू प्रोजेक्ट आईडी वापस पाएं या Google Cloud Console में सबसे ऊपर मौजूद प्रोजेक्ट ड्रॉपडाउन को देखें. इसके बाद, ज़रूरी सर्विस एपीआई चालू करें:
# 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)"
दूसरा चरण: gcloud की मदद से, आईएएम की अनुमतियां देना
CodeMender के क्लाउड रीज़निंग इंजन का इस्तेमाल करने के लिए, उपयोगकर्ताओं और सेवा खातों को roles/aiplatform.user (एजेंट प्लैटफ़ॉर्म उपयोगकर्ता) आईएएम भूमिका असाइन की जानी चाहिए.
सीएलआई के ज़रिए अपने उपयोगकर्ता खाते को आईएएम की भूमिका देना
# 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 Cloud Shell में सीएलआई डाउनलोड और इंस्टॉल करना
Google Cloud Shell में, उपयोगकर्ता का डेटा आपकी $HOME डायरेक्ट्री में सेव रहता है. sudo की ज़रूरत के बिना, ~/bin में cm इंस्टॉल करने के लिए, ये कमांड चलाएं. आप अब भी पिछले सेक्शन के ~/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 सीएलआई के इंस्टॉल होने की पुष्टि करना
cm --version चलाएं, ताकि यह पुष्टि की जा सके कि सीएलआई बाइनरी सही तरीके से इंस्टॉल की गई है:
cm --version
अनुमानित आउटपुट:
cm version 0.17.0
पांचवां चरण: Google Cloud ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) को कॉन्फ़िगर करना
Google Cloud ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) को कॉन्फ़िगर करें, ताकि cm, Cloud Reasoning Engine को किए गए अनुरोधों की पुष्टि कर सके:
gcloud auth application-default login
आपको Cloud Shell को अनुमति दें लेबल वाला, अनुमति देने का मॉडल डायलॉग दिखेगा. ऐक्सेस देने के लिए, अनुमति दें पर क्लिक करें.
5. CodeMender वर्कस्पेस को शुरू करना और उसकी पुष्टि करना
⏱️ अवधि: 03:00
अब 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/*"])
6. cm find की मदद से कमज़ोरियों का पता लगाएं .
⏱️ अवधि: 07:00
इस चरण में, आपको cm find . --quick को चलाना होगा, ताकि Juice Shop के कोड बेस में एजेंटिक सिक्योरिटी स्कैन को चलाया जा सके.
पहला चरण: cm find . --quick को लागू करें
CodeMender के v0.16.0 वर्शन से, cm find <path> डिफ़ॉल्ट रूप से Deep Scan ( पर सेट होता है
--deep
) का इस्तेमाल करें. वहीं, क्विक स्कैन (
--quick
) की मदद से, डेटा स्टोर करने की जगह को तेज़ी से मैनेज किया जा सकता है. OWASP जूस शॉप रिपॉज़िटरी में क्विक स्कैन करने के लिए, cm find . --quick चलाएं (अनुमानित समय: 684 फ़ाइलों के पूरे कोडबेस की जांच के लिए ~8 मिनट):
cm find . --quick -y --sandbox=false --bypass-warning --model gemini-3.8-flash
cm, Gemini Enterprise Agent Platform पर स्कैन सेशन लॉन्च करता है. इससे सभी रिपॉज़िटरी मॉड्यूल में मौजूद सोर्स कोड फ़ाइलों का विश्लेषण किया जाता है:
⚠️ 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 की मदद से, स्कैन के नतीजों की समीक्षा करना
लोकल SQLite स्टेट डेटाबेस से, सुरक्षा से जुड़ी सभी समस्याओं को दिखाने के लिए, cm report -f table चलाएं:
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: तुरंत होने वाला गंभीर खतरा (जैसे, रिमोट कोड एक्ज़ीक्यूशन, बिना पुष्टि वाला एसक्यूएल इंजेक्शन), जिस तक सीधे तौर पर गैर-भरोसेमंद सोर्स से पहुंचा जा सकता है.
HIGH: गंभीर गड़बड़ी (जैसे, डेटाबेस को बिना अनुमति के ऐक्सेस करना, प्रिविलेज एस्कलेशन). इसके लिए, उपयोगकर्ता के खास कॉन्टेक्स्ट या चेन की गई शर्तों की ज़रूरत होती है.
🟡 MEDIUM: इसमें जोखिम का लेवल सामान्य होता है.इसमें जोखिम का दायरा सीमित होता है या उपयोगकर्ता के इंटरैक्शन की ज़रूरत होती है. जैसे, ओपन रीडायरेक्ट, सीएसआरएफ़.
🔵 LOW: मज़बूत सुरक्षा से जुड़ी कमियां या जानकारी इकट्ठा करने के लिए इस्तेमाल किए जाने वाले वेक्टर, जिनका सीधा असर बहुत कम होता है.
7. जोखिमों की पुष्टि करना और पुष्टि करने के लिए कैप्चर किए गए आर्टफ़ैक्ट देखना
⏱️ अवधि: 10:00
CodeMender की मुख्य सुविधाओं में से एक है, cm verify को चलाने पर, स्थायी पुष्टि करने वाले आर्टफ़ैक्ट अपने-आप जनरेट होना. आइए, routes/login.ts (इस ट्यूटोरियल में 43aa7446 के तौर पर दिखाया गया है) में एसक्यूएल इंजेक्शन के गंभीर खतरे की पुष्टि करें. साथ ही, एजेंट के बनाए गए आर्टफ़ैक्ट देखें.
पहला चरण: cm verify <login-finding-id> को लागू करें
अपनी cm report टेबल (उदाहरण के लिए, 43aa7446) से routes/login.ts के लिए फ़ाइंडिंग आईडी ढूंढें और cm verify <finding-id> --sandbox=false --bypass-warning -y चलाएं (एग्ज़ीक्यूशन में लगने वाला अनुमानित समय: ऑटोनॉमस टूल के चरणों को चलाने, बैकग्राउंड में चलने वाली सेवाओं को शुरू करने, और लाइव PoC एक्सप्लॉइट स्क्रिप्ट को चलाने के लिए ~20 मिनट):
# 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 के v0.16.0 वर्शन से, पुष्टि करने वाले आर्टफ़ैक्ट को रिपॉज़िटरी के रूट में .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, जिसमें यूयूआईडी, टाइटल, गंभीरता ( |
| एजेंट की रणनीति | पुष्टि करने का सिलसिलेवार प्लान और चेकलिस्ट, जिसे CodeMender का रीज़निंग इंजन अपने-आप लागू करता है. |
| एक्ज़ीक्यूशन ट्रेस लॉग | टाइमस्टैंप वाली ऑडिट ट्रेल, जिसमें हर टूल कॉल, एचटीटीपी अनुरोध एंडपॉइंट, और टेस्ट के नतीजे रिकॉर्ड किए जाते हैं. |
| हेल्पर रनर / सर्वर लॉग | एजेंट ने टेस्टिंग के लिए, Juice Shop को शुरू करने के लिए हेल्पर स्क्रिप्ट बनाई. साथ ही, सर्वर आउटपुट को कैप्चर किया. |
| एक्ज़ीक्यूशन रैपर / स्टैंडअलोन पीओसी | टारगेट सेवा को लॉन्च करने और PoC क्लाइंट को कॉल करने वाला शेल स्क्रिप्ट रैपर, एचटीटीपी 200 रिस्पॉन्स की पुष्टि करता है. |
| असल वजह का विश्लेषण | कारोबार के बारे में कम शब्दों में बताने वाली खास जानकारी, हर लाइन में मौजूद जोखिम का विश्लेषण, रॉ एसक्यूएल ब्रेकडाउन, और Sequelize पैरामीटर के सुझाव. |
तीसरा चरण: पुष्टि करने के लिए ज़रूरी आर्टफ़ैक्ट की खास जानकारी
एजेंट हर बार चलने पर, इन आर्टफ़ैक्ट को नए सिरे से लिखता है. इसलिए, हर बार इनका कॉन्टेंट अलग होता है. उन्हें Cloud Shell Editor में (या cat की मदद से) खोलें और इन्हें ढूंढें:
आर्टिफ़ैक्ट | समीक्षा करते समय क्या देखें |
| नतीजे का पूरा आईडी, टाइटल, गंभीरता, कॉन्फ़िडेंस, और टैग, जैसे कि |
| एजेंट ने जिस चेकलिस्ट का पालन किया है उसमें, रिपोर्ट की गई फ़ाइल को पढ़ने से लेकर, गड़बड़ी को दोहराने वाली स्क्रिप्ट लिखने तक की जानकारी शामिल है. |
| टाइमस्टैंप वाली कार्रवाइयां और नतीजे. इनमें, रीप्रोडक्शन स्क्रिप्ट के हर रन का नतीजा शामिल है. |
| अलग से मौजूद रीप्रोडक्शन स्क्रिप्ट: यह ऐप्लिकेशन को कैसे शुरू करती है, किस एंडपॉइंट को टारगेट करती है, और सफलता का फ़ैसला कैसे करती है (यह |
| एजेंट ने टेस्टिंग के लिए Juice Shop को शुरू करने के लिए हेल्पर फ़ाइलें बनाईं. साथ ही, सर्वर का आउटपुट भी बनाया. |
| असल वजह का विश्लेषण: |
8. एसक्यूएल इंजेक्शन की समस्या को ठीक करने के लिए, सीएम फ़िक्स का इस्तेमाल करना
⏱️ अवधि: 10:00
अब हमने 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
दूसरा चरण: 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 के लिए प्रोजेक्ट रूट को मार्क करता है. अगले चरण में, आपको उन्हें अपनी कमिट से बाहर रखना होगा.
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
अगर आपने .git/info/exclude को अपडेट करने से पहले cm vcs stage को चलाया है, तो git restore --staged .exploit .cm_project का इस्तेमाल करके CodeMender की फ़ाइलों को अनस्टेज करें. फ़ाइलें डिस्क पर सेव रहती हैं. उन्हें सिर्फ़ स्टेजिंग एरिया से हटाया जाता है.
चौथा चरण: पैच को कमिट करना और पुष्टि करने वाले आर्टफ़ैक्ट मिटाना
अगली समस्या को ठीक करने से पहले, स्टेज किए गए पैच को कमिट करें: हर 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" चलाएं. इसके बाद, फिर से कमिट करें.
9. पैच की पुष्टि करना, सेशन मैनेज करना, और रिपोर्ट एक्सपोर्ट करना (cm report)
⏱️ अवधि: 08:00
एआई से जनरेट की गई सुरक्षा से जुड़ी समस्या को ठीक करने के बाद, चालू सेशन को मैनेज करना, टोकन के इस्तेमाल के आंकड़ों की जांच करना, और 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 चलाएं. ध्यान दें कि ठीक किए गए नतीजे अब Fix कॉलम में ✅ applied के साथ FIXED दिखाते हैं:
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 find --quick, cm verify, और cm fix) में लोकल टोकन के इस्तेमाल की जांच करने के लिए, cm stats को चलाएं:
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
चौथा चरण: इंटरैक्टिव एचटीएमएल रिपोर्ट जनरेट करना और उसकी झलक देखना (cm report -f html)
स्कैन के नतीजों और लागू किए गए पैच को स्टैंडअलोन, इंटरैक्टिव एचटीएमएल डैशबोर्ड के तौर पर एक्सपोर्ट करें:
cm report -f html
cp ~/.codemender/reports/report.html ./report.html
Google Cloud Shell में report.html को देखने के लिए:
अपने Cloud Shell टर्मिनल में, झलक दिखाने वाला लोकल वेब सर्वर शुरू करें:
python3 -m http.server 8080
Cloud Shell के सबसे ऊपर दाएं टूलबार में, वेब की झलक बटन (आंख/स्क्रीन वाला आइकॉन) ➔ पोर्ट 8080 पर झलक देखें पर क्लिक करें. इससे आपको अपने ब्राउज़र में, इंटरैक्टिव कंप्लायंस डैशबोर्ड दिखेगा.
(दूसरा तरीका) Cloud Shell Editor के फ़ाइल एक्सप्लोरर में, report.html पर राइट क्लिक करें. इसके बाद, अपने लोकल ब्राउज़र में फ़ाइल देखने के लिए, डाउनलोड करें पर क्लिक करें.
पांचवां चरण: जनरेट की गई इंटरैक्टिव एचटीएमएल रिपोर्ट की मुख्य सुविधाएं
जनरेट की गई इंटरैक्टिव एचटीएमएल रिपोर्ट (report.html) के मुख्य कॉम्पोनेंट की जानकारी यहां दी गई है:

1. एग्ज़ीक्यूटिव मेट्रिक हेडर और पोस्चर कार्ड
हेडर मेटाडेटा: इसमें टारगेट रिपॉज़िटरी की जानकारी (OWASP Juice Shop), स्कैन की गई सोर्स फ़ाइलों की कुल संख्या (684 files), और यूटीसी जनरेशन टाइमस्टैंप दिखता है.
मेट्रिक कार्ड ग्रिड: इससे आपको कुल नतीजों, गंभीरता के लेवल (CRITICAL, HIGH, MEDIUM, LOW), और ठीक की गई कुल कमज़ोरियों (FIXED) की खास जानकारी तुरंत मिलती है.
2. नतीजों की खास जानकारी देने वाली इंटरैक्टिव टेबल
कमज़ोरी की जानकारी देने वाली टेबल: इसमें फ़िल्टर की जा सकने वाली टेबल दिखती है. इसमें ID, Severity, Status (OPEN बनाम FIXED), CWE Type, File Location, Vulnerability Title, और Confidence Score शामिल हैं.
3. असल वजह का गहराई से विश्लेषण और असुरक्षित सोर्स कोड स्निपेट
छोटा किया जा सकने वाला विश्लेषण (आरसीए): किसी भी नतीजे की लाइन पर क्लिक करने से, Gemini के सुरक्षा से जुड़े गहराई से विश्लेषण करने वाले मॉडल से तैयार किए गए असल वजह विश्लेषण की पूरी जानकारी दिखती है.
कमज़ोर सोर्स कोड स्निपेट: इसमें कमज़ोर सिंक के आस-पास की सटीक लाइन नंबर और सिंटैक्स-हाइलाइट किया गया सोर्स कोड दिखता है.
4. एआई की मदद से जनरेट किए गए, समस्या ठीक करने वाले पैच के डिफ़
यूनिफ़ाइड डिफ़ व्यू: ठीक की गई कमज़ोरियों (FIXED) के लिए, CodeMender एक यूनिफ़ाइड डिफ़ ब्लॉक रेंडर करता है. इसमें, लागू किए गए ऐप्लिकेशन कोड को हरे रंग (+) में और हटाए गए कमज़ोर कोड को लाल रंग (-) में हाइलाइट किया जाता है.
छठा चरण: (ज़रूरी नहीं) तीसरे पक्ष के एसएएसटी के नतीजों को इंपोर्ट करना (cm report import)
CodeMender, सिर्फ़ अपने स्कैनर से खोजी गई कमियों तक सीमित नहीं है. टीमें, स्टैंडर्ड JSON स्कीमा या इंटरैक्टिव विज़र्ड का इस्तेमाल करके, बाहरी SAST नतीजे (जैसे, Semgrep, Snyk, SonarQube या Fortify से) इंपोर्ट कर सकती हैं. इससे 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
10. संसाधन मिटाना
⏱️ अवधि: 01:00
अपने Google Cloud Shell एनवायरमेंट में डिस्क के ग़ैर-ज़रूरी इस्तेमाल से बचने और वर्कशॉप के अस्थायी संसाधनों को हटाने के लिए, यह तरीका अपनाएं.
पहला चरण: CodeMender की लोकल कैश मेमोरी को पूरी तरह से मिटाना और रिपॉज़िटरी को हटाना
CodeMender में पहले से मौजूद cm clean कमांड होता है. इसका इस्तेमाल करके, लोकल फ़ाइंडिंग डेटाबेस (~/.codemender/state.db), एचटीएमएल रिपोर्ट, और सोर्स बैकअप फ़ाइलों को मिटाया जा सकता है. Cloud Shell में ये कमांड चलाएं:
# Purge local SQLite findings cache, HTML reports, and backup files
cm clean
# Remove cloned repository
cd ~
rm -rf ~/juice-shop
दूसरा चरण: (ज़रूरी नहीं) Google Cloud API बंद करना
अगर आपको इस प्रोजेक्ट में आगे के डेवलपमेंट के लिए, CodeMender या Agent Platform के एपीआई इस्तेमाल नहीं करने हैं, तो सेवा के एपीआई बंद किए जा सकते हैं:
gcloud services disable \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
--project=${PROJECT_ID}
11. बधाई हो
⏱️ अवधि: 02:00
बधाई हो! आपने Google Cloud के Gemini Enterprise Agent Platform पर CodeMender का इस्तेमाल करके, OWASP जूस शॉप को एक कमज़ोर ऐप्लिकेशन से मज़बूत और सुरक्षित कोड बेस में बदल दिया है.
आपने क्या-क्या कवर किया है
ऑटोनॉमस क्लोज़्ड-लूप रेमेडिएशन: CodeMender, स्टैटिक अलर्ट के शोर से आगे बढ़कर, सुरक्षा से जुड़ी पूरी लाइफ़साइकल को खुद मैनेज करता है. इसमें रिपॉज़िटरी की खोज (cm find) से लेकर, सैंडबॉक्स में एक्सप्लॉइट की पुष्टि (cm verify) और रिग्रेशन-टेस्ट किए गए पैच सिंथेसिस (cm fix) तक शामिल हैं.
सबूतों के आधार पर कमज़ोरियों की पुष्टि: CodeMender, पुष्टि करने के लिए ज़रूरी आर्टफ़ैक्ट (PLAN.md, LOG.md, exploit.sh, REPORT.md) कैप्चर करता है. इससे, फ़ॉल्स पॉज़िटिव की समस्या खत्म हो जाती है और कोड लिखने से पहले ही, असल दुनिया में मौजूद कमज़ोरियों की पुष्टि हो जाती है.
कॉन्टेक्स्ट के हिसाब से, मुहावरेदार भाषा में सुधार: Gemini के रीज़निंग एजेंट, सामान्य टेक्स्ट को बदलने के बजाय, ऐप्लिकेशन आर्किटेक्चर, डेटा मॉडल, और ओआरएम का विश्लेषण करते हैं. इससे, साफ़ और आसानी से मैनेज किए जा सकने वाले पैच (जैसे, पैरामीटर वाली Sequelize क्वेरी) जनरेट होते हैं. इनसे मौजूदा कारोबारी नियम सुरक्षित रहते हैं.
पहले से मौजूद सुरक्षा और टेस्ट गार्डरेल: बदलावों को स्टेज करने से पहले, सुझाए गए हर समाधान की पुष्टि, प्रोजेक्ट टेस्ट सुइट (npm test) और टाइप चेकर (tsc) के ज़रिए अपने-आप की जाती है. यह पुष्टि, आइसोलेटेड वर्कस्पेस सैंडबॉक्स में की जाती है.
डेवलपर की सोच में बदलाव
मैन्युअल तरीके से SAST करने का पारंपरिक वर्कफ़्लो | CodeMender (cm) की मदद से, सुरक्षा से जुड़ी समस्याओं को अपने-आप ठीक करने की सुविधा |
अलर्ट फ़टीग: गलत पॉज़िटिव रेट वाली रिपोर्ट को छांटने में घंटों खर्च करना. | एजेंटिक कोड डिस्कवरी ( |
मैन्युअल तरीके से PoC की पुष्टि करना: कमज़ोरियों की पुष्टि करने के लिए, कस्टम curl पेलोड और अटैक स्क्रिप्ट तैयार करना. | ऑटोमेटेड एक्सप्लॉइट प्रूफ़ ( |
मैन्युअल रीफ़ैक्टरिंग में ज़्यादा जोखिम: डेटाबेस की जटिल क्वेरी को मैन्युअल तरीके से पैच करने पर, अक्सर सिंटैक्स या रनटाइम से जुड़ी गड़बड़ियां होती हैं. | Idiomatic Patch Synthesis ( |
प्रोडक्शन रिग्रेशन से जुड़े जोखिम: सिक्योरिटी पैच की वजह से, डाउनस्ट्रीम कारोबारी नियम या टेस्ट अक्सर काम करना बंद कर देते हैं. | ऑटोमेटेड टेस्ट गार्डरेल: लोकल टेस्ट सुइट और अलग-अलग प्रोसेस सैंडबॉक्स के ख़िलाफ़ लगातार पुष्टि करना. |
मैन्युअल तरीके से अनुपालन से जुड़े दस्तावेज़ों को इकट्ठा करना: ऑडिट की समीक्षाओं के लिए, नतीजों को मैन्युअल तरीके से स्टैटिक दस्तावेज़ों में इकट्ठा करना. | स्टैंडर्ड टेलीमेट्री और SARIF ( |
अगले चरण
🚀 CodeMender Trilogy को जारी रखें:
दूसरा पार्ट: CodeMender की मदद से अपनी सीआई/सीडी पाइपलाइन को सुरक्षित करना — GitHub Actions में, लगातार हेडलेस स्कैनिंग, SARIF डैशबोर्ड इंटिग्रेशन, और सेल्फ़-हीलिंग पुल रिक्वेस्ट को ऑटोमेट करें.
तीसरा पार्ट: Antigravity और CodeMender की मदद से सुरक्षित वाइब-कोडिंग — जनरेटिव एआई डेवलपमेंट को ऑटोनॉमस सिक्योरिटी असिस्टेंट के साथ जोड़ें.
दस्तावेज़ एक्सप्लोर करें:
Google Cloud के दस्तावेज़ों में CodeMender के बारे में जानकारी
Google Cloud Security Solutions
💡 अपने प्रोजेक्ट पर लागू करें:
अपने Node.js, Python, Go, Java, Rust या C/C++ रिपॉज़िटरी पर cm find . और cm fix चलाएं!