You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Target product: hardened fork of filebrowser/filebrowser for on-prem CUI file storage.
Baseline analysed: upstream v2.63.2 (commit dd53644, 2026-04-17).
Assessment framework: CMMC 2.0 Level 2 → NIST SP 800-171 Rev 2 (Feb 2020), 110 controls.
Rule context: CMMC Program Final Rule effective 2025-11-10 (32 CFR 170); Phase 2 (mandatory C3PAO) begins 2026-11-10. Rev 3 not adopted by DoD.
Authoritative control text:NIST.SP.800-171r2.pdf.
Regulatory companions: DFARS 252.204-7012, FAR 52.204-21, DFARS 252.204-7021.
Positive counterpart:compliance-posture.md — per-control coverage once Open-CMMC is installed.
How to read this document
Column
Meaning
ID
800-171 Rev 2 control id
Short title
Abbreviated control intent (see NIST r2 Appendix D for full text)
Upstream state
What filebrowser v2.63.2 does today, with file:line citation
Gap
What's missing vs control intent
Severity
Blocker (cannot ship), Major (must before assessment), Minor (policy/doc), N/A-Infra (satisfied by host/network layer), N/A-Policy (outside product scope), Inherited-AG (satisfied by Trout Access Gate when deployed in the AG profile)
Remediation
Shorthand for the fix: replace-auth, add-module, config, host-control, siem, doc-only, inherit-idp, inherit-ag
Anchor for defined values (e.g., "defined period"): organizationally-defined parameters (ODPs) must be set in the SSP. This gap analysis assumes the standard FedRAMP Moderate baseline values where Rev 2 is silent.
Executive summary — top 10 blockers
Rank-ordered by effort-adjusted risk to Phase 2 assessment readiness.
#
Blocker
Controls touched
Remediation theme
1
No FIPS-validated cryptography. Go's stdlib crypto/tls, crypto/bcrypt, crypto/hmac used throughout without a FIPS module.
3.13.11, 3.13.8, 3.5.10, 3.13.16
Rebuild on RHEL go-toolset (FIPS 140-3 inherited) OR microsoft/go; pin all crypto to FIPS-approved algs.
2
No MFA / OIDC / SAML. Only JSON auth, shell-hook auth, reverse-proxy auth. http/auth.go:123.
No lockout / replay protection / session mgmt. No failed-login counter. JWT 2h expiry but no server-side session revocation.
3.1.8, 3.5.4, 3.1.10, 3.1.11
Failed-attempt store + lockout; session revocation list; idle lock.
4
No encryption at rest. BoltDB plaintext. No envelope encryption for files.
3.13.16, 3.8.9, 3.8.1
LUKS for filesystem + per-file envelope (AES-256-GCM, DEK wrapped by KEK in TPM).
5
Audit trail insufficient. stdlib log → lumberjack rotation. No tamper protection, no clock-sync assertion, no failure alerts, no structured correlation ids, file-ops logged only if shell hooks configured.
3.3.1, 3.3.2, 3.3.4, 3.3.5, 3.3.7, 3.3.8, 3.3.9
Structured JSON events with correlation id; hash-chain or signed batch; rsyslog-ossl → SIEM.
6
TLS not FIPS-profiled.MinVersion: TLS 1.2 is set (cmd/root.go:219-221) but cipher list is Go defaults — includes non-FIPS suites under non-FIPS builds. No HSTS/X-Frame-Options/X-Content-Type-Options.
Admin must disable accounts at IdP; revoke sessions
Tie to 3.5.6 (inactive identifier disable)
Major
inherit-idp + add-module
Family 3.10 — Physical Protection (6)
All six (3.10.1–3.10.6) are facility-level. N/A-Infra, satisfied by customer's datacenter controls; documented in SSP.
Family 3.11 — Risk Assessment (3)
ID
Short title
Upstream state
Gap
Severity
Remediation
3.11.1
Periodically assess risk
Customer program
N/A-Policy
doc
3.11.2
Scan for vulnerabilities
No scanner in CI
Major
add trivy/govulncheck to CI
3.11.3
Remediate vulnerabilities
No patch SLA
Major
doc (publish patch SLA)
Family 3.12 — Security Assessment (4)
ID
Short title
Upstream state
Gap
Severity
Remediation
3.12.1
Periodically assess controls
Outside product
N/A-Policy
doc
3.12.2
POA&M
Outside product
N/A-Policy
doc
3.12.3
Continuous monitoring
SIEM + health dashboard
Major
add-module (health endpoint) + siem
3.12.4
SSP
Outside product (but we supply a SSP template)
Minor
doc (ship SSP template)
Family 3.13 — System & Communications Protection (16)
ID
Short title
Upstream state
Gap
Severity
Remediation
3.13.1
Boundary protection
Trout Access Gate / NGFW
N/A-Infra
host-control + doc
3.13.2
Security-promoting designs/techniques
Afero sandbox, CSP headers
Partial
Major
add-module (threat model in SSP)
3.13.3
Separate user functionality from system management
Single HTTP server serves UI + admin API
Co-mingled surface
Major
add-module (admin interface on separate listener)
3.13.4
Prevent unauthorized info transfer via shared resources
Go GC + afero; no multi-tenant memory
Probably OK for single-tenant
Minor
doc
3.13.5
Subnets for public components
No publicly accessible components in CUI build
Disable public shares
Major
config
3.13.6
Default-deny network traffic
Host firewall + Trout Access Gate
N/A-Infra
host-control + doc
3.13.7
Prevent split tunneling
Host/endpoint policy
N/A-Infra
doc
3.13.8
Crypto mechanisms for CUI in transit
TLS 1.2+ (cmd/root.go:219); ciphers not FIPS-pinned
Enforce FIPS cipher list
Blocker
config (FIPS TLS)
3.13.9
Terminate connections at session end / after inactivity
Go default idle timeout; no explicit config
Add server.IdleTimeout + force on auth session
Major
config + add-module
3.13.10
Establish and manage crypto keys
JWT key in settings (settings/settings.go:24); no rotation
Need KMS-like key mgmt: TPM-sealed KEK + key rotation
Blocker
add-module (KMS abstraction)
3.13.11
FIPS-validated cryptography
Go stdlib crypto — NOT FIPS-validated
Build on RHEL go-toolset (RHEL FIPS 140-3)
Blocker
replace-toolchain (FIPS Go)
3.13.12
Prohibit remote activation of collaborative computing devices
N/A (no cameras/mics)
N/A-Infra
doc
3.13.13
Control mobile code
CSP script-src 'none' on raw handlers (http/raw.go:220); default-src 'self' otherwise
Audit frontend for eval / inline
Major
config (tighten CSP)
3.13.14
Control VoIP
N/A
N/A-Infra
doc
3.13.15
Protect authenticity of communications sessions
TLS + JWT
mTLS for priv sessions; HSTS
Major
config (add mTLS + HSTS)
3.13.16
Confidentiality of CUI at rest
ABSENT — BoltDB plaintext; files plaintext
LUKS + envelope encryption
Blocker
host-control + add-module
Family 3.14 — System & Information Integrity (7)
ID
Short title
Upstream state
Gap
Severity
Remediation
3.14.1
Flaw remediation
Upstream CI present (.github/workflows/ci.yaml); no SBOM, no govulncheck
Major
add-module (govulncheck + trivy + SBOM)
3.14.2
Protection from malicious code
ABSENT (no bundled AV)
Blocker
add-module (ClamAV hook on upload)
3.14.3
Monitor security alerts/advisories
Customer program
N/A-Policy
doc (ship advisory channel)
3.14.4
Update malicious code protection
Tied to ClamAV mirror pattern; alert on stale signatures (Cisco/Cloudflare Nov 2025 outage)
Major
add-module (stale-signature alert)
3.14.5
Periodic and real-time scans of files from external sources
ABSENT
Blocker
add-module (scan-on-upload + periodic re-scan)
3.14.6
Monitor inbound/outbound for attacks
NIDS/NSM at network layer
Plus app-level anomaly events to SIEM
Major
host-control + add-module
3.14.7
Identify unauthorized use
Audit + SIEM correlation
Major
siem
Deployment profiles
Two deployment profiles are supported. The profile chosen at install time changes which controls are implemented inside filebrowser-cmmc and which are inherited from the boundary:
Profile A — BYO-IdP (default)
Filebrowser speaks OIDC/SAML/x509 directly to a customer IdP (Entra GCC-H, Keycloak-FIPS, Ping, Okta Gov). A generic NGFW provides boundary protection only. This is the row-by-row assessment above.
Profile B — Trout Access Gate
The filebrowser-cmmc host is deployed behind a Trout Access Gate (AG), which provides four capabilities that filebrowser can inherit:
Pre-auth + MFA at the boundary. AG federates to the customer's real IdP (or holds local accounts), performs MFA, and hands filebrowser a short-lived signed identity assertion over an mTLS-pinned channel. Filebrowser's OIDC client is disabled in this profile.
PAM session proxy for privileged access. The admin UNIX socket is fronted by AG's recorded, MFA-gated PAM session. Privileged-command audit lives in AG's session recorder as well as filebrowser's audit stream.
Authoritative DNS with egress allowlist. AG is the only resolver the filebrowser host sees. Requests outside the allowlist (IdP, SIEM, ClamAV mirror, time source) return NXDOMAIN. DNS queries themselves are audited — catches beaconing before packets leave. No SMTP egress — outbound CUI sharing is out of scope (see architecture § 10).
Built-in Certificate Authority. AG runs a CA by default, issuing all internal mTLS certificates — filebrowser service cert, rsyslog forwarder cert, ClamAV mirror cert, AG→filebrowser assertion signing key, and (optionally) user mTLS CAC/PIV-style client certs. Two deployment modes:
AG as root CA: self-signed root in AG's HSM; all enclave trust chains up to AG.
AG as intermediary: customer's existing root CA (DoD PKI or contractor root) issues AG an intermediate CA certificate; AG then issues enclave certs under that chain. Preserves customer chain of trust and makes AG's CA cert revocable from outside.
AG-profile inheritance mapping
The following controls change severity under Profile B. Unlisted controls are unchanged between profiles.
ID
Profile A severity
Profile B severity
What AG delivers
3.1.1
Major
Inherited-AG
Pre-auth before any request reaches filebrowser
3.1.2
Major
Inherited-AG (partial)
Group-based coarse authz at AG; filebrowser keeps per-resource
3.1.8
Blocker
Inherited-AG
AG does lockout/backoff
3.1.9
Major
Inherited-AG
AG shows login banner
3.1.10
Major
Inherited-AG
AG idle session lock
3.1.11
Major
Inherited-AG
AG session termination
3.1.12
Major
Inherited-AG
AG IS the managed remote access control point
3.1.13
Blocker
Inherited-AG
TLS via AG CA
3.1.14
N/A-Infra
Inherited-AG
AG is the managed access control point
3.1.15
Major
Inherited-AG
AG PAM records + MFA-gates priv commands
3.1.20
Major
Inherited-AG
Egress allowlist enforced at AG DNS and firewall
3.3.1
Blocker
Major
Filebrowser still emits; AG adds boundary events
3.3.2
Major
Inherited-AG (partial)
AG correlation id flows into filebrowser events
3.3.5
Major
Inherited-AG
Correlation across AG and filebrowser makes this real
3.3.7
Major
Inherited-AG
AG provides authenticated NTS time source
3.5.1
Major
Inherited-AG
AG identifies users/devices
3.5.2
Blocker
Inherited-AG
AG does authn
3.5.3
Blocker
Inherited-AG
AG does MFA
3.5.4
Major
Inherited-AG
AG replay-resistant protocol
3.5.5
Minor
Inherited-AG
AG manages identifier lifecycle
3.5.6
Major
Inherited-AG
AG disables inactive identifiers
3.5.7
Major
Inherited-AG
AG enforces password policy (if password)
3.5.8
Major
Inherited-AG
AG handles password history
3.5.9
Major
Inherited-AG
AG temporary-password mechanism
3.5.10
Blocker
Inherited-AG
AG custodies credentials; filebrowser has none for users
3.5.11
Minor
Inherited-AG
AG login UI masks feedback
3.7.5
Major
Inherited-AG
AG PAM for nonlocal maintenance w/ MFA + recording
3.9.2
Major
Inherited-AG (partial)
AG revokes on termination → filebrowser sessions invalid
3.13.1
N/A-Infra
Inherited-AG
AG is the boundary
3.13.5
Major
Inherited-AG
AG separates public from CUI subnet
3.13.6
N/A-Infra
Inherited-AG
AG enforces default-deny at DNS + firewall
3.13.8
Blocker
Inherited-AG
AG terminates and re-originates TLS with FIPS ciphers
3.13.10
Blocker
Inherited-AG
AG is the CA — all cert issuance, rotation, revocation, CRL/OCSP at AG
3.13.11
Blocker
Inherited-AG
FIPS-validated crypto inherited via AG
3.13.14
N/A-Infra
Inherited-AG
AG controls VoIP flows
3.13.15
Major
Inherited-AG
AG-CA-issued mTLS on all enclave channels
3.14.6
Major
Inherited-AG (partial)
AG monitors inbound/outbound at boundary
3.14.7
Major
Inherited-AG (partial)
AG detects unauthorized use at boundary
38 controls change severity under Profile B. Of those, 11 Blockers drop to Inherited-AG.
AG-as-CA: specific impact on 3.13.10 and 3.13.11
The "AG runs a CA by default" capability is the biggest single inheritance lever in the profile because it addresses two historically painful controls at once:
3.13.10 (establish and manage cryptographic keys) — under Profile A, we had to build a TPM-backed KEK management layer and design rotation protocols ourselves. Under Profile B, AG owns the full PKI/TLS identity key lifecycle: key ceremony, rotation cadence, revocation (CRL/OCSP), and audit trail. Filebrowser owns the file-encryption KEKs at the data-path layer (§8 of architecture.md) — the two custody layers are complementary and independent.
3.13.11 (FIPS-validated cryptography) — the CA's crypto module becomes the inheritance anchor for every channel AG terminates or signs. Filebrowser's own crypto (envelope encryption) still needs RHEL go-toolset / FIPS-validated path.
Customer-as-root + AG-as-intermediary is the preferred deployment for larger DoD shops: it binds the enclave PKI into the customer's existing chain of trust (often DoD PKI or contractor root), makes AG's CA cert revocable from outside the enclave, and avoids the "island of trust" problem that pure AG-root deployments create.
Severity rollup
Severity
Profile A (BYO-IdP)
Profile B (Access Gate)
Blocker
14
3
Major
43
18
Minor
5
3
N/A-Infra
18
14
N/A-Policy
30
30
Inherited-AG
0
42
Total
110
110
Profile A: 14 Blockers map into v1 scope.
Profile B: Only 3 Blockers remain in filebrowser itself — the data-path controls that live inside the application:
3.13.16 (CUI at rest) — filebrowser's envelope encryption on files and BoltDB.
3.14.5 (scan files from external sources) — same scan path as 3.14.2.
Profile B remains a real engineering project (18 Majors to close, principally around envelope encryption, audit schema, CUI marking, AEAD AAD binding, and admin listener separation) — but the auth/IdP/session/TLS/CA/key-mgmt clusters move from "we build it" to "we configure and document the AG inheritance."
Rev 3 pivot — want the marking model to pre-accommodate organizationally-defined parameters (ODPs) even though Rev 2 doesn't require them?
IdP default — Entra GCC-H, Keycloak-FIPS-on-RHEL, or customer choice with both supported as blessed configurations?
Envelope encryption key custody — TPM-sealed KEK on the filebrowser host, or HSM (YubiHSM 2 / Thales network HSM)?
mTLS for user sessions — required for all users, or only privileged?
Backup target — local encrypted NAS, GCC-H-tenant storage, or physical offsite media rotation?
Share link semantics for CUI — decided (2026-04-18): disabled entirely for CUI-marked files, and no in-product outbound CUI sharing mechanism (SMTP, S/MIME, portal). Customers route outbound CUI through their existing specialized service (Virtru, PreVeil, Kiteworks, Exchange + S/MIME, etc.). See architecture § 10 for the scope rationale.
These are decided in architecture.md with placeholder defaults.