১. শুরু করার আগে
⏱️ সময়সীমা: ০৩:০০
Google Cloud-এর Gemini Enterprise Agent Platform-এ CodeMender-এর মাধ্যমে আপনার অ্যাপ্লিকেশন সুরক্ষিত করা সংক্রান্ত হ্যান্ডস-অন কোডল্যাবে স্বাগত।
এই ওয়ার্কশপে, আপনি একজন ক্লাউড নিরাপত্তা ইঞ্জিনিয়ারের ভূমিকা পালন করবেন, যার কাজ হল OWASP Juice Shop অডিট ও সুরক্ষিত করা—এটি হল শিল্পের নির্ধারিত মান, ইচ্ছাকৃতভাবে দুর্বল ওয়েব অ্যাপ্লিকেশন যা Node.js, Express, TypeScript ও Angular দিয়ে তৈরি।
প্রথাগত নিরাপত্তা স্ক্যানিং টুল (SAST/DAST) ডেভেলপমেন্ট টিমকে হাজার হাজার স্ট্যাটিক নিরাপত্তা ফলাফল, উচ্চ ফলস-পজিটিভ রেট এবং কোনও অ্যাকশনেবল কোড ফিক্স ছাড়াই ভরিয়ে দেয়। ডেভেলপাররা লগ ট্রায়াজ করা, ডেটা ফ্লো ট্র্যাক করা এবং ম্যানুয়ালি প্যাচ লেখার জন্য অনেক সময় ব্যয় করেন, যা প্রায়শই আগে থেকে থাকা অ্যাপ্লিকেশন আচরণকে ভেঙে দেয়।
CodeMender, Google-এর Gemini LLM-এর চারপাশে একটি ফাইন-টিউন করা এজেন্টিক হারনেস র্যাপ করার মাধ্যমে কোড সুরক্ষায় বিপ্লব ঘটায়। Google DeepMind-এর ইঞ্জিনিয়ারদের তৈরি করা প্রম্পট, বিশেষ নিরাপত্তা সংক্রান্ত দক্ষতা এবং মাল্টি-এজেন্ট অর্কেস্ট্রেশন ব্যবহার করে, CodeMender একটি অটোনোমাস AI সিকিউরিটি কো-ডেভেলপার হিসেবে কাজ করে যা সরাসরি লোকাল সোর্স রিপোজিটরির মধ্যে সফ্টওয়্যারের দুর্বলতা খুঁজে বের করে, যাচাই করে এবং সমাধান করে।
পূর্বশর্ত
- ওয়েব অ্যাপ্লিকেশন সংক্রান্ত ঝুঁকির (OWASP Top 10, যেমন SQL ইঞ্জেকশন ও XSS) ব্যাপারে প্রাথমিক ধারণা
- JavaScript/TypeScript এবং Node.js অ্যাপ্লিকেশন সম্পর্কে প্রাথমিক ধারণা
- কমান্ড-লাইন ইন্টারফেস (CLI) টুল সম্পর্কে প্রাথমিক ধারণা
আপনি কী শিখবেন
- Google Cloud Shell-এ CodeMender (
cm) CLI কীভাবে সেট-আপ, যাচাই ও শুরু করতে হয়। - কীভাবে এক্সপ্লয়েট করা যেতে পারে এমন ভালনারেবিলিটি (
cm find) খুঁজে পেতে অটোনোমাসভাবে রিপোজিটরি স্ক্যান করা যায়। - কীভাবে আইসোলেটেড স্যান্ডবক্সে দুর্বলতা যাচাই করতে হয় এবং যাচাইকরণ আর্টিফ্যাক্ট (
cm verify) পরীক্ষা করতে হয়। - কীভাবে স্বয়ংক্রিয়ভাবে সিন্থেসাইজ, পরীক্ষা এবং কনটেক্সট-অ্যাওয়ার সিকিউরিটি প্যাচ (
cm fix) প্রয়োগ করা যায়। - কীভাবে টোকেন টেলিমেট্রি অডিট করতে হয় এবং মাল্টি-ফরম্যাট কমপ্লায়েন্স রিপোর্ট এক্সপোর্ট করতে হয় (
cm stats,cm report)।
আপনার যা প্রয়োজন
- বিলিং চালু করা আছে এমন একটি Google Cloud প্রোজেক্ট
- অ্যাক্টিভ প্রোজেক্ট কানেকশন সহ Google Cloud Shell (আগে থেকে ইনস্টল করা
gcloud,gitও Node.js 18+ সহ) - স্টার্টার রিপোজিটরি: OWASP Juice Shop GitHub Repo
২. CodeMender আর্কিটেকচারের ভূমিকা
⏱️ সময়সীমা: ০৪:০০
কোড স্ক্যানিং ও প্রতিকার সম্পর্কে জানার আগে, আসুন জেনে নেওয়া যাক যে Google Cloud আর্কিটেকচার স্ট্যান্ডার্ড অনুযায়ী Gemini Enterprise Agent প্ল্যাটফর্মে CodeMender কীভাবে কাজ করে।
সিস্টেম আর্কিটেকচার: এজেন্ট ও ক্লায়েন্ট ডেমন

