Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
148 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
2847a77
feat(release): attest artifacts and require signed tags (#207)
TFT444 Jul 25, 2026
9013dbb
feat(frontend): add accessibility and i18n foundations (#206)
TFT444 Jul 25, 2026
83a4c92
fix: resolve all open security alerts (8 Dependabot + 1 CodeQL) (#222)
TFT444 Jul 31, 2026
b23f548
Merge branch 'main' into dev
Vishnu2707 Jul 31, 2026
16308c7
feat(scanner): add Supply Chain security pack (AZ-SC-001..008) (#219)
TFT444 Aug 4, 2026
1d9469e
governance: enforce DCO and document continuity checks (#208)
TFT444 Aug 4, 2026
6e0c35c
fix: upgrade cryptography for CVE-2026-69247 (#226)
ritiksah141 Aug 5, 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
4 changes: 4 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ GEMINI_API_KEY=
# Optional
NVD_API_KEY=
SENTRY_DSN=

# Optional - enables AZ-SC-007/008 (Azure DevOps pipeline scanning)
AZURE_DEVOPS_ORG_URL=
AZURE_DEVOPS_PROJECT=
1 change: 1 addition & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
Closes #

## Checklist
- [ ] Every commit includes a DCO `Signed-off-by` trailer (`git commit -s`; see `docs/dco.md`)
- [ ] My code follows the rule template in CONTRIBUTING.md
- [ ] I added or updated the matching CLI playbook
- [ ] I added or updated all four compliance framework mappings
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -595,7 +595,7 @@ jobs:
- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: "22"
node-version: "22.22.0"
cache: npm
cache-dependency-path: frontend/package-lock.json

Expand All @@ -608,6 +608,9 @@ jobs:
- name: Run aiSettings tests
run: node src/utils/aiApi.test.mjs

- name: Run accessibility and internationalization checks
run: npm run test:a11y && npm run test:i18n

- name: Build
run: npm run build

Expand Down
24 changes: 24 additions & 0 deletions .github/workflows/dco.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Developer Certificate of Origin

on:
pull_request:
branches: [dev, main]

permissions:
contents: read

jobs:
signoff:
name: DCO sign-off
runs-on: ubuntu-latest
steps:
- name: Checkout pull request history
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
fetch-depth: 0

- name: Verify every pull request commit
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: python scripts/check_dco.py "$BASE_SHA" "$HEAD_SHA"
72 changes: 68 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,21 +1,85 @@
name: Release
name: Signed Release

on:
push:
tags:
- 'v*'
- "v*"

permissions:
contents: write
id-token: write
attestations: write

jobs:
release:
runs-on: ubuntu-latest
env:
TAG: ${{ github.ref_name }}
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Checkout signed tag
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
with:
fetch-depth: 0
- uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2

- name: Verify annotated tag signature
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
tag_object=$(gh api "repos/${GITHUB_REPOSITORY}/git/ref/tags/${TAG}" --jq '.object.sha')
object_type=$(gh api "repos/${GITHUB_REPOSITORY}/git/ref/tags/${TAG}" --jq '.object.type')
if [ "$object_type" != "tag" ]; then
echo "Release tags must be signed annotated tags; ${TAG} is ${object_type}."
exit 1
fi
verified=$(gh api "repos/${GITHUB_REPOSITORY}/git/tags/${tag_object}" --jq '.verification.verified')
if [ "$verified" != "true" ]; then
echo "GitHub could not verify the signature on ${TAG}."
exit 1
fi

- name: Install Syft
env:
SYFT_VERSION: "1.46.0"
SYFT_SHA256: d654f678b709eb53c393d38519d5ed7d2e57205529404018614cfefa0fb2b5ca
run: |
set -euo pipefail
archive="syft_${SYFT_VERSION}_linux_amd64.tar.gz"
curl --fail --silent --show-error --location \
--output "$archive" \
"https://github.com/anchore/syft/releases/download/v${SYFT_VERSION}/${archive}"
echo "${SYFT_SHA256} ${archive}" | sha256sum --check --strict
sudo tar --extract --gzip --file "$archive" --directory /usr/local/bin syft

- name: Build deterministic release artifacts
run: |
set -euo pipefail
mkdir -p dist
syft dir:. --source-name openshield --source-version "$TAG" \
-o "cyclonedx-json=dist/openshield-${TAG}-sbom.cyclonedx.json"
git archive --format=tar --prefix="openshield-${TAG}/" "$TAG" | \
gzip --no-name > "dist/openshield-${TAG}.tar.gz"
cd dist
sha256sum "openshield-${TAG}.tar.gz" "openshield-${TAG}-sbom.cyclonedx.json" > SHA256SUMS

- name: Attest source archive
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
with:
subject-path: dist/openshield-${{ env.TAG }}.tar.gz

- name: Attest SBOM
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
with:
subject-path: dist/openshield-${{ env.TAG }}-sbom.cyclonedx.json

- name: Attest checksum manifest
uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
with:
subject-path: dist/SHA256SUMS

- name: Publish release
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
with:
generate_release_notes: true
make_latest: true
files: dist/*
40 changes: 0 additions & 40 deletions .github/workflows/sbom-release.yml

This file was deleted.

3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -219,3 +219,6 @@ __marimo__/
ai/vectorstore/
.vercel
.env*

# Node (root package.json exists solely to track react-router for Dependabot)
node_modules/
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ OpenShield uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Security

- Upgraded cryptography to 50.0.0 to address CVE-2026-69247
- AI provider errors no longer expose upstream response details
- Request body limits, AI rate limiting, and playbook path validation added
- GitHub Actions dependencies pinned to immutable commit SHAs
Expand Down
40 changes: 19 additions & 21 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,9 @@ from typing import Any, Dict, List

RULE_ID = "AZ-STOR-001"
RULE_NAME = "Public Blob Access Enabled on Storage Account"
SEVERITY = "HIGH" # HIGH / MEDIUM / LOW / INFO
CATEGORY = "Storage" # Storage / Network / Identity / Database / Compute / Key Vault / Kubernetes
FRAMEWORKS = {
"CIS": "3.5",
"NIST": "PR.AC-3",
"ISO27001": "A.9.4.1"
}
SEVERITY = "HIGH" # HIGH / MEDIUM / LOW / INFO
CATEGORY = "Storage" # Storage / Network / Identity / Database / Compute / Key Vault / Kubernetes
FRAMEWORKS = {"CIS": "3.5", "NIST": "PR.AC-3", "ISO27001": "A.9.4.1"}
DESCRIPTION = (
"Storage accounts with public blob access enabled allow anyone on the "
"internet to read data without authentication. This can lead to data "
Expand All @@ -72,20 +68,22 @@ def scan(azure_client: Any, subscription_id: str) -> List[Dict[str, Any]]:

for account in azure_client.get_storage_accounts():
if getattr(account, "allow_blob_public_access", False):
findings.append({
"rule_id": RULE_ID,
"rule_name": RULE_NAME,
"severity": SEVERITY,
"category": CATEGORY,
"resource_id": account.id,
"resource_name": account.name,
"resource_type": "Microsoft.Storage/storageAccounts",
"description": DESCRIPTION,
"remediation": REMEDIATION,
"playbook": PLAYBOOK,
"frameworks": FRAMEWORKS,
"metadata": {}
})
findings.append(
{
"rule_id": RULE_ID,
"rule_name": RULE_NAME,
"severity": SEVERITY,
"category": CATEGORY,
"resource_id": account.id,
"resource_name": account.name,
"resource_type": "Microsoft.Storage/storageAccounts",
"description": DESCRIPTION,
"remediation": REMEDIATION,
"playbook": PLAYBOOK,
"frameworks": FRAMEWORKS,
"metadata": {},
}
)

return findings
```
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![CHANGELOG](https://img.shields.io/badge/changelog-here-blue)](CHANGELOG.md)

Release artifacts include SHA-256 checksums, an SBOM, and identity-bound
provenance attestations. See [release verification](docs/release-verification.md).

> **Open source Cloud Security Posture Management (CSPM) for Azure - detect misconfigurations, map to CIS/NIST/ISO27001/SOC2, fix them with one command, and identify cryptographic assets requiring quantum-safe migration.**

[![GitHub Repo stars](https://img.shields.io/github/stars/openshield-org/openshield?style=flat-square)](https://github.com/openshield-org/openshield/stargazers)
Expand Down
40 changes: 40 additions & 0 deletions compliance/frameworks/cis_azure_benchmark.json
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,46 @@
"control_id": "TBD-IDN-015",
"control_name": "Managed Identity least privilege (not mapped in CIS Azure Foundations 2.0.0)",
"description": "Microsoft recommends least-privilege roles and scopes for managed identities. This check has no direct control in the repository's CIS Azure Foundations 2.0.0 benchmark."
},
"AZ-SC-001": {
"control_id": "TBD-SC-001",
"control_name": "Container Registry Admin User Enabled placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-002": {
"control_id": "TBD-SC-002",
"control_name": "Container Registry Public Network Access Enabled placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-003": {
"control_id": "TBD-SC-003",
"control_name": "Container Registry Allows Anonymous Pull placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-004": {
"control_id": "TBD-SC-004",
"control_name": "Container Registry Missing Retention or Quarantine Policy placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-005": {
"control_id": "TBD-SC-005",
"control_name": "Terraform State Storage Container Publicly Readable placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-006": {
"control_id": "TBD-SC-006",
"control_name": "Terraform State Storage Account Missing Versioning or Soft Delete placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-007": {
"control_id": "TBD-SC-007",
"control_name": "Pipeline Service Connection Scoped to Subscription placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
},
"AZ-SC-008": {
"control_id": "TBD-SC-008",
"control_name": "Pipeline Service Connection Uses Password Instead of Federated Credential placeholder",
"description": "Numbered placeholder pending maintainer approval of a direct CIS mapping."
}
}
}
40 changes: 40 additions & 0 deletions compliance/frameworks/iso27001.json
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,46 @@
"control_id": "A.9.2.3",
"control_name": "Management of privileged access rights",
"description": "Subscription Owner and Contributor assignments to managed identities require least-privilege reduction."
},
"AZ-SC-001": {
"control_id": "A.9.2.1",
"control_name": "User registration and de-registration",
"description": "The Container Registry admin user is enabled, providing a shared credential that bypasses individual identity management and cannot be attributed to a single user."
},
"AZ-SC-002": {
"control_id": "A.13.1.1",
"control_name": "Network controls",
"description": "The Container Registry is reachable from the public internet, leaving the network boundary that protects the organization's built container images uncontrolled."
},
"AZ-SC-003": {
"control_id": "A.9.2.1",
"control_name": "User registration and de-registration",
"description": "The Container Registry allows anonymous pull, letting any client access every image without an authenticated, individually attributable identity."
},
"AZ-SC-004": {
"control_id": "A.12.1.2",
"control_name": "Change management",
"description": "The Container Registry has no retention or quarantine policy, so stale images accumulate and newly pushed images are deployable before any vulnerability scan evaluates them."
},
"AZ-SC-005": {
"control_id": "A.13.1.1",
"control_name": "Network controls",
"description": "A Terraform remote state container is publicly readable, leaving the network boundary around infrastructure layout and captured secrets uncontrolled."
},
"AZ-SC-006": {
"control_id": "A.12.3.1",
"control_name": "Information backup",
"description": "A storage account holding Terraform remote state has neither versioning nor soft delete enabled, so an overwritten or deleted state file cannot be recovered."
},
"AZ-SC-007": {
"control_id": "A.9.2.3",
"control_name": "Management of privileged access rights",
"description": "A pipeline service connection is scoped to the entire subscription rather than a single resource group, so every pipeline that uses it inherits subscription-wide access beyond what it needs."
},
"AZ-SC-008": {
"control_id": "A.9.4.3",
"control_name": "Password management system",
"description": "A pipeline service connection authenticates with a stored service principal secret instead of a federated credential, leaving a static credential to rotate and potentially leak."
}
}
}
Loading
Loading