MyLeads AI — Security Architecture Case Study (AppSec Perspective)
Secure-by-Design SaaS with CI/CD Security, Hybrid Zero Trust Infrastructure & AI Integration
מאת שי מרדכי | 9 במרץ 2026
0. Executive Summary
MyLeads AI היא מערכת SaaS מבוססת AI לניהול לידים, שנבנתה מתוך הנחה אחת מרכזית:
כל מערכת חשופה לאיום כברירת מחדל — ולכן אבטחה חייבת להיות חלק מהארכיטקטורה, לא תוספת לאחר פריסה (Post-deployment afterthought).
המערכת תוכננה סביב שלושה עקרונות:
- Secure SDLC מלא עם CI/CD אוטומטי שחוסם פריסות שגויות.
- Hybrid Zero Trust Cloud Architecture (חישוב זול ועוצמתי ב-Hetzner עם ניהול סודות מאובטח ב-AWS).
- AI-powered application workflows עם בידוד קלט ומודעות ל-abuse scenarios.
איור 1: ארכיטקטורת הייצור Zero Trust
1. Threat Model Overview
בשלב התכנון זוהו שלוש קטגוריות סיכון מרכזיות:
1.1 External Attack Surface
- Internet-facing SaaS application
- Automated bot scanning (סריקות בוטים אוטומטיות לזיהוי חולשות)
- API abuse attempts & Network-layer DDoS
1.2 Application Layer Risks
- Authentication bypass & Session Hijacking
- IDOR (Insecure Direct Object Reference) / Broken Access Control
- Webhook spoofing (זיוף בקשות ממערכות צד ג')
- Input-based injection vectors
1.3 AI & Automation Risks
- Prompt injection
- Data leakage via AI outputs (PII Exposure)
- Misuse of AI-generated business decisions
2. Secure SDLC & CI/CD Security Model
המערכת נבנתה סביב צינור פריסה (pipeline) קשיח מבוסס:
- GitHub Actions (build/test/deploy orchestration)
- Pytest (backend validation)
- Vitest + Playwright (frontend + E2E validation)
- Database Schema Gatekeeper: שילוב
alembic checkכחובת מעבר ב-Pipeline למניעת CrashLoopBackOff בייצור עקב חוסר סנכרון סכימות.
Security Design Principle: ה-pipeline אינו רק כלי DevOps — אלא security enforcement layer. כל שינוי עובר validation לפני build artifact generation, קיימת הפרדת backend/frontend pipelines לצמצום blast radius, ונמנעת פריסה של state לא מאומת.
3. Hybrid Zero Trust Cloud Architecture
3.1 Network Exposure & Access Control
בעקבות סריקות עוינות בימים הראשונים, המערכת נבנתה כך שאין פתיחת inbound ports (0.0.0.0/0 ריק לחלוטין). כל התעבורה נכנסת דרך Cloudflare Tunnel בלבד (outbound-only model).
גישה ניהולית (SSH) מחייבת הזדהות מול Cloudflare דרך חשבון ProtonMail ייעודי, ומאובטחת באמצעות MFA קשיח (Hardware Security Key).
→ המשמעות: אין IP ציבורי שניתן לתקוף ישירות, ואין אפשרות לעקוף את מנגנון הניהול ללא מפתח חומרה פיזי.
3.2 Runtime Isolation & Resource Exhaustion Protection
- Containers מופעלים ב-Rootless Podman על גבי Enterprise Linux, למניעת Privilege Escalation (הסלמת הרשאות) במקרה של Container Escape.
- הגבלת משאבים קשיחה למניעת קריסות שרשרת (OOM-Killer): ה-Worker מוגבל ל-
--memory="400m"ו---memory-swap="2.4g". - ניקוי מטמונים (
drop_caches) מתבצע אוטומטית לפני משיכת אימג'ים כבדים.
4. Secrets & Identity Security (Hybrid Cloud)
4.1 Secret Management Model
במקום שימוש ב-.env סטטי על דיסק, סודות נטענים בזמן runtime מתוך AWS SSM Parameter Store ומפוענחים על ידי AWS KMS, ונשארים אך ורק בזיכרון ה-RAM של האפליקציה.
→ הפחתת סיכון של: LFI, SSRF-to-file exfiltration, ו-repo leakage.
4.2 AWS Metadata Protection
שימוש ב-IMDSv2 בלבד (token-based metadata access) המפחית דרמטית סיכוני SSRF metadata abuse.
5. Authentication & Session Security Design
5.1 Session Integrity
שימוש ב-httpOnly JWT cookies עם SameSite=Strict למניעת client-side token exposure (XSS).
5.2 Atomic MFA Operations
כדי למנוע OTP Replay Attacks, האותנטיקציה פועלת במבנה אטומי: ה-OTP נמחק מה-DB ומבוצע db.commit() לפני הנפקת ה-JWT. ייצור ה-OTP מבוסס על ה-CSPRNG של מערכת ההפעלה (ספריית secrets).
5.3 Authorization Model
כל החלטת הרשאה מבוססת JWT claims בלבד דרך מנגנון get_current_user ריכוזי, החוסם את הבקשה בשכבת הניתוב לפני הגישה ללוגיקה העסקית.
→ Mitigates: IDOR, privilege escalation, ו-broken object-level authorization.
6. Real-World AppSec Mitigations
6.1 WASM DLP Firewall (Information Disclosure Prevention)
פילטר WebAssembly (WASM) שכתבתי ב-Rust פועל כ-Sidecar בתוך Envoy Proxy. הארכיטקטורה עובדת במוד Fail-Closed: ה-WASM מצנזר בזמן אמת שגיאות 5xx ומעלים Stack Traces שעלולים להדליף מידע פנימי.
6.2 Proxy-Aware Rate Limiting
כדי למנוע חסימה גלובלית (Global DoS) של כל המשתמשים דרך כתובת ה-Loopback של ה-Tunnel, ה-Rate Limiter שולף את כתובת התוקף האמיתית מתוך ההדר CF-Connecting-IP.
6.3 PDF Generation Security
מניעת SSRF/Path Traversal ביצירת מסמכים על ידי שימוש במנוע ה-FPDF, המדפיס תאי טקסט גולמיים בלבד וללא מפענחי HTML או יכולות רשת.
7. Open Findings & Continuous Hardening
במסגרת פילוסופיית ה-Secure-by-Design ושקיפות ארכיטקטונית, ממצאים פתוחים (Open Findings) מתועדים ומנוהלים באופן אקטיבי, ולא מוסתרים:
- SEC-015 (Webhook Spoofing): ה-endpoint של Twilio כרגע מעבד בקשות ללא אימות חתימה קריפטוגרפית. התיקון המתוכנן הוא להטמיע Twilio Signature Validation Middleware שיבדוק את ההדר
X-Twilio-Signatureבכל בקשה נכנסת. - SEC-012 (Path Traversal): ייצוא מסמכים משתמש כעת ב-
os.path.join. כדי למנוע Directory Traversal, יוטמע מנגנוןsecure_filename.
8. Summary of Security Controls
| Security Layer (שכבת אבטחה) | Mitigation Strategy (אסטרטגיית הגנה) |
|---|---|
| Network Security | Zero open ports, Cloudflare Tunnel ingress routing |
| Administrative Access | Cloudflare IAP, ProtonMail identity, physical MFA (Hardware Keys) |
| Secrets Management | AWS SSM/KMS hybrid runtime injection (No .env on disk) |
| Runtime Isolation | Rootless Podman, strict memory capping (--memory="400m") |
| Secure SDLC | Automated GitHub Actions pipelines, integrated alembic check |
| Data Protection | Fernet AES-128 symmetric encryption with lazy initialization |
| DLP Proxying | Envoy WASM filter written in Rust for real-time traffic sanitization |
| Session Control | CSPRNG single-use OTP validation, atomic "Delete-Before-Issue" |
9. Conclusion
MyLeads AI מדגים גישה של: Security as Architecture, not as Post-Deployment Hardening.
המערכת נבנתה סביב עקרונות תשתיתיים של Hybrid Zero Trust, Least Privilege, Secure SDLC, Runtime isolation, ו-AI-aware security design.