devsecops-radar 0.4.1__tar.gz → 0.4.2__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.
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/PKG-INFO +147 -112
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/README.md +138 -111
- devsecops_radar-0.4.2/devsecops_radar/cli/scanner.py +398 -0
- devsecops_radar-0.4.2/devsecops_radar/core/analyzer.py +235 -0
- devsecops_radar-0.4.2/devsecops_radar/core/attack_simulation.py +159 -0
- devsecops_radar-0.4.2/devsecops_radar/core/auth.py +85 -0
- devsecops_radar-0.4.2/devsecops_radar/core/database.py +183 -0
- devsecops_radar-0.4.2/devsecops_radar/core/models.py +135 -0
- devsecops_radar-0.4.2/devsecops_radar/core/notifier.py +158 -0
- devsecops_radar-0.4.2/devsecops_radar/core/rag.py +65 -0
- devsecops_radar-0.4.2/devsecops_radar/core/remediation.py +192 -0
- devsecops_radar-0.4.2/devsecops_radar/core/reporting.py +175 -0
- devsecops_radar-0.4.2/devsecops_radar/core/rule_fusion.py +179 -0
- devsecops_radar-0.4.2/devsecops_radar/core/sarif_export.py +145 -0
- devsecops_radar-0.4.2/devsecops_radar/core/sbom.py +152 -0
- devsecops_radar-0.4.2/devsecops_radar/core/settings.py +69 -0
- devsecops_radar-0.4.2/devsecops_radar/core/valuation.py +111 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/adapter.py +84 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/base.py +100 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/gitleaks.py +85 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/poutine.py +80 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/semgrep.py +92 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/trivy.py +119 -0
- devsecops_radar-0.4.2/devsecops_radar/scanners/zizmor.py +82 -0
- devsecops_radar-0.4.2/devsecops_radar/web/app.py +226 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/attack_paths/routes.py +1 -1
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/dashboard/routes.py +7 -7
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/sentry/routes.py +2 -2
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/summary/routes.py +1 -1
- devsecops_radar-0.4.2/devsecops_radar/web/topology/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/topology/routes.py +1 -1
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar.egg-info/PKG-INFO +147 -112
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar.egg-info/SOURCES.txt +13 -2
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar.egg-info/requires.txt +8 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/pyproject.toml +10 -2
- devsecops_radar-0.4.2/tests/test_adapter.py +170 -0
- devsecops_radar-0.4.2/tests/test_analyzer.py +391 -0
- devsecops_radar-0.4.2/tests/test_app.py +169 -0
- devsecops_radar-0.4.2/tests/test_attack_simulation.py +237 -0
- devsecops_radar-0.4.2/tests/test_auth.py +173 -0
- devsecops_radar-0.4.2/tests/test_base.py +140 -0
- devsecops_radar-0.4.2/tests/test_dashboard.py +211 -0
- devsecops_radar-0.4.2/tests/test_database.py +260 -0
- devsecops_radar-0.4.2/tests/test_models.py +181 -0
- devsecops_radar-0.4.2/tests/test_notifier.py +249 -0
- devsecops_radar-0.4.2/tests/test_rag.py +137 -0
- devsecops_radar-0.4.2/tests/test_remediation.py +398 -0
- devsecops_radar-0.4.2/tests/test_reporting.py +237 -0
- devsecops_radar-0.4.2/tests/test_rule_fusion.py +438 -0
- devsecops_radar-0.4.2/tests/test_sarif_export.py +238 -0
- devsecops_radar-0.4.2/tests/test_sbom.py +278 -0
- devsecops_radar-0.4.2/tests/test_scanner.py +412 -0
- devsecops_radar-0.4.2/tests/test_scanners.py +434 -0
- devsecops_radar-0.4.2/tests/test_sentry.py +41 -0
- devsecops_radar-0.4.2/tests/test_settings.py +137 -0
- devsecops_radar-0.4.2/tests/test_topology.py +44 -0
- devsecops_radar-0.4.2/tests/test_valuation.py +171 -0
- devsecops_radar-0.4.1/devsecops_radar/cli/scanner.py +0 -459
- devsecops_radar-0.4.1/devsecops_radar/core/analyzer.py +0 -227
- devsecops_radar-0.4.1/devsecops_radar/core/attack_simulation.py +0 -46
- devsecops_radar-0.4.1/devsecops_radar/core/auth.py +0 -39
- devsecops_radar-0.4.1/devsecops_radar/core/database.py +0 -100
- devsecops_radar-0.4.1/devsecops_radar/core/models.py +0 -81
- devsecops_radar-0.4.1/devsecops_radar/core/notifier.py +0 -61
- devsecops_radar-0.4.1/devsecops_radar/core/rag.py +0 -23
- devsecops_radar-0.4.1/devsecops_radar/core/remediation.py +0 -85
- devsecops_radar-0.4.1/devsecops_radar/core/reporting.py +0 -100
- devsecops_radar-0.4.1/devsecops_radar/core/rule_fusion.py +0 -288
- devsecops_radar-0.4.1/devsecops_radar/core/sarif_export.py +0 -63
- devsecops_radar-0.4.1/devsecops_radar/core/sbom.py +0 -49
- devsecops_radar-0.4.1/devsecops_radar/core/settings.py +0 -20
- devsecops_radar-0.4.1/devsecops_radar/core/valuation.py +0 -35
- devsecops_radar-0.4.1/devsecops_radar/scanners/adapter.py +0 -16
- devsecops_radar-0.4.1/devsecops_radar/scanners/base.py +0 -12
- devsecops_radar-0.4.1/devsecops_radar/scanners/gitleaks.py +0 -52
- devsecops_radar-0.4.1/devsecops_radar/scanners/poutine.py +0 -52
- devsecops_radar-0.4.1/devsecops_radar/scanners/semgrep.py +0 -52
- devsecops_radar-0.4.1/devsecops_radar/scanners/trivy.py +0 -56
- devsecops_radar-0.4.1/devsecops_radar/scanners/zizmor.py +0 -52
- devsecops_radar-0.4.1/devsecops_radar/web/app.py +0 -35
- devsecops_radar-0.4.1/tests/test_analyzer.py +0 -133
- devsecops_radar-0.4.1/tests/test_api.py +0 -43
- devsecops_radar-0.4.1/tests/test_attack_simulation.py +0 -41
- devsecops_radar-0.4.1/tests/test_cli.py +0 -35
- devsecops_radar-0.4.1/tests/test_database.py +0 -41
- devsecops_radar-0.4.1/tests/test_notifier.py +0 -92
- devsecops_radar-0.4.1/tests/test_rule_fusion.py +0 -32
- devsecops_radar-0.4.1/tests/test_sarif_export.py +0 -103
- devsecops_radar-0.4.1/tests/test_sbom.py +0 -86
- devsecops_radar-0.4.1/tests/test_scanner.py +0 -155
- devsecops_radar-0.4.1/tests/test_scanners.py +0 -123
- devsecops_radar-0.4.1/tests/test_valuation.py +0 -81
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/LICENSE +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/cli/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/core/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/plugins/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/attack_paths/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/dashboard/__init__.py +0 -0
- {devsecops_radar-0.4.1/devsecops_radar/web/summary → devsecops_radar-0.4.2/devsecops_radar/web/sentry}/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/css/bootstrap.min.css +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/css/style.css +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/js/bootstrap.bundle.min.js +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/js/chart.umd.min.js +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/js/d3.v7.min.js +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/js/dashboard.js +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/static/js/echarts.min.js +0 -0
- {devsecops_radar-0.4.1/devsecops_radar/web/topology → devsecops_radar-0.4.2/devsecops_radar/web/summary}/__init__.py +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar/web/templates/index.html +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar.egg-info/dependency_links.txt +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar.egg-info/entry_points.txt +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/devsecops_radar.egg-info/top_level.txt +0 -0
- {devsecops_radar-0.4.1 → devsecops_radar-0.4.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devsecops-radar
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
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
|
-
|
|
50
|
+
### *The Open‑Source DevSecOps Command Center — Unify, Analyse, Remediate.*
|
|
43
51
|
|
|
44
52
|
[](https://pypi.org/project/devsecops-radar/)
|
|
45
53
|
[](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. [
|
|
72
|
-
5. [
|
|
73
|
-
6. [
|
|
74
|
-
7. [
|
|
75
|
-
8. [
|
|
76
|
-
9. [
|
|
77
|
-
10. [
|
|
78
|
-
11. [
|
|
79
|
-
12. [
|
|
80
|
-
13. [
|
|
81
|
-
14. [
|
|
82
|
-
15. [
|
|
83
|
-
16. [
|
|
84
|
-
17. [
|
|
85
|
-
18. [
|
|
86
|
-
19. [
|
|
87
|
-
20. [
|
|
88
|
-
21. [
|
|
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
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
135
|
+
Pipeline Sentinel is designed to adapt to your setup. You decide where it fits best:
|
|
126
136
|
|
|
127
|
-
| Deployment |
|
|
137
|
+
| Deployment Mode | Operational Profile & Context |
|
|
128
138
|
| :--- | :--- |
|
|
129
|
-
| 🖥️ **Local
|
|
130
|
-
| 🔧 **CI/CD Runner** |
|
|
131
|
-
| 🏢 **Central Security
|
|
132
|
-
| 🌐 **Air‑Gapped
|
|
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
|
-
|
|
135
|
-
<summary><b>🔍 View Typical Network Flow</b></summary>
|
|
136
|
-
<br>
|
|
144
|
+
---
|
|
137
145
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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:** > 
|
|
146
171
|
|
|
147
|
-
|
|
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
|
+

|
|
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
|
|
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
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
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>
|
|
@@ -298,7 +334,7 @@ devsecops-radar --trivy trivy.json --analyze --fix
|
|
|
298
334
|
devsecops-radar --trivy trivy.json --analyze --fix --review
|
|
299
335
|
```
|
|
300
336
|
> [!NOTE]
|
|
301
|
-
>
|
|
337
|
+
> 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
338
|
</details>
|
|
303
339
|
|
|
304
340
|
<details>
|
|
@@ -350,7 +386,7 @@ Embed a dynamic security badge in your README:
|
|
|
350
386
|
|
|
351
387
|
Set environment variables to create issues automatically:
|
|
352
388
|
```bash
|
|
353
|
-
export JIRA_URL="
|
|
389
|
+
export JIRA_URL="https://your-domain.atlassian.net"
|
|
354
390
|
export JIRA_TOKEN="your-api-token"
|
|
355
391
|
devsecops-radar --trivy trivy.json --analyze --notify-jira
|
|
356
392
|
|
|
@@ -393,7 +429,7 @@ devsecops-radar --trivy trivy.json --analyze --notify-asana
|
|
|
393
429
|
### 📊 Reports & Exports
|
|
394
430
|
| Flag | Description | Example |
|
|
395
431
|
| :--- | :--- | :--- |
|
|
396
|
-
| `--output` | Output JSON file (default: findings.json)
|
|
432
|
+
| `--output` | Output JSON file (default: findings.json)| `--output` <kbd>merged.json</kbd> |
|
|
397
433
|
| `--report` | Generate PDF/JSON/HTML report | `--report` <kbd>report.pdf</kbd> |
|
|
398
434
|
| `--export-sarif`| Export findings as SARIF | `--export-sarif` <kbd>report.sarif</kbd> |
|
|
399
435
|
| `--export-cyclonedx`| Export findings as CycloneDX | `--export-cyclonedx` <kbd>report.cdx</kbd> |
|
|
@@ -410,12 +446,13 @@ devsecops-radar --trivy trivy.json --analyze --notify-asana
|
|
|
410
446
|
<br>
|
|
411
447
|
|
|
412
448
|
> [!TIP]
|
|
413
|
-
>
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
449
|
+
> **`devsecops-radar-web` — Web Server Options**
|
|
450
|
+
|
|
451
|
+
```bash
|
|
452
|
+
devsecops-radar-web # Launch on http://localhost:8080
|
|
453
|
+
FINDINGS_FILE=my.json devsecops-radar-web # Use a custom findings file
|
|
454
|
+
PIPELINE_API_KEY=secret devsecops-radar-web # Enable API authentication
|
|
455
|
+
```
|
|
419
456
|
|
|
420
457
|
</details>
|
|
421
458
|
|
|
@@ -423,24 +460,20 @@ devsecops-radar --trivy trivy.json --analyze --notify-asana
|
|
|
423
460
|
|
|
424
461
|
## ✨ Core Capabilities
|
|
425
462
|
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
463
|
+
### 🔌 Multi-Scanner Ingestion Engine
|
|
464
|
+
* **Pluggable Architecture:** Native modular decoders ingest structured data seamlessly from Trivy, Semgrep, Poutine, Zizmor, and Gitleaks.
|
|
465
|
+
* **Hybrid RuleFusion Layer:** Dynamically evaluation of custom local JSON policies mapped on top of live community-driven git feeds.
|
|
466
|
+
* **Scan History Optimization:** Persistent historical compilation powered by SQLAlchemy featuring sub-second result slicing.
|
|
429
467
|
|
|
430
|
-
|
|
431
|
-
*
|
|
432
|
-
*
|
|
433
|
-
*
|
|
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.
|
|
468
|
+
### 🧠 Advanced Intelligence & Active Remediation
|
|
469
|
+
* **Asynchronous Context Enriched LLM:** Multi-backend integration hooks (Ollama/LiteLLM) mapping structural CVE configurations to real-world MITRE ATT&CK vectors.
|
|
470
|
+
* **Interactive Remediation Tracks:** Intelligent mutation options applying autonomous hotfixes (`--fix`) balanced by modular human verification checklines (`--review`).
|
|
471
|
+
* **Exploit-Aware Scoring:** Modern analytical calculations analyzing vector severities alongside real-time asset exposure and dynamic surface reachability.
|
|
442
472
|
|
|
443
|
-
|
|
473
|
+
### 🛡️ Enterprise Policy & Supply-Chain Governance
|
|
474
|
+
* **Policy-as-Code Frameworks:** Advanced control assertions parsing validation rules via strict local JSON constraints or distributed Open Policy Agent (OPA) Rego scripts.
|
|
475
|
+
* **Supply Chain Verification:** Comprehensive CycloneDX SBOM data compilation complete with proactive VEX vulnerability masking layers.
|
|
476
|
+
* **Air-Gapped Absolute Confidentiality:** Complete dependency localization guaranteeing data processing loops execute with zero external request callbacks.
|
|
444
477
|
|
|
445
478
|
---
|
|
446
479
|
|
|
@@ -457,8 +490,9 @@ Rules are stored locally in `~/.devsecops-radar/community-rules/`. To use them a
|
|
|
457
490
|
```bash
|
|
458
491
|
devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
|
|
459
492
|
```
|
|
493
|
+
|
|
460
494
|
> [!NOTE]
|
|
461
|
-
>
|
|
495
|
+
> You can even point to your own private repository via `COMMUNITY_RULES_REPO`!
|
|
462
496
|
|
|
463
497
|
---
|
|
464
498
|
|
|
@@ -473,22 +507,21 @@ devsecops-radar --trivy scan.json --rules ~/.devsecops-radar/community-rules/
|
|
|
473
507
|
|
|
474
508
|
---
|
|
475
509
|
|
|
476
|
-
|
|
477
|
-
<summary><b>🔐 Security Hardening (v0.4.1)</b></summary>
|
|
478
|
-
<br>
|
|
510
|
+
## 🔐 Security Improvements in v0.4.2
|
|
479
511
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
512
|
+
- **Path Traversal Prevention:** All file operations (rules, manifests, SBOM, backups) now strictly validate that paths remain within the allowed base directory.
|
|
513
|
+
- **Input Sanitization for Attack Simulation:** Bash script generation now safely escapes all user-controlled data, eliminating command injection risks in sandboxed PoCs.
|
|
514
|
+
- **Hardened Docker Sandbox:** Attack simulation containers run with `--cap-drop=ALL`, `--read-only` filesystem, `--network=none`, and as non-root user `nobody`.
|
|
515
|
+
- **Constant-time API Key Comparison:** Login and API key verification use `hmac.compare_digest` to prevent timing attacks.
|
|
516
|
+
- **Database Connection Security:** SQLite WAL mode enabled, foreign keys enforced, and `pool_pre_ping` configured for connection health checks.
|
|
517
|
+
- **Input Size Limits:** Payload size restricted (1MB), database field lengths truncated to prevent DoS and log bloat.
|
|
518
|
+
- **Safe Community Rule Updates:** Git operations are restricted to whitelisted `https://github.com` URLs only, with strict argument validation.
|
|
519
|
+
- **Secrets Redaction:** PDF reports and logs automatically redact passwords, tokens, and keys.
|
|
520
|
+
- **Mandatory Environment Secrets:** JWT secret and API key must be provided; the server fails fast if they are missing or weak.
|
|
488
521
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
522
|
+
---
|
|
523
|
+
|
|
524
|
+
## 🏗️ Architecture
|
|
492
525
|
|
|
493
526
|
```text
|
|
494
527
|
devsecops_radar/
|
|
@@ -503,13 +536,12 @@ devsecops_radar/
|
|
|
503
536
|
├── summary/
|
|
504
537
|
└── sentry/ # Live webhook agent for CI/CD
|
|
505
538
|
```
|
|
506
|
-
> **📌 Diagram Placeholder:**
|
|
507
|
-
> 
|
|
508
|
-
</details>
|
|
509
539
|
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
540
|
+

|
|
541
|
+
|
|
542
|
+
---
|
|
543
|
+
|
|
544
|
+
## 🗺️ Roadmap
|
|
513
545
|
|
|
514
546
|
| Phase | Feature | Status |
|
|
515
547
|
| :--- | :--- | :--- |
|
|
@@ -521,12 +553,12 @@ devsecops_radar/
|
|
|
521
553
|
| 🔲 **Phase 5** | Rule marketplace with YAML | Planned |
|
|
522
554
|
| 🔲 **Phase 5** | Pull Request assistant (GitHub App) | Planned |
|
|
523
555
|
|
|
556
|
+
> [!NOTE]
|
|
524
557
|
> See the [open issues](https://github.com/Mehrdoost/devsecops-radar/issues) for a full list of proposed features.
|
|
525
|
-
</details>
|
|
526
558
|
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
559
|
+
---
|
|
560
|
+
|
|
561
|
+
## 🧪 Testing & CI
|
|
530
562
|
|
|
531
563
|
Pipeline Sentinel is thoroughly tested to ensure reliability for production use.
|
|
532
564
|
* **Unit & Integration Tests:** 23+ tests covering scanners, rule engine, database, analyzer, API, and CLI.
|
|
@@ -540,20 +572,23 @@ pytest tests/ -v --cov=devsecops_radar --cov-report=term-missing
|
|
|
540
572
|
ruff check .
|
|
541
573
|
mypy .
|
|
542
574
|
```
|
|
543
|
-
</details>
|
|
544
575
|
|
|
545
576
|
---
|
|
546
577
|
|
|
547
578
|
## 🤝 Community & Support
|
|
548
579
|
|
|
549
|
-
<details>
|
|
550
|
-
<summary><b>Contributing, Security Policy, & Code of Conduct</b></summary>
|
|
551
|
-
<br>
|
|
552
|
-
|
|
553
580
|
* **Security Policy:** We take security seriously. If you discover a vulnerability, please report it privately. See our full Security Policy for details.
|
|
554
581
|
* **Contributing:** We welcome contributions of all kinds! Please read our Contributing Guide. For adding new rules, see the Community Rules section.
|
|
555
582
|
* **Code of Conduct:** This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
|
|
556
|
-
|
|
583
|
+
|
|
584
|
+
---
|
|
585
|
+
|
|
586
|
+
## ⚡ Support Development
|
|
587
|
+
|
|
588
|
+
Sponsor this project with a crypto donation.
|
|
589
|
+
All funds go directly to the developer.
|
|
590
|
+
|
|
591
|
+
**[🔗 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
592
|
|
|
558
593
|
---
|
|
559
594
|
|