devsecops-radar 0.4.1__tar.gz → 0.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/PKG-INFO +152 -112
  2. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/README.md +143 -111
  3. devsecops_radar-0.4.3/devsecops_radar/cli/scanner.py +398 -0
  4. devsecops_radar-0.4.3/devsecops_radar/core/analyzer.py +233 -0
  5. devsecops_radar-0.4.3/devsecops_radar/core/attack_simulation.py +125 -0
  6. devsecops_radar-0.4.3/devsecops_radar/core/auth.py +85 -0
  7. devsecops_radar-0.4.3/devsecops_radar/core/database.py +183 -0
  8. devsecops_radar-0.4.3/devsecops_radar/core/models.py +135 -0
  9. devsecops_radar-0.4.3/devsecops_radar/core/notifier.py +158 -0
  10. devsecops_radar-0.4.3/devsecops_radar/core/rag.py +65 -0
  11. devsecops_radar-0.4.3/devsecops_radar/core/remediation.py +192 -0
  12. devsecops_radar-0.4.3/devsecops_radar/core/reporting.py +175 -0
  13. devsecops_radar-0.4.3/devsecops_radar/core/rule_fusion.py +179 -0
  14. devsecops_radar-0.4.3/devsecops_radar/core/sarif_export.py +145 -0
  15. devsecops_radar-0.4.3/devsecops_radar/core/sbom.py +152 -0
  16. devsecops_radar-0.4.3/devsecops_radar/core/settings.py +84 -0
  17. devsecops_radar-0.4.3/devsecops_radar/core/valuation.py +111 -0
  18. devsecops_radar-0.4.3/devsecops_radar/scanners/adapter.py +84 -0
  19. devsecops_radar-0.4.3/devsecops_radar/scanners/base.py +100 -0
  20. devsecops_radar-0.4.3/devsecops_radar/scanners/gitleaks.py +85 -0
  21. devsecops_radar-0.4.3/devsecops_radar/scanners/poutine.py +80 -0
  22. devsecops_radar-0.4.3/devsecops_radar/scanners/semgrep.py +92 -0
  23. devsecops_radar-0.4.3/devsecops_radar/scanners/trivy.py +119 -0
  24. devsecops_radar-0.4.3/devsecops_radar/scanners/zizmor.py +82 -0
  25. devsecops_radar-0.4.3/devsecops_radar/web/app.py +226 -0
  26. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/attack_paths/routes.py +1 -1
  27. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/dashboard/routes.py +92 -32
  28. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/sentry/routes.py +2 -2
  29. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/summary/routes.py +1 -1
  30. devsecops_radar-0.4.3/devsecops_radar/web/topology/__init__.py +0 -0
  31. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/topology/routes.py +1 -1
  32. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar.egg-info/PKG-INFO +152 -112
  33. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar.egg-info/SOURCES.txt +13 -2
  34. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar.egg-info/requires.txt +8 -0
  35. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/pyproject.toml +10 -2
  36. devsecops_radar-0.4.3/tests/test_adapter.py +170 -0
  37. devsecops_radar-0.4.3/tests/test_analyzer.py +391 -0
  38. devsecops_radar-0.4.3/tests/test_app.py +169 -0
  39. devsecops_radar-0.4.3/tests/test_attack_simulation.py +237 -0
  40. devsecops_radar-0.4.3/tests/test_auth.py +173 -0
  41. devsecops_radar-0.4.3/tests/test_base.py +140 -0
  42. devsecops_radar-0.4.3/tests/test_dashboard.py +242 -0
  43. devsecops_radar-0.4.3/tests/test_database.py +260 -0
  44. devsecops_radar-0.4.3/tests/test_models.py +181 -0
  45. devsecops_radar-0.4.3/tests/test_notifier.py +249 -0
  46. devsecops_radar-0.4.3/tests/test_rag.py +137 -0
  47. devsecops_radar-0.4.3/tests/test_remediation.py +398 -0
  48. devsecops_radar-0.4.3/tests/test_reporting.py +237 -0
  49. devsecops_radar-0.4.3/tests/test_rule_fusion.py +438 -0
  50. devsecops_radar-0.4.3/tests/test_sarif_export.py +238 -0
  51. devsecops_radar-0.4.3/tests/test_sbom.py +278 -0
  52. devsecops_radar-0.4.3/tests/test_scanner.py +412 -0
  53. devsecops_radar-0.4.3/tests/test_scanners.py +434 -0
  54. devsecops_radar-0.4.3/tests/test_sentry.py +41 -0
  55. devsecops_radar-0.4.3/tests/test_settings.py +137 -0
  56. devsecops_radar-0.4.3/tests/test_topology.py +44 -0
  57. devsecops_radar-0.4.3/tests/test_valuation.py +171 -0
  58. devsecops_radar-0.4.1/devsecops_radar/cli/scanner.py +0 -459
  59. devsecops_radar-0.4.1/devsecops_radar/core/analyzer.py +0 -227
  60. devsecops_radar-0.4.1/devsecops_radar/core/attack_simulation.py +0 -46
  61. devsecops_radar-0.4.1/devsecops_radar/core/auth.py +0 -39
  62. devsecops_radar-0.4.1/devsecops_radar/core/database.py +0 -100
  63. devsecops_radar-0.4.1/devsecops_radar/core/models.py +0 -81
  64. devsecops_radar-0.4.1/devsecops_radar/core/notifier.py +0 -61
  65. devsecops_radar-0.4.1/devsecops_radar/core/rag.py +0 -23
  66. devsecops_radar-0.4.1/devsecops_radar/core/remediation.py +0 -85
  67. devsecops_radar-0.4.1/devsecops_radar/core/reporting.py +0 -100
  68. devsecops_radar-0.4.1/devsecops_radar/core/rule_fusion.py +0 -288
  69. devsecops_radar-0.4.1/devsecops_radar/core/sarif_export.py +0 -63
  70. devsecops_radar-0.4.1/devsecops_radar/core/sbom.py +0 -49
  71. devsecops_radar-0.4.1/devsecops_radar/core/settings.py +0 -20
  72. devsecops_radar-0.4.1/devsecops_radar/core/valuation.py +0 -35
  73. devsecops_radar-0.4.1/devsecops_radar/scanners/adapter.py +0 -16
  74. devsecops_radar-0.4.1/devsecops_radar/scanners/base.py +0 -12
  75. devsecops_radar-0.4.1/devsecops_radar/scanners/gitleaks.py +0 -52
  76. devsecops_radar-0.4.1/devsecops_radar/scanners/poutine.py +0 -52
  77. devsecops_radar-0.4.1/devsecops_radar/scanners/semgrep.py +0 -52
  78. devsecops_radar-0.4.1/devsecops_radar/scanners/trivy.py +0 -56
  79. devsecops_radar-0.4.1/devsecops_radar/scanners/zizmor.py +0 -52
  80. devsecops_radar-0.4.1/devsecops_radar/web/app.py +0 -35
  81. devsecops_radar-0.4.1/tests/test_analyzer.py +0 -133
  82. devsecops_radar-0.4.1/tests/test_api.py +0 -43
  83. devsecops_radar-0.4.1/tests/test_attack_simulation.py +0 -41
  84. devsecops_radar-0.4.1/tests/test_cli.py +0 -35
  85. devsecops_radar-0.4.1/tests/test_database.py +0 -41
  86. devsecops_radar-0.4.1/tests/test_notifier.py +0 -92
  87. devsecops_radar-0.4.1/tests/test_rule_fusion.py +0 -32
  88. devsecops_radar-0.4.1/tests/test_sarif_export.py +0 -103
  89. devsecops_radar-0.4.1/tests/test_sbom.py +0 -86
  90. devsecops_radar-0.4.1/tests/test_scanner.py +0 -155
  91. devsecops_radar-0.4.1/tests/test_scanners.py +0 -123
  92. devsecops_radar-0.4.1/tests/test_valuation.py +0 -81
  93. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/LICENSE +0 -0
  94. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/__init__.py +0 -0
  95. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/cli/__init__.py +0 -0
  96. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/core/__init__.py +0 -0
  97. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/plugins/__init__.py +0 -0
  98. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/__init__.py +0 -0
  99. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/attack_paths/__init__.py +0 -0
  100. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/dashboard/__init__.py +0 -0
  101. {devsecops_radar-0.4.1/devsecops_radar/web/summary → devsecops_radar-0.4.3/devsecops_radar/web/sentry}/__init__.py +0 -0
  102. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/css/bootstrap.min.css +0 -0
  103. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/css/style.css +0 -0
  104. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/js/bootstrap.bundle.min.js +0 -0
  105. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/js/chart.umd.min.js +0 -0
  106. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/js/d3.v7.min.js +0 -0
  107. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/js/dashboard.js +0 -0
  108. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/static/js/echarts.min.js +0 -0
  109. {devsecops_radar-0.4.1/devsecops_radar/web/topology → devsecops_radar-0.4.3/devsecops_radar/web/summary}/__init__.py +0 -0
  110. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar/web/templates/index.html +0 -0
  111. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar.egg-info/dependency_links.txt +0 -0
  112. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar.egg-info/entry_points.txt +0 -0
  113. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/devsecops_radar.egg-info/top_level.txt +0 -0
  114. {devsecops_radar-0.4.1 → devsecops_radar-0.4.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devsecops-radar
3
- Version: 0.4.1
3
+ Version: 0.4.3
4
4
  Summary: Unified CI/CD Security Dashboard — Pipeline Sentinel
5
5
  Author-email: Mehrdoost <70381337+Mehrdoost@users.noreply.github.com>
6
6
  License-Expression: MIT
@@ -14,9 +14,14 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Description-Content-Type: text/markdown
15
15
  License-File: LICENSE
16
16
  Requires-Dist: flask>=3.0
17
+ Requires-Dist: flask-cors>=4.0
18
+ Requires-Dist: waitress>=3.0
19
+ Requires-Dist: psutil>=5.9
17
20
  Requires-Dist: semgrep>=1.0
21
+ Requires-Dist: tenacity>=8.0
18
22
  Requires-Dist: pyyaml>=6.0
19
23
  Requires-Dist: requests>=2.31
24
+ Requires-Dist: rich>=13.0
20
25
  Requires-Dist: loguru>=0.7
21
26
  Requires-Dist: reportlab>=4.0
22
27
  Requires-Dist: litellm>=1.50
@@ -25,6 +30,7 @@ Requires-Dist: pydantic>=2.0
25
30
  Requires-Dist: pyjwt>=2.8
26
31
  Requires-Dist: httpx>=0.27
27
32
  Requires-Dist: werkzeug>=3.0
33
+ Requires-Dist: python-dotenv>=1.0
28
34
  Provides-Extra: dev
29
35
  Requires-Dist: pytest>=8.0; extra == "dev"
30
36
  Requires-Dist: pytest-flask>=1.3; extra == "dev"
@@ -32,6 +38,8 @@ Requires-Dist: pytest-cov>=4.0; extra == "dev"
32
38
  Requires-Dist: ruff>=0.3.0; extra == "dev"
33
39
  Requires-Dist: mypy>=1.9; extra == "dev"
34
40
  Requires-Dist: pytest-asyncio>=0.21; extra == "dev"
41
+ Requires-Dist: pytest-mock>=3.10; extra == "dev"
42
+ Requires-Dist: httpx>=0.24.0; extra == "dev"
35
43
  Requires-Dist: pre-commit>=3.5; extra == "dev"
36
44
  Dynamic: license-file
37
45
 
@@ -39,7 +47,7 @@ Dynamic: license-file
39
47
 
40
48
  # 🛡️ Pipeline Sentinel
41
49
 
42
- **The Open‑Source DevSecOps Command Center — Unify, Analyse, Remediate.**
50
+ ### *The Open‑Source DevSecOps Command Center — Unify, Analyse, Remediate.*
43
51
 
44
52
  [![PyPI version](https://img.shields.io/pypi/v/devsecops-radar?style=for-the-badge&color=2196F3)](https://pypi.org/project/devsecops-radar/)
45
53
  [![License](https://img.shields.io/github/license/Mehrdoost/devsecops-radar?style=for-the-badge&color=4CAF50)](LICENSE)
@@ -68,24 +76,26 @@ Dynamic: license-file
68
76
  1. [What Is Pipeline Sentinel? (Simple Explanation)](#-what-is-pipeline-sentinel-simple-explanation)
69
77
  2. [Why You Need It](#-why-you-need-it)
70
78
  3. [Where to Run It in Your Network](#-where-to-run-it-in-your-network)
71
- 4. [Dashboard Preview](#-dashboard-preview)
72
- 5. [Quick Start](#-quick-start)
73
- 6. [Prerequisites](#-prerequisites)
74
- 7. [Installation](#-installation)
75
- 8. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
76
- 9. [Complete Command Reference](#-complete-command-reference)
77
- 10. [Core Capabilities](#-core-capabilities)
78
- 11. [Community Rules & Online Updates](#-community-rules--online-updates)
79
- 12. [Attack Simulation & What‑If Analysis](#-attack-simulation--what‑if-analysis)
80
- 13. [Security Hardening (v0.4.1)](#-security-hardening-v060)
81
- 14. [Architecture](#-architecture)
82
- 15. [Roadmap](#-roadmap)
83
- 16. [Testing & CI](#-testing--ci)
84
- 17. [Security Policy](#-security-policy)
85
- 18. [Contributing](#-contributing)
86
- 19. [Code of Conduct](#-code-of-conduct)
87
- 20. [Author](#-author)
88
- 21. [License](#-license)
79
+ 4. [Network Flow & Topology](#-network-flow--topology)
80
+ 5. [Dashboard Preview](#-dashboard-preview)
81
+ 6. [Quick Start](#-quick-start)
82
+ 7. [Prerequisites](#-prerequisites)
83
+ 8. [Installation](#-installation)
84
+ 9. [How to Use (Step‑by‑Step)](#-how-to-use-stepbystep)
85
+ 10. [Complete Command Reference](#-complete-command-reference)
86
+ 11. [Core Capabilities](#-core-capabilities)
87
+ 12. [Community Rules & Online Updates](#-community-rules--online-updates)
88
+ 13. [Attack Simulation & What‑If Analysis](#-attack-simulation--what‑if-analysis)
89
+ 14. [Security Improvements in v0.4.2](#-security-improvements-in-v042)
90
+ 15. [Architecture](#-architecture)
91
+ 16. [Roadmap](#-roadmap)
92
+ 17. [Testing & CI](#-testing--ci)
93
+ 18. [Security Policy](#-security-policy)
94
+ 19. [Contributing](#-contributing)
95
+ 20. [Code of Conduct](#-code-of-conduct)
96
+ 21. [Support Development](#-support-development)
97
+ 22. [Author](#-author)
98
+ 23. [License](#-license)
89
99
 
90
100
  </details>
91
101
 
@@ -108,43 +118,61 @@ Instead of digging through multiple JSON files, you get a **beautiful, dark‑mo
108
118
  In 2026, **supply chain attacks** have become the #1 threat. Tools like Trivy themselves were compromised, and attackers now inject malicious code directly into build pipelines. **You can no longer just scan your code; you must scan your pipeline.**
109
119
 
110
120
  **Pipeline Sentinel gives you:**
111
- - **One screen for all scanners** – stop juggling log files.
112
- - **AI that understands attack chains**A leaked secret + an old library = a disaster.”
113
- - **Automatic fixes** – with a single flag, it patches files and opens a pull request (with backup).
114
- - **Human review mode** inspect each fix before applying.
115
- - **Compliance reports** generate a PDF for your boss or auditor.
116
- - **Attack simulation** tick a few findings and see a generated attack script.
117
- - **100% offline capable** works in air‑gapped environments where security matters most.
118
- - **Interactive wizard** one command to get everything running.
119
- - **Community rules marketplace** pull curated detection rules from the community.
121
+ * 🎯 **Unified Aggregation:** One screen for all scanners – stop juggling log files.
122
+ * 🧠 **Graph AI Insights:** AI that understands attack chains – *"A leaked secret + an old library = a disaster."*
123
+ * **Auto-Remediation:** Automatically patches files and opens a pull request (with automated backups) with a single flag.
124
+ * 👥 **Human Review Mode:** Step-by-step interactive interface to inspect each fix before applying it to production.
125
+ * 📊 **Compliance-Ready Reports:** Instantly generate beautiful, executive-ready PDF summaries for auditors or stakeholders.
126
+ * ⚔️ **Attack Simulation:** Select security findings and automatically generate operational proof-of-concept scripts.
127
+ * 🔒 **Air-Gapped Privacy:** 100% offline capable. Perfect for highly restricted environments where data residency is paramount.
128
+ * 🧙 **Interactive Wizard:** A single command leads you through the entire initialization and onboarding process.
129
+ * 🛒 **Rules Marketplace:** Dynamically fetch and update curated detection definitions directly from the community.
120
130
 
121
131
  ---
122
132
 
123
133
  ## 📍 Where to Run It in Your Network
124
134
 
125
- Pipeline Sentinel is designed to be **flexible** you decide where it fits best:
135
+ Pipeline Sentinel is designed to adapt to your setup. You decide where it fits best:
126
136
 
127
- | Deployment | Description |
137
+ | Deployment Mode | Operational Profile & Context |
128
138
  | :--- | :--- |
129
- | 🖥️ **Local Developer Machine** | Run the CLI and dashboard right on your laptop. Perfect for individual pentesters or developers who want instant feedback. |
130
- | 🔧 **CI/CD Runner** | Use the GitHub Action or call `devsecops-radar` directly in your Jenkins/GitLab CI scripts. It can fail the build if critical vulnerabilities exceed your policy (`--policy`). |
131
- | 🏢 **Central Security Server** | Install on a dedicated server (via Docker or pip) that collects scan results from multiple teams. The dashboard becomes a shared security operations console. |
132
- | 🌐 **Air‑Gapped Networks** | Copy the Docker image and sample data to an offline server. The dashboard works with zero external calls all assets are embedded. |
139
+ | 🖥️ **Local Dev Machine** | Run the CLI and dashboard right on your laptop. Perfect for individual pentesters or developers who want instant, localized feedback. |
140
+ | 🔧 **CI/CD Runner Pipeline** | Integrate directly into Jenkins/GitLab CI or GitHub Actions. Fail builds automatically if critical vulnerabilities exceed your security policy rules. |
141
+ | 🏢 **Central Security Operations** | Deploy via Docker on a central server to collect scan history across multiple teams, unifying visibility into a shared security console. |
142
+ | 🌐 **Air‑Gapped Environments** | Air-gap friendly. Deploy the standalone Docker bundle to isolated networks with zero external asset dependencies or tracker requests. |
133
143
 
134
- <details>
135
- <summary><b>🔍 View Typical Network Flow</b></summary>
136
- <br>
144
+ ---
137
145
 
138
- ```text
139
- [Trivy scan] ──┐
140
- [Semgrep scan] ─┤
141
- [Poutine scan] ─┼──> devsecops-radar (CLI) ──> findings.json ──> Dashboard (Flask) ──> Browser
142
- [Zizmor scan] ─┘
143
- [Gitleaks scan] ┘
146
+ ## 🔍 Network Flow & Topology
147
+
148
+ ### 🔄 Logical Data Lifecycle
149
+ The functional flow below maps exactly how raw multi-scanner inputs route through our parsing engine to be normalized and centralized:
150
+
151
+ ```mermaid
152
+ graph LR
153
+ subgraph Scanners [Multi-Scanner Core Inputs]
154
+ T[Trivy Scan]
155
+ S[Semgrep Scan]
156
+ P[Poutine Scan]
157
+ Z[Zizmor Scan]
158
+ G[Gitleaks Scan]
159
+ end
160
+
161
+ Scanners --->|Raw Reports| CLI(🛡️ devsecops-radar CLI Engine)
162
+ CLI --->|Normalize & Deduplicate| Out[findings.json]
163
+ Out ---> Web(📊 Flask Dashboard App)
164
+ Web ---> UI[🌐 Modern Browser Command Center]
165
+
166
+ style CLI fill:#1e1e2e,stroke:#3b82f6,stroke-width:2px,color:#cdd6f4
167
+ style Web fill:#1e1e2e,stroke:#10b981,stroke-width:2px,color:#cdd6f4
168
+ style Out fill:#181825,stroke:#fab387,stroke-width:1px,color:#a6e3a1
169
+ style UI fill:#11111b,stroke:#a6e3a1,stroke-width:2px,color:#cdd6f4
144
170
  ```
145
- > **📌 Diagram Placeholder:** > ![Network Flow Diagram](docs/architecture-1.png)
146
171
 
147
- </details>
172
+ ### 🌐 Operational Infrastructure Mapping
173
+ Once processed, the centralized findings are rendered inside your topology mapping network boundaries, visualising the operational relationship between distinct pipeline segments:
174
+
175
+ ![Network Flow Diagram](docs/architecture-1.png)
148
176
 
149
177
  ---
150
178
 
@@ -168,6 +196,7 @@ devsecops-radar --trivy sample_trivy.json --semgrep sample_semgrep.json
168
196
  # 3. Launch the dashboard
169
197
  devsecops-radar-web
170
198
  ```
199
+
171
200
  Open **http://localhost:8080** — your unified command center is live with sample findings.
172
201
 
173
202
  > [!TIP]
@@ -191,7 +220,7 @@ pip install devsecops-radar
191
220
 
192
221
  ### Option 2 — From Source
193
222
  ```bash
194
- git clone [https://github.com/Mehrdoost/devsecops-radar.git](https://github.com/Mehrdoost/devsecops-radar.git)
223
+ git clone https://github.com/Mehrdoost/devsecops-radar.git
195
224
  cd devsecops-radar
196
225
  pip install -e ".[dev]"
197
226
  ```
@@ -212,7 +241,7 @@ docker compose up
212
241
 
213
242
  ### 🧙 One‑Command Install (curl)
214
243
  ```bash
215
- curl -fsSL [https://raw.githubusercontent.com/Mehrdoost/devsecops-radar/main/install.sh](https://raw.githubusercontent.com/Mehrdoost/devsecops-radar/main/install.sh) | bash
244
+ curl -fsSL https://raw.githubusercontent.com/Mehrdoost/devsecops-radar/main/install.sh | bash
216
245
  ```
217
246
  *This script installs Python dependencies, Ollama, pulls the AI model, and starts the wizard.*
218
247
 
@@ -259,19 +288,26 @@ devsecops-radar --trivy trivy.json --semgrep semgrep.json --poutine poutine.json
259
288
  </details>
260
289
 
261
290
  <details open>
262
- <summary><b>3. View the Dashboard</b></summary>
291
+ <summary><b>3. View the Dashboard Engine</b></summary>
263
292
  <br>
264
293
 
294
+ Execute the web wrapper to spin up your centralized analytics engine:
265
295
  ```bash
266
296
  devsecops-radar-web
267
297
  ```
268
- **The dashboard shows:**
269
- * **Severity Breakdown** Doughnut chart with total count
270
- * **Trend Over Time** Line chart from scan history
271
- * **Pipeline Security** – Poutine + Zizmor statistics card
272
- * **Attack Path Graph** Interactive D3.js graph (click nodes for details)
273
- * **Executive Summary** Risk score and AI‑generated summary
274
- * **Findings Table** Searchable, filterable, paginated, with checkboxes for simulation
298
+
299
+ ### 📊 Tactical Web Console Architecture
300
+ The single-page real-time dashboard elegantly partitions telemetry into high-impact actionable items:
301
+
302
+ | Dashboard Component | Interface Visualization Type | Core Operational Value |
303
+ | :--- | :--- | :--- |
304
+ | **Severity Breakdown** | Dynamic Doughnut Charts | Instant tracking of global exposure density and total counts. |
305
+ | **Trend Over Time** | Aggregated Line Timelines | Historical trajectory graphs drawn from persistent scan logs. |
306
+ | **Pipeline Security** | Specialized Poutine + Zizmor Matrix | Micro-telemetry analyzing supply chain health and meta-workflows. |
307
+ | **Attack Path Graph** | Interactive D3.js Force Nodes | Clickable chain mapping demonstrating structural flaw correlations. |
308
+ | **Executive Summary** | Context-Rich Summary & Risk Scoring | Algorithmic threat intelligence translated into executive-ready metrics. |
309
+ | **Findings Datagrid** | Searchable Paginated Checkbox Tables | Granular configuration control built for isolating entities for target simulations. |
310
+
275
311
  </details>
276
312
 
277
313
  <details>
@@ -284,6 +320,9 @@ devsecops-radar --trivy trivy.json --analyze
284
320
  devsecops-radar-web
285
321
  ```
286
322
  The LLM generates `findings_ai_summary.json` containing: `executive_summary`, `risk_score`, `attack_paths` (with MITRE ATT&CK), `top_remediations`, and `false_positives_likely`.
323
+
324
+ ![AI Analysis](docs/AI_CLI.PNG)
325
+
287
326
  </details>
288
327
 
289
328
  <details>
@@ -298,7 +337,7 @@ devsecops-radar --trivy trivy.json --analyze --fix
298
337
  devsecops-radar --trivy trivy.json --analyze --fix --review
299
338
  ```
300
339
  > [!NOTE]
301
- > *All modified files are backed up to `~/.devsecops-radar/backups/`. The tool creates a new git branch `auto-fix` and pushes it for review.*
340
+ > All modified files are backed up to `~/.devsecops-radar/backups/`. The tool creates a new git branch `auto-fix` and pushes it for review.
302
341
  </details>
303
342
 
304
343
  <details>
@@ -350,7 +389,7 @@ Embed a dynamic security badge in your README:
350
389
 
351
390
  Set environment variables to create issues automatically:
352
391
  ```bash
353
- export JIRA_URL="[https://your-domain.atlassian.net](https://your-domain.atlassian.net)"
392
+ export JIRA_URL="https://your-domain.atlassian.net"
354
393
  export JIRA_TOKEN="your-api-token"
355
394
  devsecops-radar --trivy trivy.json --analyze --notify-jira
356
395
 
@@ -393,7 +432,7 @@ devsecops-radar --trivy trivy.json --analyze --notify-asana
393
432
  ### 📊 Reports & Exports
394
433
  | Flag | Description | Example |
395
434
  | :--- | :--- | :--- |
396
- | `--output` | Output JSON file (default: findings.json) | `--output` <kbd>merged.json</kbd> |
435
+ | `--output` | Output JSON file (default: findings.json)| `--output` <kbd>merged.json</kbd> |
397
436
  | `--report` | Generate PDF/JSON/HTML report | `--report` <kbd>report.pdf</kbd> |
398
437
  | `--export-sarif`| Export findings as SARIF | `--export-sarif` <kbd>report.sarif</kbd> |
399
438
  | `--export-cyclonedx`| Export findings as CycloneDX | `--export-cyclonedx` <kbd>report.cdx</kbd> |
@@ -410,12 +449,13 @@ devsecops-radar --trivy trivy.json --analyze --notify-asana
410
449
  <br>
411
450
 
412
451
  > [!TIP]
413
- > ### `devsecops-radar-web` — Web Server Options
414
- > ```bash
415
- > devsecops-radar-web # Launch on http://localhost:8080
416
- > FINDINGS_FILE=my.json devsecops-radar-web # Use a custom findings file
417
- > PIPELINE_API_KEY=secret devsecops-radar-web # Enable API authentication
418
- > ```
452
+ > **`devsecops-radar-web` — Web Server Options**
453
+
454
+ ```bash
455
+ devsecops-radar-web # Launch on http://localhost:8080
456
+ FINDINGS_FILE=my.json devsecops-radar-web # Use a custom findings file
457
+ PIPELINE_API_KEY=secret devsecops-radar-web # Enable API authentication
458
+ ```
419
459
 
420
460
  </details>
421
461
 
@@ -423,24 +463,20 @@ devsecops-radar --trivy trivy.json --analyze --notify-asana
423
463
 
424
464
  ## ✨ Core Capabilities
425
465
 
426
- <details open>
427
- <summary><b>Explore the Engine Powering Pipeline Sentinel</b></summary>
428
- <br>
466
+ ### 🔌 Multi-Scanner Ingestion Engine
467
+ * **Pluggable Architecture:** Native modular decoders ingest structured data seamlessly from Trivy, Semgrep, Poutine, Zizmor, and Gitleaks.
468
+ * **Hybrid RuleFusion Layer:** Dynamically evaluation of custom local JSON policies mapped on top of live community-driven git feeds.
469
+ * **Scan History Optimization:** Persistent historical compilation powered by SQLAlchemy featuring sub-second result slicing.
429
470
 
430
- * **🔌 Multi‑Scanner Plugin Architecture:** Built‑in support for Trivy (`--trivy`), Semgrep (`--semgrep`), Poutine (`--poutine`), Zizmor (`--zizmor`), and Gitleaks (`--gitleaks`).
431
- * **🧩 Hybrid RuleFusion Engine:** Load custom JSON rules locally or pull community‑curated rules from a configurable Git repository (`--update-rules`).
432
- * **🧠 LLM‑Powered Analysis:** Async, enriched context (NIST NVD/GitHub links), structured JSON with MITRE ATT&CK, risk scores, and step‑by‑step remediation. Supports Ollama and LiteLLM.
433
- * **🕸️ Multi‑Step Attack Path Visualization:** Interactive D3.js force graph that chains findings into realistic attack scenarios based on your network topology.
434
- * **🛡️ Policy‑as‑Code (JSON & Rego):** Define simple security gates or write complex rules in Rego for OPA to fail pipelines safely.
435
- * **🛠️ Auto‑Remediation:** AI‑suggested fixes applied automatically (`--fix`) or reviewed (`--review`). Every file is backed up safely in a new Git branch.
436
- * **📊 Compliance & Reports:** Professional reports in PDF, JSON, HTML (`--report`), plus SARIF and CycloneDX exports.
437
- * **📈 Scan History & Trends:** SQLAlchemy‑backed database with fast pagination and historical trend comparisons.
438
- * **🧪 SBOM & Dependency Confusion:** Generate CycloneDX SBOMs, apply VEX files, and detect impersonation risks.
439
- * **🔍 RAG‑Powered Security Search:** Ask natural language questions about your scan history.
440
- * **📉 Dynamic Risk Scoring:** Context-aware scoring based on asset exposure, exploit availability, and threat intelligence.
441
- * **🔒 Privacy & Offline‑First:** 100% embedded assets. LLM analysis runs locally via Ollama. No data leaves your network.
471
+ ### 🧠 Advanced Intelligence & Active Remediation
472
+ * **Asynchronous Context Enriched LLM:** Multi-backend integration hooks (Ollama/LiteLLM) mapping structural CVE configurations to real-world MITRE ATT&CK vectors.
473
+ * **Interactive Remediation Tracks:** Intelligent mutation options applying autonomous hotfixes (`--fix`) balanced by modular human verification checklines (`--review`).
474
+ * **Exploit-Aware Scoring:** Modern analytical calculations analyzing vector severities alongside real-time asset exposure and dynamic surface reachability.
442
475
 
443
- </details>
476
+ ### 🛡️ Enterprise Policy & Supply-Chain Governance
477
+ * **Policy-as-Code Frameworks:** Advanced control assertions parsing validation rules via strict local JSON constraints or distributed Open Policy Agent (OPA) Rego scripts.
478
+ * **Supply Chain Verification:** Comprehensive CycloneDX SBOM data compilation complete with proactive VEX vulnerability masking layers.
479
+ * **Air-Gapped Absolute Confidentiality:** Complete dependency localization guaranteeing data processing loops execute with zero external request callbacks.
444
480
 
445
481
  ---
446
482
 
@@ -457,8 +493,9 @@ Rules are stored locally in `~/.devsecops-radar/community-rules/`. To use them a
457
493
  ```bash
458
494
  devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
459
495
  ```
496
+
460
497
  > [!NOTE]
461
- > *(You can even point to your own private repository via `COMMUNITY_RULES_REPO`!)*
498
+ > You can even point to your own private repository via `COMMUNITY_RULES_REPO`!
462
499
 
463
500
  ---
464
501
 
@@ -471,24 +508,25 @@ devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
471
508
 
472
509
  *(You can also click any node in the Attack Path Graph and press **“Simulate this attack”**)*.
473
510
 
511
+ ![Attack Simulation](docs/Simulation.PNG)
512
+
474
513
  ---
475
514
 
476
- <details>
477
- <summary><b>🔐 Security Hardening (v0.4.1)</b></summary>
478
- <br>
515
+ ## 🔐 Security Improvements in v0.4.2
479
516
 
480
- Pipeline Sentinel now includes several important security improvements:
481
- * **Command injection prevention** all scanner inputs and community repo URLs are strictly validated.
482
- * **Password hashing** API keys are stored using Werkzeug’s secure hashing (no plaintext).
483
- * **Safe git staging** only the files that were actually modified are committed, preventing accidental exposure of `.env` or other secrets.
484
- * **Consistent DB session management** all database operations use the same context manager, preventing resource leaks.
485
- * **Specific exception handling** bare `except` clauses have been replaced with targeted exceptions, improving debuggability.
486
- * **Removal of duplicated parsing code** the deprecated `parser.py` module has been deleted.
487
- </details>
517
+ - **Path Traversal Prevention:** All file operations (rules, manifests, SBOM, backups) now strictly validate that paths remain within the allowed base directory.
518
+ - **Input Sanitization for Attack Simulation:** Bash script generation now safely escapes all user-controlled data, eliminating command injection risks in sandboxed PoCs.
519
+ - **Hardened Docker Sandbox:** Attack simulation containers run with `--cap-drop=ALL`, `--read-only` filesystem, `--network=none`, and as non-root user `nobody`.
520
+ - **Constant-time API Key Comparison:** Login and API key verification use `hmac.compare_digest` to prevent timing attacks.
521
+ - **Database Connection Security:** SQLite WAL mode enabled, foreign keys enforced, and `pool_pre_ping` configured for connection health checks.
522
+ - **Input Size Limits:** Payload size restricted (1MB), database field lengths truncated to prevent DoS and log bloat.
523
+ - **Safe Community Rule Updates:** Git operations are restricted to whitelisted `https://github.com` URLs only, with strict argument validation.
524
+ - **Secrets Redaction:** PDF reports and logs automatically redact passwords, tokens, and keys.
525
+ - **Mandatory Environment Secrets:** JWT secret and API key must be provided; the server fails fast if they are missing or weak.
488
526
 
489
- <details>
490
- <summary><b>🏗️ Architecture</b></summary>
491
- <br>
527
+ ---
528
+
529
+ ## 🏗️ Architecture
492
530
 
493
531
  ```text
494
532
  devsecops_radar/
@@ -503,13 +541,12 @@ devsecops_radar/
503
541
  ├── summary/
504
542
  └── sentry/ # Live webhook agent for CI/CD
505
543
  ```
506
- > **📌 Diagram Placeholder:**
507
- > ![Network Flow Diagram](docs/architecture-2.png)
508
- </details>
509
544
 
510
- <details>
511
- <summary><b>🗺️ Roadmap</b></summary>
512
- <br>
545
+ ![Architecture Diagram](docs/architecture-2.png)
546
+
547
+ ---
548
+
549
+ ## 🗺️ Roadmap
513
550
 
514
551
  | Phase | Feature | Status |
515
552
  | :--- | :--- | :--- |
@@ -521,12 +558,12 @@ devsecops_radar/
521
558
  | 🔲 **Phase 5** | Rule marketplace with YAML | Planned |
522
559
  | 🔲 **Phase 5** | Pull Request assistant (GitHub App) | Planned |
523
560
 
561
+ > [!NOTE]
524
562
  > See the [open issues](https://github.com/Mehrdoost/devsecops-radar/issues) for a full list of proposed features.
525
- </details>
526
563
 
527
- <details>
528
- <summary><b>🧪 Testing & CI</b></summary>
529
- <br>
564
+ ---
565
+
566
+ ## 🧪 Testing & CI
530
567
 
531
568
  Pipeline Sentinel is thoroughly tested to ensure reliability for production use.
532
569
  * **Unit & Integration Tests:** 23+ tests covering scanners, rule engine, database, analyzer, API, and CLI.
@@ -540,20 +577,23 @@ pytest tests/ -v --cov=devsecops_radar --cov-report=term-missing
540
577
  ruff check .
541
578
  mypy .
542
579
  ```
543
- </details>
544
580
 
545
581
  ---
546
582
 
547
583
  ## 🤝 Community & Support
548
584
 
549
- <details>
550
- <summary><b>Contributing, Security Policy, & Code of Conduct</b></summary>
551
- <br>
552
-
553
585
  * **Security Policy:** We take security seriously. If you discover a vulnerability, please report it privately. See our full Security Policy for details.
554
586
  * **Contributing:** We welcome contributions of all kinds! Please read our Contributing Guide. For adding new rules, see the Community Rules section.
555
587
  * **Code of Conduct:** This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
556
- </details>
588
+
589
+ ---
590
+
591
+ ## ⚡ Support Development
592
+
593
+ Sponsor this project with a crypto donation.
594
+ All funds go directly to the developer.
595
+
596
+ **[🔗 Donate USDC (Polygon)](https://polygonscan.com/address/0x6b7c1c572D45575Fa5409CB52F25B750B3097c8b)** <sub>`0x1234...5678`</sub> · <sub><img src="docs/donate-qr.png" width="90" alt="QR" valign="middle" /></sub>
557
597
 
558
598
  ---
559
599