ব্যবহারকারীর দৃষ্টিকোণ থেকে, CodeMender-এ দুটি প্রধান আর্কিটেকচারাল কম্পোনেন্ট রয়েছে:
হোস্ট করা মাল্টি-এজেন্ট প্ল্যাটফর্ম: Google Cloud-এ রান করা একটি হোস্ট করা মাল্টি-এজেন্ট সিস্টেম যা মূল নিরাপত্তা সংক্রান্ত বিজনেস লজিক, LLM প্রম্পট ইঞ্জিনিয়ারিং এবং নিরাপত্তা সংক্রান্ত যুক্তি কার্যকর করে।
লোকাল ক্লায়েন্ট CLI ও স্যান্ডবক্স ডেমন (cm): Google Cloud Shell-এ চলা একটি ক্লায়েন্ট যা CLI (cm find, cm verify, cm fix-এর মতো কমান্ড ইস্যু করার জন্য) এবং লোকাল ডেমন (একটি বিচ্ছিন্ন প্রসেস-লেভেল স্যান্ডবক্সের মধ্যে এজেন্টের হয়ে নিরাপদে কমান্ড এক্সিকিউট করার জন্য) হিসেবে কাজ করে।
৩টি মূল প্রতিকারমূলক ক্ষমতা

CodeMender তিনটি ইন্টিগ্রেটেড স্টেজের মাধ্যমে কোডের নিরাপত্তা ম্যানেজ করে:
দুর্বলতা খুঁজে বের করা (cm find): এজেন্টের মাধ্যমে পরিচালিত LLM ব্যবহার করে কোডবেস স্ক্যান করে, বিশেষ নিরাপত্তা টুল এবং প্রম্পট ইঞ্জিনিয়ারিং ব্যবহার করে মডেলটিকে নিরাপত্তা ত্রুটির উপর ফোকাস করে। (বিকল্প হিসেবে, এক্সটার্নাল নিরাপত্তা স্ক্যানিং টুল থেকে ফলাফল ইমপোর্ট করা যেতে পারে)।
দুর্বলতা যাচাই করা (cm verify): লোকাল ডিভাইসে কোড তৈরি করে এবং খুঁজে পাওয়া ত্রুটিগুলি কাজে লাগানো যায় কিনা তা যাচাই করার জন্য সেগুলি কাজে লাগানোর চেষ্টা করে। এটি ভুল পজিটিভ বাদ দেয় এবং .exploit/ (info.yaml, PLAN.md, LOG.md, exploit.sh, REPORT.md)-এ স্থায়ী ওয়ার্কস্পেস যাচাইকরণ আর্টিফ্যাক্ট তৈরি করে।
দুর্বলতা ঠিক করা (cm fix): ভাষা-সচেতন সোর্স প্যাচ সিন্থেসাইজ করে এবং লোকাল স্যান্ডবক্সের মধ্যে প্রোজেক্ট বিল্ড ও রিগ্রেশন টেস্ট স্যুট (npm test) রান করে সেগুলি যাচাই করে।
৩. OWASP Juice Shop এনভায়রনমেন্ট সেট-আপ করা
⏱️ সময়সীমা: ০৫:০০
এই ধাপে, আপনি Google Cloud টার্মিনাল এনভায়রনমেন্ট খুলবেন এবং টার্গেট অ্যাপ্লিকেশন রিপোজিটরি ফেচ করবেন।
ধাপ ১: Google Cloud কনসোলে Cloud Shell খুলুন
আপনার ব্রাউজারে Google Cloud Console-এ নেভিগেট করুন।
উপরের নেভিগেশন বারে, 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 ব্যাকএন্ডে TypeScript মডিউলের সাথে Express.js ব্যবহার করে। ডিরেক্টরি স্ট্রাকচার এক ঝলকে দেখে নিন:
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) কনফিগার করবেন।
ধাপ ১: 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-এর সবচেয়ে উপরে প্রোজেক্ট ড্রপডাউন চেক করুন) এবং প্রয়োজনীয় পরিষেবা API চালু করুন:
# 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}
API চালু করা আছে কিনা তা যাচাই করুন:
gcloud services list --enabled --filter="name:(aiplatform.googleapis.com OR cloudresourcemanager.googleapis.com)"
ধাপ ২: gcloud-এর মাধ্যমে IAM অনুমতি দিন
CodeMender ক্লাউড রিজনিং ইঞ্জিনের সাথে ইন্টার্যাক্ট করতে, ব্যবহারকারী এবং পরিষেবা অ্যাকাউন্টে অবশ্যই roles/aiplatform.user (এজেন্ট প্ল্যাটফর্ম ব্যবহারকারী) IAM ভূমিকা অ্যাসাইন করা থাকতে হবে।
CLI-এর মাধ্যমে আপনার ব্যবহারকারীর অ্যাকাউন্টে IAM ভূমিকা মঞ্জুর করুন
# 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-এ CLI ডাউনলোড ও ইনস্টল করুন
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 CLI ইনস্টলেশন যাচাই করুন
CLI বাইনারি সঠিকভাবে ইনস্টল করা হয়েছে কিনা তা যাচাই করতে cm --version রান করুন:
cm --version
প্রত্যাশিত আউটপুট:
cm version 0.17.0
ধাপ ৫: Google Cloud অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল (ADC) কনফিগার করুন
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 ব্যবহার করে দুর্বলতা খুঁজে বের করুন।
⏱️ সময়সীমা: ০৭:০০
এই ধাপে, আপনি Juice Shop কোডবেস জুড়ে একটি এজেন্টিক নিরাপত্তা স্ক্যান এক্সিকিউট করতে cm find . --quick রান করবেন।
ধাপ ১: cm find . --quick এক্সিকিউট করুন
CodeMender v0.16.0 থেকে শুরু করে, cm find <path> ডিফল্ট হিসেবে Deep Scan (
--deep
) বেছে নিন, অন্যদিকে দ্রুত স্ক্যান (
--quick
) দ্রুত রিপোজিটরি ট্রায়াজ প্রদান করে। OWASP Juice Shop রিপোজিটরি জুড়ে একটি দ্রুত স্ক্যান করতে cm find . --quick চালান (আনুমানিক এক্সিকিউশন সময়: সম্পূর্ণ ৬৮৪-ফাইল কোডবেস ট্রায়াজের জন্য ~৮ মিনিট):
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: অবিলম্বে, গুরুতর ঝুঁকি (যেমন, রিমোট কোড এক্সিকিউশন, যাচাই না করা SQL ইনজেকশন) যা সরাসরি অবিশ্বস্ত সীমানা থেকে অ্যাক্সেস করা যায়।
HIGH: গুরুতর ত্রুটি (যেমন, ইচ্ছামতো ডেটাবেস রিড করা, প্রিভিলেজ বাড়ানো) যার জন্য নির্দিষ্ট ব্যবহারকারীর প্রসঙ্গ বা চেইন করা শর্ত প্রয়োজন।
🟡 MEDIUM: সীমিত স্কোপ সহ মাঝারি ঝুঁকি বা ব্যবহারকারীর ইন্টার্যাকশন প্রয়োজন (যেমন, ওপেন রিডাইরেক্ট, CSRF)।
🔵 LOW: বিবিধ প্রতিরোধ ব্যবস্থার হাইজিন সংক্রান্ত ত্রুটি বা ন্যূনতম প্রত্যক্ষ প্রভাব সহ রিকনাইসেন্স ভেক্টর।
৭. দুর্বলতা যাচাই করুন এবং ক্যাপচার করা যাচাইকরণ আর্টিফ্যাক্টগুলি দেখুন
⏱️ সময়সীমা: ১০:০০
CodeMender-এর অন্যতম প্রধান ফিচার হল, আপনি যখনই cm verify রান করেন তখনই স্থায়ী যাচাইকরণ আর্টিফ্যাক্ট অটোমেটিক তৈরি করা। আসুন routes/login.ts-এ (এই টিউটোরিয়ালে 43aa7446 হিসেবে দেখানো হয়েছে) ক্রিটিক্যাল SQL ইনজেকশন ফাইন্ডিং যাচাই করি এবং এজেন্টের তৈরি করা আর্টিফ্যাক্টগুলি দেখি।
ধাপ ১: cm verify <login-finding-id> এক্সিকিউট করুন
আপনার cm report টেবিল থেকে routes/login.ts-এর জন্য ফাইন্ডিং আইডি খুঁজে নিন (যেমন, 43aa7446) এবং cm verify <finding-id> --sandbox=false --bypass-warning -y রান করুন (রান করার আনুমানিক সময়: অটোনোমাস টুল স্টেপ রান করতে, ব্যাকগ্রাউন্ড পরিষেবা শুরু করতে এবং লাইভ PoC এক্সপ্লয়েট স্ক্রিপ্ট এক্সিকিউট করতে ~২০ মিনিট সময় লাগে):
# 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 যা UUID, শীর্ষক, তীব্রতা ( |
| এজেন্ট স্ট্র্যাটেজি | CodeMender রিজনিং ইঞ্জিনের মাধ্যমে অটোনোমাসভাবে এক্সিকিউট করা ধাপে ধাপে যাচাইকরণ প্ল্যান ও চেকলিস্ট। |
| এক্সিকিউশন ট্রেস লগ | টাইমস্ট্যাম্প সহ অডিট ট্রেল প্রতিটি টুল কল, HTTP অনুরোধ এন্ডপয়েন্ট এবং পরীক্ষার ফলাফল রেকর্ড করে। |
| হেল্পার রানার / সার্ভার লগ | টেস্টিংয়ের জন্য Juice Shop চালু করতে এজেন্ট যে হেল্পার স্ক্রিপ্ট তৈরি করেছে এবং ক্যাপচার করা সার্ভার আউটপুট। |
| এক্সিকিউশন র্যাপার / স্ট্যান্ডঅ্যালোন PoC | টার্গেট পরিষেবা লঞ্চ করা এবং PoC ক্লায়েন্টকে কল করা, HTTP 200 রেসপন্স যাচাই করার জন্য শেল স্ক্রিপ্ট র্যাপার। |
| মূল কারণ বিশ্লেষণ | সারসংক্ষেপ, লাইন-বাই-লাইন দুর্বলতা বিশ্লেষণ, র SQL ব্রেকডাউন এবং Sequelize প্যারামিটারাইজেশন সাজেশন। |
ধাপ ৩: যাচাইকরণ আর্টিফ্যাক্ট হাইলাইটের গভীর ওয়াকথ্রু
এজেন্ট প্রতিবার রান করার সময় এইসব আর্টিফ্যাক্ট নতুন করে লেখে, তাই প্রতিবার সেগুলির সঠিক কন্টেন্ট আলাদা হয়। Cloud Shell এডিটরে (বা cat-এর মাধ্যমে) সেগুলি খুলুন এবং নিম্নলিখিত বিষয়গুলি খুঁজুন:
আর্টিফ্যাক্ট | কী কী খুঁজবেন |
| ফলাফলের সম্পূর্ণ আইডি, শীর্ষক, তীব্রতা, কনফিডেন্স এবং |
| রিপোর্ট করা ফাইল পড়া থেকে শুরু করে রিপ্রোডাকশন স্ক্রিপ্ট লেখা পর্যন্ত এজেন্ট যে চেকলিস্ট অনুসরণ করেছেন। |
| টাইমস্ট্যাম্প করা অ্যাকশন ও ফলাফল, যার মধ্যে রিপ্রোডাকশন স্ক্রিপ্টের প্রতিটি রান থেকে পাওয়া ফলাফল অন্তর্ভুক্ত। |
| স্ট্যান্ডঅ্যালোন রিপ্রোডাকশন স্ক্রিপ্ট: এটি কীভাবে অ্যাপ শুরু করে, কোন এন্ডপয়েন্টকে টার্গেট করে এবং কীভাবে সাফল্য নির্ধারণ করে (এটি |
| টেস্ট করার জন্য Juice Shop চালু করতে এজেন্ট যেসব হেল্পার ফাইল তৈরি করেছে এবং সেই সার্ভারের আউটপুট। |
| মূল কারণ বিশ্লেষণ: |
৮. cm ফিক্সের মাধ্যমে SQL ইঞ্জেকশন সংক্রান্ত সমস্যার সমাধান করা
⏱️ সময়সীমা: ১০:০০
এখন আমরা routes/login.ts-এ (উদাহরণ আইডি 43aa7446) SQL ইনজেকশন ফাইন্ডিং যাচাই করেছি এবং এর আর্টিফ্যাক্ট পরীক্ষা করেছি, আসুন অটোমেটেড প্যারামিটারাইজড কোয়েরি প্যাচ প্রয়োগ করতে 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 ব্যবহার করে 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" রান করুন এবং তারপরে আবার কমিট করুন।
৯. প্যাচ যাচাই করা, সেশন ম্যানেজ করা এবং রিপোর্ট এক্সপোর্ট করা (cm রিপোর্ট)
⏱️ সময়সীমা: ০৮:০০
AI-জেনারেটেড নিরাপত্তা সংক্রান্ত সমাধান প্রয়োগ করার পরে, অ্যাক্টিভ সেশন ম্যানেজ করা, টোকেন ব্যবহারের পরিসংখ্যান পরীক্ষা করা এবং 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
ধাপ ৪: ইন্ট্যার্যাক্টিভ HTML রিপোর্ট (cm report -f html) জেনারেট ও প্রিভিউ করো
আপনার স্ক্যান করা ফলাফল এবং প্রয়োগ করা প্যাচগুলি একটি স্বতন্ত্র, ইন্টারেক্টিভ 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-এর উপর মাউস রেখে ডানদিকের বোতামে ক্লিক করুন এবং আপনার লোকাল ব্রাউজারে ফাইলটি দেখতে ডাউনলোড করুন বিকল্পে ক্লিক করুন।
ধাপ ৫: তৈরি করা ইন্ট্যার্যাক্টিভ 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 নিরাপত্তা রিজনিং মডেলের মাধ্যমে সিন্থেসাইজ করা বিস্তারিত মূল কারণ বিশ্লেষণ (RCA) বড় করে দেখানো হয়।
ভালনারেবল সোর্স কোড স্নিপেট: ভালনারেবল সিঙ্কের আশেপাশে সঠিক লাইন নম্বর এবং সিনট্যাক্স-হাইলাইট করা সোর্স কোড দেখায়।
৪. সিন্থেসাইজ করা AI রেমিডিয়েশন প্যাচ ডিফস
ইউনিফায়েড ডিফারেন্স ভিউ: সমাধান করা দুর্বলতার (FIXED) জন্য, CodeMender একটি ইউনিফায়েড ডিফারেন্স ব্লক রেন্ডার করে যা সবুজ রঙে (+) প্রয়োগ করা কোড সংযোজন এবং লাল রঙে (-) সরানো দুর্বল কোড হাইলাইট করে।
ধাপ ৬: (ঐচ্ছিক) থার্ড-পার্টি SAST ফাইন্ডিং ইমপোর্ট করুন (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
১০. রিসোর্স ক্লিন-আপ করা
⏱️ সময়সীমা: ০১:০০
আপনার 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 API বন্ধ করা
আপনি যদি এই প্রোজেক্টে আরও ডেভেলপমেন্টের জন্য CodeMender বা Agent Platform API ব্যবহার করার পরিকল্পনা না করেন, তাহলে আপনি পরিষেবা API বন্ধ করতে পারেন:
gcloud services disable \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
--project=${PROJECT_ID}
১১. অভিনন্দন
⏱️ সময়সীমা: ০২:০০
অভিনন্দন! আপনি Google Cloud-এর Gemini Enterprise Agent প্ল্যাটফর্মে CodeMender ব্যবহার করে OWASP Juice Shop-কে ইচ্ছাকৃতভাবে দুর্বল অ্যাপ্লিকেশন থেকে একটি শক্তিশালী, সুরক্ষিত কোডবেসে সফলভাবে রূপান্তরিত করেছেন।
আপনি কী কী কভার করেছেন
অটোনমাস ক্লোজড-লুপ রেমিডিয়েশন: CodeMender একটি সম্পূর্ণ, স্ব-নির্দেশিত নিরাপত্তা লাইফসাইকেল কার্যকর করার মাধ্যমে প্যাসিভ স্ট্যাটিক অ্যালার্ট নয়েজের বাইরে চলে যায়—রিপোজিটরি ডিসকভারি (cm find) থেকে স্যান্ডবক্স এক্সপ্লয়েট যাচাইকরণ (cm verify) এবং রিগ্রেশন-টেস্টেড প্যাচ সিন্থেসিস (cm fix) পর্যন্ত।
প্রমাণ-ভিত্তিক এক্সপ্লয়েট প্রুফ: বাস্তব যাচাইকরণ আর্টিফ্যাক্ট (PLAN.md, LOG.md, exploit.sh, REPORT.md) ক্যাপচার করার মাধ্যমে, CodeMender কোনও কোড লেখার আগে ফলস পজিটিভ বাদ দেয় এবং বাস্তব-জগতের এক্সপ্লয়েটেবিলিটি প্রমাণ করে।
কনটেক্সট-অ্যাওয়ার, ইডিওমেটিক ফিক্স: সাধারণ টেক্সট রিপ্লেসমেন্ট প্রয়োগ করার পরিবর্তে, Gemini রিজনিং এজেন্ট অ্যাপ্লিকেশন আর্কিটেকচার, ডেটা মডেল এবং ORM বিশ্লেষণ করে পরিষ্কার, রক্ষণাবেক্ষণযোগ্য প্যাচ (যেমন প্যারামিটারাইজড Sequelize কোয়েরি) তৈরি করে যা বিদ্যমান ব্যবসায়িক লজিককে বজায় রাখে।
বিল্ট-ইন নিরাপত্তা ও টেস্ট গার্ডরেল: পরিবর্তনগুলি স্টেজ করার আগে, প্রতিটি প্রস্তাবিত সমাধান প্রোজেক্ট টেস্ট স্যুট (npm test) এবং আইসোলেটেড ওয়ার্কস্পেস স্যান্ডবক্সের মধ্যে টাইপ চেকার (tsc) ব্যবহার করে অটোমেটিক যাচাই করা হয়।
ডেভেলপারের মানসিকতায় পরিবর্তন
ট্র্যাডিশনাল ম্যানুয়াল SAST ওয়ার্কফ্লো | CodeMender (cm) ব্যবহার করে অটোনোমাস রেমিডিয়েশন |
অ্যালার্ট ফ্যাটিগ: বেশি ফলস-পজিটিভ রেট সহ নয়েজি রিপোর্ট ট্রায়াজ করতে অনেক সময় ব্যয় করা। | এজেন্টিক কোড ডিসকভারি ( |
ম্যানুয়াল PoC যাচাইকরণ: দুর্বলতা কনফার্ম করার জন্য কাস্টম কার্ল পেলোড ও অ্যাটাক স্ক্রিপ্ট তৈরি করা। | অটোমেটেড এক্সপ্লয়েট প্রুফ ( |
উচ্চ-ঝুঁকি ম্যানুয়াল রিফ্যাক্টরিং: জটিল ডেটাবেস কোয়েরি ম্যানুয়ালি প্যাচ করা, প্রায়ই সিনট্যাক্স বা রানটাইম সমস্যা তৈরি করে। | ইডিওমেটিক প্যাচ সিন্থেসিস ( |
প্রোডাকশন রিগ্রেশন সংক্রান্ত ঝুঁকি: সিকিউরিটি প্যাচ প্রায়শই ডাউনস্ট্রিম বিজনেস লজিক বা টেস্টকে ভেঙে দেয়। | অটোমেটেড টেস্ট গার্ডরেল: লোকাল টেস্ট স্যুট ও আইসোলেটেড প্রসেস স্যান্ডবক্সের বিরুদ্ধে ক্রমাগত যাচাইকরণ। |
ম্যানুয়াল কমপ্লায়েন্স কম্পাইলেশন: অডিট রিভিউয়ের জন্য স্ট্যাটিক ডকুমেন্টে ম্যানুয়ালি ফলাফল একত্রিত করা। | স্ট্যান্ডার্ডাইজড টেলিমেট্রি ও SARIF ( |
পরবর্তী ধাপ
🚀 CodeMender ট্রিলজি চালিয়ে যান:
পার্ট ২: CodeMender-এর মাধ্যমে আপনার CI/CD পাইপলাইন সুরক্ষিত করুন — GitHub অ্যাকশনে অটোমেটিক কন্টিনিউয়াস হেডলেস স্ক্যানিং, SARIF ড্যাশবোর্ড ইন্টিগ্রেশন এবং সেল্ফ-হিলিং পুল রিকোয়েস্ট।
পার্ট ৩: Antigravity ও CodeMender-এর সাহায্যে সুরক্ষিত ভাইব-কোডিং — অটোনোমাস নিরাপত্তা অ্যাসিস্ট্যান্টের সাথে জেনারেটিভ AI ডেভেলপমেন্ট পেয়ার করুন।
📖 ডকুমেন্টেশন এক্সপ্লোর করুন:
Google Cloud ডকুমেন্টেশনে CodeMender
Google Cloud Security Solutions
💡 আপনার নিজের প্রোজেক্টে প্রয়োগ করুন:
আপনার নিজের Node.js, Python, Go, Java, Rust বা C/C++ রিপোজিটরিতে cm find . এবং cm fix রান করুন!