Skip to content

Commit 170dd37

Browse files
author
Trout Software
committed
Open-CMMC v0.1 — hardened filebrowser fork for CMMC L2 / NIST 800-171 Rev 2
Single-VM appliance for on-prem CUI file storage. Bundled Keycloak-FIPS OIDC IdP out of the box; federate to an existing IdP if you prefer. Wazuh monitoring and external SIEM forwarding are optional add-ons. RHEL 9 / AlmaLinux 9 FIPS 140-3 baseline. Quick start: sudo config/install.sh deploy sudo config/install.sh deploy --with-wazuh # + monitoring Reading order: README.md → docs/architecture.md → docs/compliance-posture.md. Upstream: fork of filebrowser/filebrowser v2.63.2. License: Apache-2.0.
0 parents  commit 170dd37

492 files changed

Lines changed: 64556 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockerignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
.venv
2+
dist
3+
.idea
4+
frontend/node_modules
5+
frontend/dist
6+
filebrowser.db
7+
docs/index.md

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @filebrowser/maintainers
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Bug Report
2+
description: Report a bug in FileBrowser.
3+
labels: [bug, 'waiting: triage']
4+
body:
5+
- type: checkboxes
6+
attributes:
7+
label: Checklist
8+
description: Please verify that you've followed these steps
9+
options:
10+
- label: This is a bug report, not a question.
11+
required: true
12+
- label: I have searched on the [issue tracker](https://github.com/filebrowser/filebrowser/issues?q=is%3Aissue) for my bug.
13+
required: true
14+
- label: I am running the latest [FileBrowser version](https://github.com/filebrowser/filebrowser/releases) or have an issue updating.
15+
required: true
16+
- type: textarea
17+
id: version
18+
attributes:
19+
label: Version
20+
render: Text
21+
description: |
22+
Enter the version of FileBrowser you are using.
23+
validations:
24+
required: true
25+
- type: textarea
26+
attributes:
27+
label: Description
28+
description: |
29+
A clear and concise description of what the issue is about. What are you trying to do?
30+
validations:
31+
required: true
32+
- type: textarea
33+
attributes:
34+
label: What did you expect to happen?
35+
validations:
36+
required: true
37+
- type: textarea
38+
attributes:
39+
label: What actually happened?
40+
validations:
41+
required: true
42+
- type: textarea
43+
attributes:
44+
label: Reproduction Steps
45+
description: |
46+
Tell us how to reproduce this issue. How can someone who is starting from scratch reproduce this behavior as minimally as possible?
47+
validations:
48+
required: true
49+
- type: textarea
50+
attributes:
51+
label: Files
52+
description: |
53+
A list of relevant files for this issue. Large files can be uploaded one-by-one or in a tarball/zipfile.

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: GitHub Discussions
4+
url: https://github.com/filebrowser/filebrowser/discussions
5+
about: Please ask questions and discuss features here.

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
## Description
2+
3+
<!-- Please explain the changes you made here. -->
4+
5+
## Additional Information
6+
7+
<!-- If it is a relatively large or complex change, please add more information to explain what you did, how you did it, if you considered any alternatives, etc. -->
8+
9+
## Checklist
10+
11+
Before submitting your PR, please indicate which issues are either fixed or closed by this PR. See [GitHub Help: Closing issues using keywords](https://help.github.com/articles/closing-issues-via-commit-messages/).
12+
13+
- [ ] I am aware the project is currently in **maintenance-only** mode and new feature requests won't be accepted. See [README](https://github.com/filebrowser/community/blob/master/README.md)
14+
- [ ] I am aware that translations MUST be made through [Transifex](https://app.transifex.com/file-browser/file-browser/) and that this PR is NOT a translation update
15+
- [ ] I am making a PR against the `master` branch.
16+
- [ ] I am sure File Browser can be successfully built. See [builds](https://github.com/filebrowser/community/blob/master/builds.md) and [development](https://github.com/filebrowser/community/blob/master/development.md).
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
# CMMC supply-chain CI. Adds vulnerability scanning and SBOM generation
2+
# on every push + PR so 800-171 Rev 2 controls 3.14.1 / 3.11.2 / 3.4.1
3+
# have continuous evidence, not just pre-assessment snapshots.
4+
#
5+
# Kept in a separate file from upstream's ci.yaml so a monthly
6+
# rebase does not generate merge conflicts on the compliance additions.
7+
#
8+
# Controls:
9+
# 3.14.1 Identify/report/correct system flaws in a timely manner
10+
# 3.11.2 Scan for vulnerabilities periodically + when new vulns identified
11+
# 3.4.1 Establish + maintain baseline configurations + inventories (SBOM)
12+
# 3.13.11 FIPS-validated cryptography — reproduced via build verification
13+
name: CMMC Supply Chain
14+
15+
on:
16+
push:
17+
branches:
18+
- "cmmc/main"
19+
pull_request:
20+
21+
# Default permissions are read-only; individual jobs opt into more
22+
# (trivy-fs needs security-events:write to post SARIF).
23+
permissions:
24+
contents: read
25+
26+
jobs:
27+
govulncheck:
28+
name: Go Vulnerability Check (3.14.1)
29+
runs-on: ubuntu-latest
30+
steps:
31+
- uses: actions/checkout@v6
32+
- uses: actions/setup-go@v6
33+
with:
34+
go-version: "1.26.x"
35+
- name: Install govulncheck
36+
run: go install golang.org/x/vuln/cmd/govulncheck@latest
37+
- name: Run govulncheck
38+
run: govulncheck ./...
39+
40+
trivy-fs:
41+
name: Trivy Filesystem Scan (3.11.2)
42+
runs-on: ubuntu-latest
43+
permissions:
44+
contents: read
45+
security-events: write # scoped: only this job uploads SARIF
46+
steps:
47+
- uses: actions/checkout@v6
48+
- name: Run Trivy vulnerability scanner
49+
# Pinned to a specific release rather than @master to keep the
50+
# supply-chain scanner itself supply-chain-clean (3.4.1 irony).
51+
uses: aquasecurity/trivy-action@0.28.0
52+
with:
53+
scan-type: "fs"
54+
scan-ref: "."
55+
format: "sarif"
56+
output: "trivy-fs.sarif"
57+
severity: "CRITICAL,HIGH"
58+
exit-code: "1"
59+
ignore-unfixed: true
60+
- name: Upload SARIF to GitHub Security
61+
if: always()
62+
uses: github/codeql-action/upload-sarif@v4
63+
with:
64+
sarif_file: "trivy-fs.sarif"
65+
category: "trivy-fs"
66+
67+
sbom:
68+
name: Generate SBOM (3.4.1)
69+
runs-on: ubuntu-latest
70+
steps:
71+
- uses: actions/checkout@v6
72+
- uses: actions/setup-go@v6
73+
with:
74+
go-version: "1.26.x"
75+
- name: Install Syft
76+
run: |
77+
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b "$HOME/.local/bin"
78+
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
79+
- name: Generate SBOMs (SPDX + CycloneDX, single scan)
80+
# One filesystem walk, two output formats. Avoids scanning the
81+
# tree twice as the action-based variants would.
82+
run: |
83+
syft . -o spdx-json=sbom.spdx.json -o cyclonedx-json=sbom.cdx.json
84+
- name: Upload SBOM artifacts
85+
uses: actions/upload-artifact@v4
86+
with:
87+
name: sbom
88+
path: |
89+
sbom.spdx.json
90+
sbom.cdx.json
91+
retention-days: 90
92+
93+
fips-build-verify:
94+
name: FIPS Build Reproducibility (3.13.11)
95+
runs-on: ubuntu-latest
96+
steps:
97+
- uses: actions/checkout@v6
98+
- uses: actions/setup-go@v6
99+
with:
100+
go-version: "1.26.x"
101+
- name: Build with GOFIPS140=v1.0.0
102+
run: |
103+
GOFIPS140=v1.0.0 go build -trimpath -buildvcs=false -o filebrowser-fips .
104+
- name: Verify FIPS module enabled at runtime
105+
run: |
106+
cat > /tmp/fipscheck.go <<'EOF'
107+
package main
108+
import (
109+
"crypto/fips140"
110+
"fmt"
111+
"os"
112+
)
113+
func main() {
114+
if !fips140.Enabled() {
115+
fmt.Println("FIPS 140 NOT enabled — regression")
116+
os.Exit(1)
117+
}
118+
fmt.Println("FIPS 140 enabled — OK")
119+
}
120+
EOF
121+
GOFIPS140=v1.0.0 go run /tmp/fipscheck.go

0 commit comments

Comments
 (0)