Files
cloud-host/AUDIT-STATUS.fa.md
T
keyhan 8163665c86 fix(platform): close remaining audit findings from security review
Harden preview/deploy flows, OTP generation, zip extraction, and multi-replica billing races; document full remediation status in AUDIT-STATUS.fa.md.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-03 12:30:22 +03:30

7.4 KiB
Raw Blame History

وضعیت رفع یافته‌های گزارش ممیزی CloudHost

مرجع: AUDIT-REPORT.fa.pdf / scripts/audit-report.fa.html
آخرین به‌روزرسانی: ۳ تیر ۱۴۰۴ (3 Jul 2026)

نماد معنی
رفع شده
⚠️ جزئی / نیاز به پیکربندی محیط
🔜 عمداً به تعویق افتاده (اسکوپ بزرگ یا trade-off)

خلاصه

دسته تعداد ⚠️ 🔜
بلاکرهای پروداکشن 8 8 0 0
بیلد و Kaniko 10 8 1 1
دیپلوی و پیش‌نمایش 6 6 0 0
دیتابیس / سرویس اختیاری 9 8 0 1
Migration / اسکیما 4 4 0 0
بیلینگ و امنیت مالی 5 5 0 0
GitOps / CI-CD 4 4 0 0
امنیت اپ / auth 6 3 0 3
بهبود / زیرساخت 5 2 1 2

نتیجه: همه بلاکرهای پروداکشن و تقریباً همه باگ‌های قطعی رفع شده‌اند. موارد باقی‌مانده عمدتاً پیکربندی آینه رجیستری، JWT در localStorage، و پاک‌سازی PVC یتیم هستند.


۱. بلاکرهای پروداکشن (اولویت ۱–۸)

# یافته وضعیت اقدام
1 شارژ رایگان کیف پول (POST /billing/wallet/charge) HMAC + گارد production در billing-wallet.controller.ts
2 دیپلوی بدون پرداخت گارد بیلینگ در triggerDeployment, startDeployment, PATCH resources
3 namespace از ۸ کاراکتر UUID userIdSlug / userNamespace با UUID کامل
4 migration بدون ردیابی نسخه schema_migrations + 000_base_schema.sql + pre-upgrade hook
5 015 ستون user_id / 001 بدون گارد TYPE اصلاح نام ستون + IF NOT EXISTS
6 workflow Gitea بدون تست job تست + rebase در .gitea/workflows/build-deploy.yaml
7 رمز هاردکد Elasticsearch حذف از git + SealedSecret
8 COPY گو / || echo Node اصلاح در build.service.ts

۲. بیلد (Kaniko + Dockerfile)

یافته وضعیت یادداشت
Go COPY نامعتبر
Node build failure نادیده npm ci + fail-on-build
Laravel extensions mbstring, xml, bcmath, zip, fileinfo, tokenizer
Python pyproject.toml تشخیص + نصب poetry/pdm
Kaniko 4Gi / PVC بدون SC limits قابل تنظیم + BUILD_PVC_STORAGE_CLASS
Git token در spec / branch injection / SSRF GIT_ASKPASS + Secret + validation
Zip slip در unzip اعتبارسنجی مسیر قبل و بعد از extract
state بیلد در حافظه Redis session + startup recovery
دیپلوی هم‌زمان بدون قفل in-flight guard در triggerDeployment
Base image بدون آینه ⚠️ BASE_IMAGE_REGISTRY اضافه شده؛ باید در env پروداکشن ست شود
zip bomb (۱۰GiB) 🔜 سقف آپلود موجود؛ محدودیت تعداد entry در archive پیشنهاد می‌شود

۳. دیپلوی و پیش‌نمایش

یافته وضعیت یادداشت
حذف preview با custom domain pending hasVerifiedCustomDomain() در k8s + deployments
getPreviewInfo پچ NodePort فقط خواندن؛ ingressUrl اولویت دارد
fallback بین‌کلاستری → ImagePullBackOff CLUSTER_DEPLOY_FALLBACK_ENABLED=true برای fallback
NodePort host از API server ⚠️ getClusterHostIp همچنان fallback؛ ingressUrl مسیر اصلی
suspend NodePort revoke deleteTemporaryAccessServicesForApp در suspend

۴. دیتابیس و سرویس‌های اختیاری

یافته وضعیت یادداشت
Redis/RabbitMQ randAlphaNum الگوی lookup در helm templates
probe بدون auth redis-cli -a / mongo با credential
RWO بدون Recreate strategy: Recreate
dbPassword fallback هر deploy generate + persist در DB
Mongo snapshot/restore
WordPress MySQL اجباری
wp-content restore از PVC
PVC یتیم بعد از suspend/delete 🔜 نیاز به job پاک‌سازی دوره‌ای
ایمیج DB از Docker Hub ⚠️ آینه در values.yaml؛ پیکربندی per-cluster

۵. Migration / اسکیما

یافته وضعیت
Job دوباره همه SQL
post-upgrade → pre-upgrade
نبود base schema
015 user_id

۶. بیلینگ

یافته وضعیت
wallet charge بدون درگاه
proration اشتباه
race در wallet
auto-renew دو بار بین replicas
دیپلوی بدون پرداخت

۷. GitOps / CI-CD

یافته وضعیت
workflow بدون تست
elastic password در git
platform Redis requirepass
backend RollingUpdate + limits + postgres backup
Swagger در production
RUNBOOK-DEPLOY portable

۸. امنیت اپلیکیشن

یافته وضعیت یادداشت
gitToken / dbPassword در API @Exclude + hasDbPassword / hasGitToken
Elasticsearch log isolation namespace کامل
OTP Math.random crypto.randomInt
OTP consume race pessimistic lock در transaction
JWT در localStorage 🔜 نیاز به httpOnly cookie + CSRF — اسکوپ frontend بزرگ
refresh token rotation 🔜
secret پیش‌فرض dev ⚠️ validate-production-config در production fail می‌کند
docker compose NODE_ENV=production NODE_ENV: development برای dev محلی

۹. بهبود / زیرساخت

یافته وضعیت
Backend Dockerfile helm/kubectl از اینترنت 🔜
orphan PVC cleanup 🔜
zip bomb hard limit 🔜

متغیرهای محیطی جدید (مرجع deploy)

متغیر پیش‌فرض توضیح
CLUSTER_DEPLOY_FALLBACK_ENABLED false fallback بین کلاستر
CLUSTER_DEPLOY_FALLBACK_ATTEMPTS 3 فقط وقتی fallback فعال
BASE_IMAGE_REGISTRY آینه base imageهای بیلد
BUILD_PVC_STORAGE_CLASS StorageClass برای PVC بیلد
BILLING_WALLET_HMAC_SECRET اجباری در production
PAYMENT_GATEWAY_* اجباری برای charge واقعی

commitهای مرتبط

  • 22359be — fix(platform): apply production hardening from audit plan
  • 6d9cd89 — docs: add portable from-zero deploy runbook and GitOps templates
  • (uncommitted) — رفع موارد باقی‌مانده این سند (preview، OTP، zip slip، auto-renew lock، docker-compose)