Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
de371f4
chore: add skeleton files and requirements
Vishnu2707 Apr 25, 2026
dd24ce0
fix: remove embedded git repo
Vishnu2707 Apr 25, 2026
e872074
Core Structure Created
Vishnu2707 Apr 25, 2026
ee77377
feat: build complete core — scanner engine, 10 rules, API, playbooks,…
Vishnu2707 Apr 25, 2026
053be03
docs: replace ASCII architecture with interactive Mermaid diagram
Vishnu2707 Apr 25, 2026
b31ecb7
feat: Sentinel integration — ingest.py, 4 KQL rules, setup guide (#12)
TFT444 May 2, 2026
d545744
fix: add AZ-STOR-003 compliance mappings, correct NIST control to PR.…
Vishnu2707 May 4, 2026
6c0c58e
docs: add real-world breach scenarios for all 10 starter rules (#15)
TFT444 May 4, 2026
e4382cd
feat: add AZ-KV-002 key vault public access rule and remediation play…
parthrohit22 May 4, 2026
7593ba0
Merge branch 'main' into dev
Vishnu2707 May 4, 2026
0ec2290
Merge remote-tracking branch 'origin/main' into dev
Vishnu2707 May 4, 2026
e8fed83
docs: update README with rule count, roadmap progress and contributors
Vishnu2707 May 4, 2026
35312d4
feat: add network security rules AZ-NET-003 to AZ-NET-010 (#16)
TFT444 May 4, 2026
aee88b2
Merge remote-tracking branch 'origin/main' into dev
Vishnu2707 May 4, 2026
2badbce
Feat/az stor 003 (#21)
ritiksah141 May 5, 2026
1e7a81f
docs: add SOC 2 Type II compliance framework mapping (#33)
TFT444 May 8, 2026
f409b67
Refactor/azure client network methods (#22)
TFT444 May 9, 2026
bb47779
feat: add CI pipeline with 6 automated checks (#34)
ritiksah141 May 9, 2026
0d99e2d
Merge branch 'main' into dev
Vishnu2707 May 9, 2026
46096a6
Merge remote-tracking branch 'origin/main' into dev
Vishnu2707 May 9, 2026
9e5d355
docs: update .github/ISSUE_TEMPLATE/new_rule.md to reflect current co…
Vishnu2707 May 9, 2026
2a5655e
docs: update .github/PULL_REQUEST_TEMPLATE.md to reflect current code…
Vishnu2707 May 9, 2026
57f25a6
docs: update CONTRIBUTING.md to reflect current codebase state
Vishnu2707 May 9, 2026
309deca
docs: update README.md to reflect current codebase state
Vishnu2707 May 9, 2026
693b20c
docs: update compliance/frameworks/iso27001.json to reflect current c…
Vishnu2707 May 9, 2026
c292efc
docs: update compliance/frameworks/nist_csf.json to reflect current c…
Vishnu2707 May 9, 2026
034b9d5
docs: update docs/adding-a-rule.md to reflect current codebase state
Vishnu2707 May 9, 2026
936a7d6
docs: update docs/architecture.md to reflect current codebase state
Vishnu2707 May 9, 2026
3cd0f00
docs: update docs/az-stor-003-test-plan.md to reflect current codebas…
Vishnu2707 May 9, 2026
17c29f4
docs: update docs/azure-setup.md to reflect current codebase state
Vishnu2707 May 9, 2026
6275396
docs: update docs/ci-pipeline.md to reflect current codebase state
Vishnu2707 May 9, 2026
ab16a16
docs: update docs/sentinel-setup.md to reflect current codebase state
Vishnu2707 May 9, 2026
1cd89dd
docs: update sentinel/TEST_PLAN.md to reflect current codebase state
Vishnu2707 May 9, 2026
a2fed2e
docs: update docs/api-reference.md to reflect current codebase state
Vishnu2707 May 9, 2026
98894bc
docs: update docs/rules-reference.md to reflect current codebase state
Vishnu2707 May 9, 2026
fdae7e7
Merge remote-tracking branch 'origin/dev' into dev
Vishnu2707 May 9, 2026
85bbb7f
docs: update README.md for professional open source style
Vishnu2707 May 9, 2026
0643eaf
docs: update CONTRIBUTING.md for professional open source style
Vishnu2707 May 9, 2026
5ebcdd9
docs: update docs/adding-a-rule.md for professional open source style
Vishnu2707 May 9, 2026
eb88659
Merge branch 'main' into dev
Vishnu2707 May 9, 2026
2d230dd
docs: update deployment guide to use Render instead of Azure App Service
Vishnu2707 May 9, 2026
bac6146
Merge remote-tracking branch 'origin/dev' into dev
Vishnu2707 May 9, 2026
d4384fe
feat: add rule AZ-STOR-004 storage account diagnostic logging check (…
SHAURYAKSHARMA24 May 13, 2026
826396a
feat: add rule AZ-IDN-003 Adds scanner rule AZ-IDN-003 detecting Entr…
TFT444 May 13, 2026
cd47b68
feat: add rule AZ-CMP-002 — VM disk not protected by CMK or ADE (#47)
TFT444 May 13, 2026
1efe1f3
Feat/api deployment (#46)
ritiksah141 May 13, 2026
ba6c70c
feat: AZ-NET-011 Network Watcher not enabled in all regions (#42)
emon22-ts May 13, 2026
e7c3487
feat: add AZ-DB-003 PostgreSQL Flexible Server SSL enforcement rule a…
emon22-ts May 16, 2026
024e635
Merge branch 'main' into dev
Vishnu2707 May 16, 2026
bc146ef
[RULE] AZ-CMP-003: VM without endpoint protection installed (#57)
TFT444 May 23, 2026
923cc75
[DOCS] Add OpenShield learning and onboarding portal (#51)
parthrohit22 May 23, 2026
954505c
Merge branch 'main' into dev
Vishnu2707 May 24, 2026
4a2ef01
refactor: reuse database connection per request using Flask g (#41)
safidnadaf May 24, 2026
0e82402
docs: add security policy, issue template, and README badges (#64)
ritiksah141 May 24, 2026
1b25a74
feat: add rule AZ-KV-004 Key Vault purge protection disabled (#55)
aav-wh May 24, 2026
4a1b153
feat: add AZ-STOR-005 geo-redundant storage rule (#74)
SHAURYAKSHARMA24 May 27, 2026
cd339e1
feat: add rule AZ-DB-004 SQL Server firewall allows all Azure service…
aav-wh May 27, 2026
00dad53
docs: add 6 README badges (#79)
ritiksah141 May 28, 2026
d362cc7
feat: add AZ-KV-005 Key Vault certificate expiring within 30 days (#75)
TFT444 May 28, 2026
82efdfb
[RULE] AZ-CMP-004: VM without automatic OS patching enabled (#73)
TFT444 May 28, 2026
1757c84
Merge branch 'main' into dev
Vishnu2707 May 29, 2026
6ff2686
feat: add AI provider abstraction layer for Anthropic, Groq and Gemin…
TFT444 May 29, 2026
5dedde9
Smoke Test Alginment after the recent changes to the Repository causi…
ritiksah141 May 29, 2026
8cf18db
feat: add AZ-IDN-004 PIM not configured for admin roles rule and play…
emon22-ts May 30, 2026
4b2afb5
feat: add AI executive summary and remediation endpoint (#95)
SHAURYAKSHARMA24 May 30, 2026
3636dd7
feat(scanner): add AZ-NET-014 VNet peering gateway transit rule (#94)
aav-wh May 30, 2026
70cb686
feat: add AZ-NET-013 Azure Firewall VNet rule (#99)
SHAURYAKSHARMA24 May 31, 2026
bf82c39
Implement AI Q&A over scan findings (#98)
SHAURYAKSHARMA24 May 31, 2026
9a1f824
Merge branch 'main' into dev
Vishnu2707 May 31, 2026
c0116f8
Feat/CVE correlation (#96)
ritiksah141 Jun 1, 2026
3d17d7b
feat: add RAG powered AI insights layer with Azure security skill emb…
TFT444 Jun 1, 2026
a2263a4
feat: add AZ-NET-012 - NSG flow logs not enabled rule (#76)
safidnadaf Jun 1, 2026
808a9c6
fix: resolve CodeQL warnings in embed.py and test files
Vishnu2707 Jun 1, 2026
c9592c0
Merge branch 'main' into dev
Vishnu2707 Jun 1, 2026
931d32c
feat(frontend): build complete 7-page security dashboard (#111)
vogonPrayas Jun 3, 2026
673511e
Feat/jwt secret prod fail closed (#117)
ritiksah141 Jun 3, 2026
03cd7cb
feat: AI-004 RAG Pipeline - Document Ingestion and Vector Store (#104)
emon22-ts Jun 3, 2026
115320f
Potential fix for pull request finding 'Unused import'
Vishnu2707 Jun 4, 2026
4ad4ceb
feat: add AZ-PQC-001 to AZ-PQC-003 post-quantum cryptography scanner …
Vishnu2707 Jun 4, 2026
6e5e9a4
feat: add PQC compliance mappings, azure client methods and dependencies
Vishnu2707 Jun 4, 2026
83502d9
docs: update README with post-quantum cryptography scanning and rule …
Vishnu2707 Jun 4, 2026
16f7e77
Feat/live data wiring (#122)
ritiksah141 Jun 4, 2026
ffc3652
Feat/decouple CVE enrichment (#127)
ritiksah141 Jun 5, 2026
1e09618
docs: update OpenShield Learn content, navigation, and hosting suppor…
parthrohit22 Jun 5, 2026
c938551
feat(tests): MockAzureClient rule regression test harness — 7 rules o…
TFT444 Jun 5, 2026
cdcbb2b
AZ-IDN-005 to AZ-IDN-009 — Entra ID identity scanner rules (#109)
TFT444 Jun 5, 2026
9da652b
Merge branch 'main' into dev
Vishnu2707 Jun 5, 2026
7dd74b9
Potential fix for pull request finding 'Empty except'
Vishnu2707 Jun 5, 2026
1ba73b1
Potential fix for pull request finding 'Unused variable, import, func…
Vishnu2707 Jun 5, 2026
d537461
Implement threat simulation prompt builder (#138)
TFT444 Jun 13, 2026
852768d
docs: add frontend API validation guide (#134)
SHAURYAKSHARMA24 Jun 13, 2026
42a0399
fix(compliance): align rule reference and framework mappings (#130)
m-khan-97 Jun 13, 2026
d7c59db
feat: implement asynchronous scan execution with background worker (#…
ritiksah141 Jun 13, 2026
6b5b75f
feat(scanner): add AZ-NET-015 public DNS zone enumeration rule (#106)
aav-wh Jun 13, 2026
d37e8dc
fix: scope posture endpoints to latest completed scan (#145)
TFT444 Jun 21, 2026
4abc2d6
Fix: Make Flask app test-safe and run full pytest suite in CI (#143)
emon22-ts Jun 21, 2026
e0512bc
feat: Integrate Azure Offensive Skills and Dynamic AI Grounding (#137)
ritiksah141 Jun 21, 2026
3c951ce
feat(auth): require JWT for GET /api/* endpoints with optional public…
TFT444 Jul 2, 2026
15d0537
fix(scanner): improve AZ-NET-008 with SOC2 mapping and azure_client a…
aav-wh Jul 2, 2026
e137e64
CI: parallel jobs, lint/format gate, security scanning, coverage (#15…
ritiksah141 Jul 6, 2026
cdd5b42
Fix async scan state recovery (#169)
ritiksah141 Jul 8, 2026
82cf855
feat(infra): observability layer — structured logs, request IDs, metr…
SHAURYAKSHARMA24 Jul 8, 2026
b6b312a
fix(compliance): correct duplicate CIS control mappings, TLS version …
TFT444 Jul 8, 2026
c4f7e0a
build(deps): bump react-router (#148)
dependabot[bot] Jul 8, 2026
69d1f5e
build(deps-dev): bump vite (#147)
dependabot[bot] Jul 8, 2026
6f138b2
docs: add Azure scanner validation docs (#142)
parthrohit22 Jul 8, 2026
0abe4bd
Merge branch 'main' into dev
Vishnu2707 Jul 8, 2026
fea9314
fix: disable auto deploy to Render, manual trigger only
Vishnu2707 Jul 8, 2026
0e85ecf
fix: ruff auto fixes
Vishnu2707 Jul 8, 2026
8cd0406
fix: resolve CodeQL high findings - XSS innerHTML, clear text logging…
Vishnu2707 Jul 8, 2026
8becdd1
chore: add CODEOWNERS, issue templates, Docker setup and autonomous C…
Vishnu2707 Jul 8, 2026
7170af4
fix: raise dependency review threshold to critical only
Vishnu2707 Jul 8, 2026
886a283
fix: upgrade vulnerable dependencies flagged by pip-audit and npm audit
Vishnu2707 Jul 8, 2026
1ca80bc
fix: revert dependency review threshold back to high
Vishnu2707 Jul 8, 2026
52ec129
fix: use python:3.11-slim-bookworm base image to reduce Trivy vulnera…
Vishnu2707 Jul 8, 2026
eec36fe
fix: upgrade jaraco.context, transformers and wheel to fix Trivy HIGH…
Vishnu2707 Jul 8, 2026
a0ac0d0
Merge branch 'main' into dev
Vishnu2707 Jul 8, 2026
3443a85
feat(db): implement Alembic migrations (#164)
parthrohit22 Jul 9, 2026
fa6817d
fix: remediate container scan vulnerabilities (#175)
ritiksah141 Jul 11, 2026
418bcba
Reliability fixes: score 500, DB pooling, async CVE enrichment, threa…
TFT444 Jul 11, 2026
b0a57a7
test: add comprehensive validation coverage (#146)
SHAURYAKSHARMA24 Jul 11, 2026
cbb7374
infra 7 : Terraform for Render/Vercel + GitHub OIDC for Azure credent…
TFT444 Jul 12, 2026
c253547
Security hardening: body size limit, Gemini key header, AI rate limit…
TFT444 Jul 12, 2026
d39f270
Infra: add deterministic Render deploy pipeline and separate worker s…
SHAURYAKSHARMA24 Jul 13, 2026
34011ca
Merge branch 'main' into dev
Vishnu2707 Jul 13, 2026
9de0ce3
fix(security): drop credential key_id from AZ-IDN-006 debug logging (…
TFT444 Jul 13, 2026
36a9172
fix(security): resolve all high/critical CodeQL findings (#177, #179,…
TFT444 Jul 13, 2026
9d9399a
fix(security): resolve Semgrep SAST findings (#185)
TFT444 Jul 13, 2026
5e26cf4
feat(pqc): add CBOM endpoint, quantum risk scoring, NCSC and ENISA fr…
Vishnu2707 Jul 14, 2026
df873b6
feat(scanner): add enterprise AKS security rule pack (#189)
TFT444 Jul 15, 2026
6df5918
fix(security): complete #183 XSS and legacy AI key follow-up (#188)
m-khan-97 Jul 15, 2026
43d6c67
docs: add CHANGELOG, API reference, coding standards and OpenSSF gold…
Vishnu2707 Jul 15, 2026
db63f57
Merge remote-tracking branch 'origin/main' into dev
Vishnu2707 Jul 15, 2026
c6a6092
docs: add OpenSSF Passing badge (#192)
Vishnu2707 Jul 15, 2026
9d1dd96
Add Semgrep SAST to CI alongside CodeQL (#210)
ritiksah141 Jul 18, 2026
6b3f8a8
docs: prepare OpenSSF Silver readiness evidence (#200)
TFT444 Jul 18, 2026
68c1908
fix(scanner): resolve COR-001-004 scanner correctness issues (#151) (…
safidnadaf Jul 18, 2026
4669dc6
feat(scanner): add enterprise App Registration and Managed Identity r…
TFT444 Jul 18, 2026
cbcd919
Merge remote-tracking branch 'origin/main' into dev
Vishnu2707 Jul 18, 2026
0ee97d0
Merge remote-tracking branch 'origin/dev' into dev
Vishnu2707 Jul 18, 2026
48a2cdd
fix: update parse_resource_id test to match current resource_group be…
Vishnu2707 Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,10 @@ The more detail you provide, the faster we can respond.

| Version | Supported |
|---------|-----------|
| 0.1.x | Yes |
| 0.3.x | Yes |
| 0.1.x | No |

Older versions are not patched. If you are running a version below 0.1.x, upgrade to the latest release before filing a report.
Older versions are not patched unless a GitHub Security Advisory explicitly says otherwise. Upgrade to the latest release before filing a report.

---

Expand Down Expand Up @@ -71,12 +72,12 @@ We ask that you do not publicly disclose the vulnerability until step 6 is compl
We value responsible disclosure. Researchers who report valid vulnerabilities will be:

- Acknowledged by name (or pseudonym if preferred) in the release notes for the fix
- Listed in a `SECURITY_ACKNOWLEDGEMENTS.md` file we maintain in this repository
- Listed in [`SECURITY_ACKNOWLEDGEMENTS.md`](../SECURITY_ACKNOWLEDGEMENTS.md)

We do not currently offer a bug bounty programme, but we are grateful for every report.

---

## Contact

**Email: vishnu.ajith@owasp.org**
**Email: vishnu.ajith@owasp.org**
55 changes: 53 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,54 @@ jobs:
- name: Run bandit
run: bandit -r api/ scanner/ ai/ -ll

# ── SAST (Semgrep) ──────────────────────────────────────────────────────────
sast-semgrep:
name: SAST (Semgrep)
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1

- name: Set up Python 3.11
uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
with:
python-version: "3.11"
cache: pip

- name: Install semgrep
run: pip install semgrep

- name: Run semgrep
id: semgrep
continue-on-error: true
run: |
semgrep scan \
--config p/security-audit \
--config p/owasp-top-ten \
--config p/python \
--config p/javascript \
--exclude venv \
--exclude frontend/node_modules \
--exclude frontend/dist \
--metrics=off \
--sarif --output semgrep.sarif \
--error \
.

- name: Upload SARIF to GitHub code scanning
if: always()
uses: github/codeql-action/upload-sarif@411c4c9a36b3fca4d674f06b6396b2c6d23522c6 # v3.36.3
with:
sarif_file: semgrep.sarif
category: semgrep

- name: Fail job if Semgrep found issues
if: steps.semgrep.outcome == 'failure'
run: exit 1

# ── SCA / dependency scanning (pip-audit) ─────────────────────────────────
sca-pip-audit:
name: SCA (pip-audit)
Expand Down Expand Up @@ -531,7 +579,7 @@ jobs:
env:
DATABASE_URL: "postgresql://ci:ci@localhost:5432/ci_db"
run: |
pytest tests/ -v --tb=short --cov=api --cov=scanner --cov-report=term --cov-report=xml --cov-fail-under=25
pytest tests/ -v --tb=short --cov=api --cov=scanner --cov-report=term --cov-report=xml --cov-fail-under=80

# ── Frontend lint + build ────────────────────────────────────────────────
frontend:
Expand Down Expand Up @@ -602,7 +650,7 @@ jobs:
name: CI Summary
runs-on: ubuntu-latest
needs:
[lint, rule-validation, secret-scan, sast-bandit, sca-pip-audit, sbom, container-scan, backend-tests, frontend, website, enforce-source-branch]
[lint, rule-validation, secret-scan, sast-bandit, sast-semgrep, sca-pip-audit, sbom, container-scan, backend-tests, frontend, website, enforce-source-branch]
if: always()
steps:
- name: Build summary
Expand All @@ -611,6 +659,7 @@ jobs:
RULE_VALIDATION: ${{ needs.rule-validation.result }}
SECRET_SCAN: ${{ needs.secret-scan.result }}
SAST_BANDIT: ${{ needs.sast-bandit.result }}
SAST_SEMGREP: ${{ needs.sast-semgrep.result }}
SCA_PIP_AUDIT: ${{ needs.sca-pip-audit.result }}
SBOM: ${{ needs.sbom.result }}
CONTAINER_SCAN: ${{ needs.container-scan.result }}
Expand All @@ -627,6 +676,7 @@ jobs:
("Rule & Compliance Validation", os.environ["RULE_VALIDATION"]),
("Secret Scan (Gitleaks)", os.environ["SECRET_SCAN"]),
("SAST (Bandit)", os.environ["SAST_BANDIT"]),
("SAST (Semgrep)", os.environ["SAST_SEMGREP"]),
("SCA (pip-audit)", os.environ["SCA_PIP_AUDIT"]),
("SBOM (Syft)", os.environ["SBOM"]),
("Container Scan (Trivy, INFRA 1 pending)", os.environ["CONTAINER_SCAN"]),
Expand Down Expand Up @@ -679,6 +729,7 @@ jobs:
needs.rule-validation.result != 'success' ||
needs.secret-scan.result != 'success' ||
needs.sast-bandit.result != 'success' ||
needs.sast-semgrep.result != 'success' ||
needs.sca-pip-audit.result != 'success' ||
needs.sbom.result != 'success' ||
needs.backend-tests.result != 'success' ||
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ OpenShield uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Added

- Semgrep SAST integrated into GitHub Actions CI as an open-source, account-free complement to CodeQL
- OpenSSF Best Practices Passing Badge achieved with 100% of applicable Passing-level criteria completed
- Official live OpenSSF badge and verified project record added to project documentation
- CBOM endpoints with per-asset quantum risk scoring and migration guidance
- NCSC UK and ENISA post-quantum compliance framework mappings
- Harvest Now Decrypt Later exposure window calculation per cryptographic asset
Expand Down
12 changes: 11 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ Use the existing wrapper methods in `scanner/azure_client.py` rather than constr
| `azure_client.get_sql_server_auditing_policy(resource_group, server_name)` | ServerBlobAuditingPolicy or None |
| `azure_client.get_key_vaults()` | List of Key Vault objects |
| `azure_client.get_managed_clusters()` | List of AKS ManagedCluster objects, or `None` on API failure |
| `azure_client.get_applications()` | Paginated App Registration dictionaries, or `None` on Graph failure |
| `azure_client.get_managed_identity_service_principals()` | Managed Identity service principals, or `None` on Graph failure |
| `azure_client.get_subscription_role_assignments()` | Subscription RBAC assignments, or `None` on API failure |
| `azure_client.get_service_principals()` | List of role assignments for service principals |
| `azure_client.get_conditional_access_policies()` | List of Conditional Access policy dicts from Microsoft Graph |

Expand All @@ -218,7 +221,7 @@ pip install -r requirements.txt
# Installs Flask, Alembic, Azure SDK clients, requests, psycopg2, PyJWT, and PyYAML for CI workflow validation.

# Frontend
# The frontend directory is currently a scaffold. The React dashboard MVP is on the roadmap.
# The React dashboard lives in frontend/ and uses the repository's npm scripts.

# Database (Docker)
docker run --name openshield-db \
Expand Down Expand Up @@ -268,6 +271,12 @@ All contributions must meet these standards before a pull request will be review
- Follow Conventional Commits using prefixes such as `feat:`, `fix:`, `docs:`, `chore:`, and `test:`.
- Reference the related issue number where applicable.

**Developer Certificate of Origin**

- By adding `Signed-off-by: Your Name <email>` to a commit, a contributor certifies the [Developer Certificate of Origin 1.1](https://developercertificate.org/).
- Use `git commit -s` to add the sign-off.
- The project lead must approve and enable DCO enforcement before this becomes a required merge check; until then, sign-off is requested but not represented as enforced.

**Branch naming**

- Use `feat/description` for new features.
Expand All @@ -285,6 +294,7 @@ All contributions must meet these standards before a pull request will be review
- Add a CLI remediation playbook for each new scanner rule.
- Follow `.github/PULL_REQUEST_TEMPLATE.md`.
- Obtain at least one reviewer approval before merge.
- Add regression tests for bug fixes whenever the behavior can be reproduced automatically. Major functionality must include automated tests.

## OpenSSF Best Practices

Expand Down
6 changes: 6 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@ RUN pip install --no-cache-dir --upgrade \

COPY . .

RUN groupadd --system openshield && \
useradd --system --gid openshield --no-create-home openshield && \
chown -R openshield:openshield /app

USER openshield

EXPOSE 8000

CMD ["gunicorn", "--workers", "2", "--threads", "2", "--timeout", "120", "--bind", "0.0.0.0:8000", "api.app:app"]
62 changes: 62 additions & 0 deletions GOVERNANCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# OpenShield Governance

OpenShield uses a maintainer-led, consensus-seeking governance model. Technical
discussion happens in public GitHub issues and pull requests. The maintainers
seek agreement through review; when consensus cannot be reached, the project
lead makes the final decision and records the reasoning publicly.

## Roles

- **Project lead:** sets project direction, appoints maintainers, manages
releases and resolves decisions that cannot reach consensus.
- **Maintainers:** triage issues, review changes, uphold security and quality
requirements, and merge approved pull requests in their assigned areas.
- **Security maintainers:** privately triage vulnerability reports, coordinate
fixes and advisories, and ensure reporter credit is handled according to the
security policy.
- **Contributors:** propose issues and changes, participate in review, add tests
and documentation, and follow the Code of Conduct and contribution policy.

Current role holders and component responsibilities are listed in
[`MAINTAINERS.md`](MAINTAINERS.md). Repository paths also have review owners in
`.github/CODEOWNERS`.

## Decision and change process

1. Material changes begin with a GitHub issue describing the problem, scope and
acceptance criteria.
2. Implementation is submitted by pull request to `dev` and must pass required
automated checks.
3. At least one qualified reviewer must approve before merge. Authors do not
approve their own changes.
4. Releases are promoted from `dev` to `main` and published by an authorized
maintainer.
5. Security-sensitive decisions may be discussed privately until coordinated
disclosure, after which the advisory and fix are made public.

## Appointing and removing maintainers

Regular contributors may be nominated as maintainers based on sustained,
constructive work and demonstrated knowledge of the relevant component. The
project lead confirms appointments after consulting existing maintainers.
Maintainers may step down at any time. Access may be removed for inactivity,
security risk, repeated policy violations, or Code of Conduct violations.

## Continuity

The project intends to maintain at least two people capable of issue triage,
pull-request review, merging and release operations. Administrative access,
deployment access, domains and recovery methods must be held through
organization-controlled accounts or recoverable records rather than a single
person's undocumented credentials.

The project lead reviews continuity access before each release. The names of
people who currently hold each capability are intentionally confirmed through
private organization records; `MAINTAINERS.md` lists the public accountable
roles without publishing secret locations or recovery details.

## Governance changes

Governance changes use the normal issue and pull-request process and require
approval from the project lead and one additional maintainer. Emergency
security changes may be merged first and documented immediately afterward.
25 changes: 25 additions & 0 deletions MAINTAINERS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# OpenShield Maintainers

This file identifies public project roles and responsibilities. It does not
assert organization permissions that have not been confirmed by the project
lead.

| Role | Account | Responsibilities |
|---|---|---|
| Project lead and release owner | [@Vishnu2707](https://github.com/Vishnu2707) | Direction, final governance decisions, releases and organization administration |
| Scanner and playbook maintainer | [@TFT444](https://github.com/TFT444) | Azure scanner rules, remediation playbooks, tests and review |
| Scanner and compliance maintainer | [@SHAURYAKSHARMA24](https://github.com/SHAURYAKSHARMA24) | Scanner rules, playbooks and compliance mappings |
| API and AI maintainer | [@ritiksah141](https://github.com/ritiksah141) | API, AI layer, CI/infra review and backend tests |
| Frontend maintainer | [@vogonPrayas](https://github.com/vogonPrayas) | Dashboard implementation and frontend review |
| Test maintainer | [@parthrohit22](https://github.com/parthrohit22) | Test suite and documentation review |

Path-specific review assignments are maintained in `.github/CODEOWNERS`.
Private security reports are coordinated using `.github/SECURITY.md`.

## Owner confirmation required

Before OpenShield claims the OpenSSF continuity criteria, the project lead must
confirm that at least two people can perform issue administration, merge
approved changes and publish a release if any one maintainer becomes
unavailable. Public role assignment alone is not proof of administrative
access.
38 changes: 34 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# OpenShield

[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/13618/badge)](https://www.bestpractices.dev/projects/13618)
[![OpenShield CI](https://github.com/openshield-org/openshield/actions/workflows/ci.yml/badge.svg)](https://github.com/openshield-org/openshield/actions/workflows/ci.yml)
[![CodeQL](https://github.com/openshield-org/openshield/actions/workflows/codeql.yml/badge.svg)](https://github.com/openshield-org/openshield/actions/workflows/codeql.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
Expand Down Expand Up @@ -47,27 +48,56 @@ Findings map to NIST FIPS 203 (ML-KEM), FIPS 204 (ML-DSA), and FIPS 205 (SLH-DSA

| Feature | Description |
|---|---|
| **Misconfiguration Scanner** | Runs 39 Azure security rules across storage, network, identity, database, compute, Key Vault, and post-quantum cryptography |
| **Misconfiguration Scanner** | Runs 51 Azure security rules across storage, network, identity, database, compute, Key Vault, AKS, and post-quantum cryptography |
| **Compliance Mapper** | Maps findings to CIS Benchmarks, NIST CSF, ISO 27001, and SOC 2 framework JSON files |
| **Scan History API** | Stores scans and findings in PostgreSQL and exposes findings, score, scan history, compliance posture, drift, and resource inventory over REST |
| **Remediation Playbooks** | Every rule ships with a matching Azure CLI remediation script (36 playbooks) |
| **Remediation Playbooks** | Every rule ships with a matching Azure CLI remediation script (51 playbooks) |
| **Security Dashboard** | Full React dashboard deployed on Vercel - live monitoring, findings, compliance, drift, prioritization, and AI-layer views |
| **Project Website** | Documentation and reference site at [openshield-website.vercel.app](https://openshield-website.vercel.app) - blog, rules gallery, docs, roadmap, releases, and interactive playground |
| **Sentinel Integration** | Normalises findings and pushes them into Microsoft Sentinel via a Log Analytics custom table and KQL analytics rules |

---

## Security Assurance

OpenShield has achieved the **OpenSSF Best Practices Passing Badge**, completing 100% of the applicable Passing-level criteria across project governance, change control, reporting, quality, security, and code analysis.

<p align="center">
<a href="https://www.bestpractices.dev/projects/13618">
<img src="docs/assets/openssf-best-practices.svg" alt="OpenSSF Best Practices Passing Badge" width="170">
</a>
</p>

<p align="center">
<strong>OpenSSF Best Practices - Passing</strong>
</p>

The project's OpenSSF status is publicly verifiable through the official OpenSSF Best Practices project record. OpenShield continues to strengthen its engineering, security assurance, and open source governance practices as it progresses through the higher-level criteria.

**[View OpenShield's verified OpenSSF Best Practices record](https://www.bestpractices.dev/projects/13618)**

Project policies and assurance evidence:

- [Governance](GOVERNANCE.md) and [maintainer responsibilities](MAINTAINERS.md)
- [July 2026–June 2027 roadmap](ROADMAP.md)
- [Support and upgrade policy](SUPPORT.md)
- [Security requirements](docs/security-requirements.md) and [security assurance case](docs/security-assurance-case.md)
- [Release security](docs/release-security.md) and [accessibility/i18n policy](docs/accessibility-and-i18n.md)
- [OpenSSF Silver evidence register](docs/openssf-silver-evidence.md)

---

## Architecture

```mermaid
flowchart TD
A["React Dashboard\nVercel · Live"]
B["Flask REST API\nJWT · CORS · Blueprints"]
C["Scanner Engine\n39 Python rules"]
C["Scanner Engine\n51 Python rules"]
D["Azure Subscription\nScanned via Azure SDK + Graph"]
E["Compliance Framework JSON\nCIS · NIST · ISO 27001 · SOC 2"]
F["PostgreSQL Database\nFindings · Scans"]
G["Azure CLI Playbooks\n39 remediation scripts"]
G["Azure CLI Playbooks\n51 remediation scripts"]
H["sentinel/ingest.py\nNormalise + HMAC upload"]
I["Microsoft Sentinel\nOpenShieldFindings_CL · KQL rules"]

Expand Down
43 changes: 43 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# OpenShield Roadmap: July 2026 to June 2027

This roadmap communicates direction rather than a delivery guarantee. Security
fixes and community needs may change priorities. Work is accepted only through
reviewed issues and pull requests.

## July–September 2026

- Complete OpenSSF Best Practices Silver readiness and evidence.
- Expand enterprise Azure coverage while preserving low false-positive rates.
- Improve scanner inventory error handling and rule test coverage.
- Reconcile documentation, website rule counts and current APIs.

## October–December 2026

- Stabilize the scanner and REST API contracts for a supported 1.0 release.
- Improve deployment, upgrade and database migration guidance.
- Expand Sentinel detections and operational security monitoring.
- Establish signed release artifacts and public verification instructions.

## January–March 2027

- Add organization-scale scanning and clearer multi-subscription workflows.
- Improve accessibility and internationalization readiness in user interfaces.
- Expand evidence-based compliance reporting and exception handling.
- Evaluate a provider interface for future clouds without weakening Azure
support.

## April–June 2027

- Review reliability, performance and recovery objectives using production
feedback.
- Mature compatibility, deprecation and long-term maintenance policies.
- Reassess readiness for OpenSSF Gold without claiming it prematurely.

## Explicitly out of scope for this period

- Automatic remediation without explicit operator confirmation.
- Claims of formal certification for CIS, ISO 27001, SOC 2 or NIST.
- Collection of Azure resource contents, secrets or customer workload data.
- Guaranteed detection of every cloud vulnerability or configuration risk.
- Multi-cloud parity until the Azure implementation and provider boundary are
stable.
9 changes: 9 additions & 0 deletions SECURITY_ACKNOWLEDGEMENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Security Acknowledgements

OpenShield credits reporters of resolved vulnerabilities unless they request
anonymity. Credits are added here and to the relevant security advisory or
release notes after coordinated disclosure.

No externally reported vulnerability has been publicly disclosed by the project
as of 16 July 2026. This statement should be updated whenever a coordinated
disclosure is completed.
Loading
Loading