{"schemaVersion":"1.0.0","modelId":"qeravio-threat-model:public-product:1.0.0","reviewedOn":"2026-08-19","status":"internally_verified_first_slice","owner":"Professor Web","independentChecker":"Seal","claimBoundary":{"internalSecurityVerification":true,"externalPenetrationTestCompleted":false,"securityCertificationGranted":false,"entitledProductionMutationJourneyCompleted":false,"organizationTenantIsolationTested":false,"productionBillingEnabled":false},"surfaces":[{"id":"edge","title":{"en":"Public edge and rendering","he":"מעטפת ציבורית ורינדור"},"state":"verified_in_code_and_tests","summary":{"en":"Cloudflare ingress, security headers, cache boundaries, canonical host handling and removal of untrusted internal headers.","he":"כניסת קלאודפלייר, כותרות אבטחה, גבולות מטמון, טיפול בשם המתחם והסרת כותרות פנימיות לא מהימנות."}},{"id":"identity","title":{"en":"Identity and session","he":"זהות והפעלה"},"state":"verified_in_code_and_tests","summary":{"en":"Single-use magic links, hashed tokens, bounded return paths and secure session cookies.","he":"קישורי כניסה חד פעמיים, אסימונים מגובבים, נתיבי חזרה מוגבלים ועוגיות הפעלה מאובטחות."}},{"id":"member","title":{"en":"Member data and mutations","he":"נתוני מנוי ושינויים"},"state":"partially_verified","summary":{"en":"Server-side identity, owner-scoped queries, same-origin mutation guards, bounded input and private no-store responses. A live entitled journey is still pending.","he":"זהות בצד השרת, שאילתות מוגבלות לבעלים, הגנת מקור בשינויים, קלט מוגבל ותגובות פרטיות ללא שמירה במטמון. מסלול חי עם מנוי מורשה עדיין חסר."}},{"id":"internal","title":{"en":"Internal operations","he":"פעולות פנימיות"},"state":"verified_in_code_and_tests","summary":{"en":"Service routes use a minimum-length bearer secret with constant-time digest comparison. Internal UI routes require a server-verified owner session and same-origin mutation checks.","he":"מסלולי שירות משתמשים בסוד גישה באורך מזערי ובהשוואת גיבובים בזמן קבוע. מסלולי הממשק הפנימי מחייבים הפעלת בעלים שאומתה בשרת ובדיקת מקור לכל שינוי."}},{"id":"mcp","title":{"en":"Public MCP tools","he":"כלי MCP ציבוריים"},"state":"verified_in_code_and_tests","summary":{"en":"Five bounded read-only tools, production-only host and Origin allowlists, no-store responses and edge rate limiting.","he":"חמישה כלים מוגבלים לקריאה בלבד, רשימת מתחמים ומקורות מורשים לייצור, תגובות ללא מטמון והגבלת קצב בקצה."}},{"id":"plugin","title":{"en":"Plugin distribution","he":"הפצת התוסף"},"state":"partially_verified","summary":{"en":"Pinned archives, exact checksums, bounded manifests and traversal-safe lifecycle tests. Publisher signing is not yet available.","he":"ארכיונים מוצמדים לגרסה, גיבובים מדויקים, מניפסטים מוגבלים ובדיקות התקנה שמונעות יציאה מהנתיב. חתימת מפרסם עדיין אינה זמינה."}},{"id":"billing","title":{"en":"Billing boundary","he":"גבול החיוב"},"state":"partially_verified","summary":{"en":"Production billing fails closed. Webhook signature, source, size, idempotency and ownership controls exist, but no real charge is claimed.","he":"החיוב בייצור נכשל באופן סגור. קיימות בקרות חתימה, מקור, גודל, מניעת כפילות ובעלות עבור התראות חיוב, אך לא נטען שבוצע חיוב אמיתי."}},{"id":"organization","title":{"en":"Organization tenancy","he":"סביבות ארגוניות"},"state":"future_surface","summary":{"en":"Organization accounts and tenant administration are not implemented, so tenant isolation is not claimed or tested.","he":"חשבונות ארגון וניהול דיירים עדיין אינם קיימים, ולכן אין טענה או בדיקה של בידוד בין ארגונים."}}],"trustBoundaries":[{"id":"TB-01","from":"public internet","to":"Cloudflare Worker","controls":["SEC-001","SEC-002","SEC-007"]},{"id":"TB-02","from":"browser or MCP client","to":"public and member routes","controls":["SEC-003","SEC-005","SEC-006","SEC-009"]},{"id":"TB-03","from":"authenticated session","to":"owner-scoped D1 records","controls":["SEC-004","SEC-005","SEC-012"]},{"id":"TB-04","from":"Paddle webhook ingress","to":"billing event queue and entitlement state","controls":["SEC-011"]},{"id":"TB-05","from":"download origin","to":"local Codex or Claude plugin files","controls":["SEC-010","SEC-013"]},{"id":"TB-06","from":"AI service role or owner session","to":"internal operations","controls":["SEC-008","SEC-012","SEC-014"]}],"controls":[{"id":"SEC-001","title":{"en":"Browser security headers","he":"כותרות אבטחה לדפדפן"},"evidence":["postdeploy-contract","public-release-probe"]},{"id":"SEC-002","title":{"en":"Untrusted internal-header stripping","he":"הסרת כותרות פנימיות לא מהימנות"},"evidence":["worker-routing-source","security-verification-tests"]},{"id":"SEC-003","title":{"en":"Bounded same-site return paths","he":"נתיבי חזרה מוגבלים לאותו אתר"},"evidence":["auth-verify-tests","security-verification-tests"]},{"id":"SEC-004","title":{"en":"Hashed single-use identity tokens and secure cookies","he":"אסימוני זהות חד פעמיים מגובבים ועוגיות מאובטחות"},"evidence":["auth-email-tests","auth-verify-tests"]},{"id":"SEC-005","title":{"en":"Same-origin guards on every member mutation route","he":"הגנת מקור בכל מסלול שינוי של מנוי"},"evidence":["security-verification-tests"]},{"id":"SEC-006","title":{"en":"Bounded JSON and field validation","he":"הגבלת גוף JSON ואימות שדות"},"evidence":["route-specific-tests","billing-request-body-tests"]},{"id":"SEC-007","title":{"en":"Layered abuse rate limits","he":"הגבלת קצב בכמה שכבות"},"evidence":["worker-routing-source","route-specific-tests"]},{"id":"SEC-008","title":{"en":"Constant-time internal authorization","he":"אימות פנימי בהשוואה בזמן קבוע"},"evidence":["automation-health-tests","security-verification-tests"]},{"id":"SEC-009","title":{"en":"Production-only MCP host and Origin boundary","he":"גבול מתחם ומקור לייצור עבור MCP"},"evidence":["mcp-server-tests","public-release-probe","security-verification-tests"]},{"id":"SEC-010","title":{"en":"Pinned package integrity and safe extraction","he":"שלמות חבילה מוצמדת וחילוץ בטוח"},"evidence":["plugin-distribution-tests","isolated-plugin-lifecycle"]},{"id":"SEC-011","title":{"en":"Fail-closed billing and verified webhook processing","he":"חיוב סגור ועיבוד התראות מאומת"},"evidence":["billing-release-tests","billing-webhook-tests","public-release-probe"]},{"id":"SEC-012","title":{"en":"Private no-store response boundary","he":"גבול תגובה פרטית ללא מטמון"},"evidence":["postdeploy-contract","public-release-probe"]},{"id":"SEC-013","title":{"en":"Known-vulnerability dependency gate","he":"שער חולשות ידועות בתלויות"},"evidence":["pnpm-production-audit","lockfile"]},{"id":"SEC-014","title":{"en":"Server-verified owner role on internal UI routes","he":"תפקיד בעלים שאומת בשרת במסלולי הממשק הפנימי"},"evidence":["owner-route-tests","security-verification-tests"]}],"threats":[{"id":"TM-001","category":"Spoofing","surfaceId":"edge","severity":"high","state":"verified_in_code_and_tests","title":{"en":"Forged trusted request headers","he":"זיוף כותרות בקשה מהימנות"},"controlIds":["SEC-002"],"residual":{"en":"Cloudflare and runtime configuration remain part of the trust base.","he":"הגדרות קלאודפלייר וסביבת ההרצה נשארות חלק מבסיס האמון."}},{"id":"TM-002","category":"Spoofing","surfaceId":"identity","severity":"high","state":"verified_in_code_and_tests","title":{"en":"Replay of a sign-in link or session token","he":"שימוש חוזר בקישור כניסה או באסימון הפעלה"},"controlIds":["SEC-003","SEC-004"],"residual":{"en":"Compromise of the user's mailbox or endpoint is outside this control set.","he":"השתלטות על תיבת הדואר או מכשיר המשתמש אינה מכוסה בבקרות האלה."}},{"id":"TM-003","category":"Tampering","surfaceId":"member","severity":"high","state":"verified_in_code_and_tests","title":{"en":"Cross-site member-state change","he":"שינוי מצב מנוי מאתר חיצוני"},"controlIds":["SEC-004","SEC-005"],"residual":{"en":"Requests without an Origin remain supported for non-browser clients and still require a valid session.","he":"בקשות ללא כותרת מקור נתמכות עבור לקוחות שאינם דפדפן ועדיין מחייבות הפעלה תקפה."}},{"id":"TM-004","category":"Spoofing","surfaceId":"identity","severity":"medium","state":"verified_in_code_and_tests","title":{"en":"Open redirect after authentication","he":"הפניה פתוחה לאחר כניסה"},"controlIds":["SEC-003"],"residual":{"en":"New authentication routes must reuse the same bounded return-path helper.","he":"מסלולי כניסה חדשים חייבים להשתמש באותו מנגנון נתיב חזרה מוגבל."}},{"id":"TM-005","category":"Information disclosure","surfaceId":"member","severity":"high","state":"partially_verified","title":{"en":"Unauthenticated or cross-account member data access","he":"גישה ללא אימות או מחשבון אחר לנתוני מנוי"},"controlIds":["SEC-004","SEC-012"],"residual":{"en":"Guest rejection and owner-scoped tests pass; an entitled multi-account production journey is still pending.","he":"דחיית אורח ובדיקות בעלות עברו, אך מסלול ייצור עם כמה חשבונות מורשים עדיין חסר."}},{"id":"TM-006","category":"Tampering","surfaceId":"member","severity":"medium","state":"verified_in_code_and_tests","title":{"en":"Oversized, malformed or unexpected input","he":"קלט גדול מדי, פגום או בלתי צפוי"},"controlIds":["SEC-006","SEC-007"],"residual":{"en":"Every future mutation route must join the bounded-input inventory.","he":"כל מסלול שינוי עתידי חייב להצטרף למלאי הקלט המוגבל."}},{"id":"TM-007","category":"Denial of service","surfaceId":"edge","severity":"medium","state":"partially_verified","title":{"en":"Request flooding and resource exhaustion","he":"הצפת בקשות ומיצוי משאבים"},"controlIds":["SEC-006","SEC-007"],"residual":{"en":"No production load, WAF or chaos exercise has been completed.","he":"לא בוצעו עדיין תרגילי עומס, חומת יישומים או כאוס בסביבת הייצור."}},{"id":"TM-008","category":"Spoofing","surfaceId":"internal","severity":"critical","state":"verified_in_code_and_tests","title":{"en":"Unauthorized internal operation","he":"פעולה פנימית ללא הרשאה"},"controlIds":["SEC-008","SEC-012","SEC-014"],"residual":{"en":"Secret rotation and platform access governance remain operational responsibilities.","he":"החלפת סודות וממשל גישה לפלטפורמה נשארים אחריות תפעולית."}},{"id":"TM-009","category":"Spoofing","surfaceId":"mcp","severity":"high","state":"verified_in_code_and_tests","title":{"en":"MCP host or browser-Origin confusion","he":"בלבול מתחם או מקור דפדפן בשירות MCP"},"controlIds":["SEC-009"],"residual":{"en":"Localhost access is possible only when an explicit development flag is set.","he":"גישה מקומית אפשרית רק כאשר דגל פיתוח מפורש מופעל."}},{"id":"TM-010","category":"Elevation of privilege","surfaceId":"mcp","severity":"high","state":"verified_in_code_and_tests","title":{"en":"A public AI tool mutates an external system","he":"כלי בינה ציבורי משנה מערכת חיצונית"},"controlIds":["SEC-009"],"residual":{"en":"Any future write-capable tool requires a separate authorization and threat-model version.","he":"כל כלי עתידי עם יכולת כתיבה יחייב הרשאה נפרדת וגרסה חדשה של מודל האיומים."}},{"id":"TM-011","category":"Tampering","surfaceId":"plugin","severity":"high","state":"partially_verified","title":{"en":"Modified archive or unsafe extraction path","he":"ארכיון ששונה או נתיב חילוץ לא בטוח"},"controlIds":["SEC-010"],"residual":{"en":"Checksums and traversal tests pass; publisher signing is not available and is not claimed.","he":"בדיקות גיבוב ויציאה מהנתיב עברו, אך חתימת מפרסם אינה זמינה ואינה נטענת."}},{"id":"TM-012","category":"Tampering","surfaceId":"plugin","severity":"high","state":"verified_in_code_and_tests","title":{"en":"Known vulnerable production dependency","he":"תלות ייצור עם חולשה ידועה"},"controlIds":["SEC-013"],"residual":{"en":"An audit is point-in-time evidence and must run again for every release.","he":"סריקת תלויות היא ראיה לנקודת זמן וחייבת לרוץ מחדש בכל גרסה."}},{"id":"TM-013","category":"Spoofing","surfaceId":"billing","severity":"critical","state":"verified_in_code_and_tests","title":{"en":"Forged, duplicated or reordered billing webhook","he":"התראת חיוב מזויפת, כפולה או לא לפי הסדר"},"controlIds":["SEC-006","SEC-011"],"residual":{"en":"The complete live payment lifecycle has not been executed and is not claimed.","he":"מחזור תשלום חי מלא עדיין לא בוצע ואינו נטען."}},{"id":"TM-014","category":"Elevation of privilege","surfaceId":"billing","severity":"critical","state":"verified_in_code_and_tests","title":{"en":"Production charging opens without every release gate","he":"חיוב ייצור נפתח בלי שכל שערי ההפצה עברו"},"controlIds":["SEC-011"],"residual":{"en":"Billing remains disabled; enabling it requires a separate live evidence gate and explicit authority.","he":"החיוב נשאר כבוי. הפעלתו תחייב שער ראיות חי נפרד והרשאה מפורשת."}},{"id":"TM-015","category":"Information disclosure","surfaceId":"member","severity":"high","state":"verified_in_code_and_tests","title":{"en":"Private data stored in a shared cache","he":"נתונים פרטיים נשמרים במטמון משותף"},"controlIds":["SEC-012"],"residual":{"en":"Every new private route must remain in the no-store release inventory.","he":"כל מסלול פרטי חדש חייב להישאר במלאי ההפצה ללא מטמון."}},{"id":"TM-016","category":"Information disclosure","surfaceId":"edge","severity":"high","state":"partially_verified","title":{"en":"Cross-site scripting in public content","he":"הרצת קוד בין אתרים בתוכן ציבורי"},"controlIds":["SEC-001","SEC-006"],"residual":{"en":"The current runtime still permits inline scripts and styles. Nonces or hashes are a future hardening gate.","he":"סביבת ההרצה הנוכחית עדיין מאפשרת קוד וסגנונות מוטמעים. מזהים חד פעמיים או גיבובים הם שער הקשחה עתידי."}},{"id":"TM-017","category":"Elevation of privilege","surfaceId":"organization","severity":"critical","state":"future_surface","title":{"en":"Cross-tenant organization access","he":"גישה בין ארגונים שונים"},"controlIds":[],"residual":{"en":"Organization tenancy does not exist yet. It must not launch before isolation tests and administrator controls exist.","he":"סביבת ארגונים עדיין אינה קיימת. אסור להשיק אותה לפני בדיקות בידוד ובקרות מנהל."}}],"openGates":[{"en":"Independent external penetration testing of the deployed release.","he":"בדיקת חדירה חיצונית ועצמאית לגרסה הפרוסה."},{"en":"Entitled multi-account production journeys for every member mutation route.","he":"מסלולי ייצור עם כמה חשבונות מורשים לכל פעולת שינוי של מנוי."},{"en":"Production load, WAF and recovery exercises with retained evidence.","he":"תרגילי עומס, חומת יישומים והתאוששות עם ראיות שמורות."},{"en":"Publisher signing and verified identity for downloadable plugin packages.","he":"חתימת מפרסם וזהות מאומתת לחבילות התוסף להורדה."},{"en":"Nonce or hash-based CSP that removes the current inline-script allowance.","he":"מדיניות אבטחת תוכן מבוססת מזהים חד פעמיים או גיבובים שמסירה את ההרשאה לקוד מוטמע."},{"en":"Organization isolation and administrator-abuse tests before any tenant feature launches.","he":"בדיקות בידוד ארגונים וניצול הרשאות מנהל לפני השקת יכולת ארגונית."},{"en":"A complete sandbox and live billing lifecycle before production charging is enabled.","he":"מחזור חיוב מלא בסביבת בדיקה ובייצור לפני הפעלת חיובים."}]}