Security Sweep — lumiscare.com Public Landing — MC #107301 (2026-08-18)
lumiscare.com Security Sweep — MC #107301
Overall verdict: PARTIAL
Public marketing domain: PASS
Repository credential/key posture: BLOCKED — external rotation/owner decisions required
Date: 2026-08-18
Scope and privacy boundary
Only public lumiscare.com, tracked landing/, repository metadata/history scans and deployment configuration were examined. No authentication, patient/carer/tenant data, PHI, clinical API, portal workflow, account or form submission was accessed. Both AzDO and GitHub repositories are PRIVATE.
Public-domain findings and remediation
- P1 — false 200 fallback:
navigationFallbackrewrote every unknown/source/sensitive path to the homepage with HTTP 200.- Removed SPA fallback (the marketing site has no client router).
- Added
404.htmland SWAresponseOverrides.404preserving HTTP 404.
- P2 — unnecessary CSP privilege: a scriptless/formless static site allowed inline/eval scripts, broad Microsoft/Azure/ALAI connections, blob and arbitrary HTTPS images.
- CSP now uses
script-src 'none',connect-src 'none',form-action 'none',object-src 'none',frame-ancestors 'none', explicit Google Fonts styles/fonts and self/data images only. - Added COOP/CORP and expanded Permissions-Policy denial.
- CSP now uses
- P2 — missing regression gate: added
scripts/check-public-landing.pyand blocking Azure CI job for exact asset allowlist, no scripts/forms/symlinks, strict CSP and true 404. - P1 process safety — clinical blast radius: ordinary manual runs deploy backend and all clinical portals.
- Added typed
ciOnlyandpublicLandingOnlyruntime parameters. - Build #1141 proved a queue variable was ineffective and was cancelled before any backend build/deploy job.
- Build #1145 proved backend-only guarding still allowed frontend stage entry and was cancelled before any SWA deploy job.
- Build #1148 PASS: only
Gate: Public landing securityran; every build/deploy/PI2/prod stage was machine-verified SKIPPED.
- Added typed
- Credential hygiene: removed RUNBOOK instructions that extracted a PAT from a git remote. The expired credential-bearing local
azdoURL was replaced by credential-free canonical HTTPS; current vault askpass was validated. No credential value appears in evidence.
Public verification
- Local preflight PASS; Azure SWA emulator: root/legal 200, source/config/unknown paths true 404, restrictive headers live.
- Landing Gitleaks 0; landing Semgrep 0 findings / 0 errors.
- Preview SWA
mc107301: Playwright 4/4 PASS, desktop/mobile screenshots, zero data entry. - AzDO PR #357 merged to
devase7560a32bd78a0f3e862a5a2852ce52b73575ffewith explicit[skip ci]; no automatic clinical pipeline was created. - Production deployed manually to only
lumiscare-landing; no backend/backoffice/admin/family deployment. - Production Playwright 4/4 PASS.
- Final exact probes: 13/13 HTTP 404; homepage hash exactly matches merged
landing/index.html; TLS and all required headers live. - Preview deleted; only SWA environment
defaultremains Ready.
Repository blockers — not silently closed
Redacted full scan found 35 current-tree and 76 reachable-history Gitleaks records. They include documented legacy/test candidates but also previously confirmed security findings that this public-domain task cannot safely rotate or rewrite:
- MC #10065 (paused, owner decision): tracked RSA private-key files; revoke/replace/history treatment requires owner authorization.
- MC #103380 (open): legacy external-tenant Azure service-principal secret; external tenant admin must rotate/delete and audit RBAC. No value was printed.
- MC #103765 (open): Azure DevOps PAT class in historical/current build material; rotation and repository-wide cleanup remain owned by that task.
Current-tree removal alone would not revoke credentials or purge reachable history. Those actions cross client/legacy-tenant boundaries and are therefore a real blocker, not a process excuse. Consequently the repository cannot receive a zero-secret PASS under MC #107301.
Residual accepted items
style-src 'unsafe-inline'remains because the canonical landing embeds CSS in HTML; scripts are fully disabled.- Google Fonts remain external and explicitly scoped in CSP.
- Marketing/feature claims were not validated as clinical capabilities in this security task.
Evidence anchors
final-live-security-summary.jsonproduction-playwright-report.jsonbuild-1148-timeline.jsonazdo-build-1148.jsonazdo-pr-completed.jsonpreview-cleanup.jsonrepository-visibility.jsonbaseline/gitleaks-tree.jsonandbaseline/gitleaks-history.json(redacted, mode 0600)remediation-local/