Skip to content

Commit 0b0cc3d

Browse files
committed
Release version 1.2.0 with major enhancements and fixes
- Added support for native mobile app scanning, including Android and iOS manifest analysis. - Introduced UI/UX improvements such as collapsible tool categories, categorized tool grid, and visual status indicators. - Fixed Snyk scanner to handle cases where SNYK_TOKEN is not provided, preventing authentication errors. - Removed LLM chat integration and WebUI interactive buttons for a streamlined single-shot scan experience. - Updated Docker configurations and scripts to reflect the new version and improve overall functionality.
1 parent c9e94f0 commit 0b0cc3d

19 files changed

Lines changed: 1075 additions & 894 deletions

CHANGELOG.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,36 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [1.2.0] - 2025-10-28
6+
7+
### Added
8+
- **Native Mobile Apps Support** - Android and iOS manifest analysis
9+
- Android: Manifest parsing for permissions, exported components, and vulnerabilities
10+
- iOS: Plist analysis for security configurations
11+
- Automatic detection of mobile app projects
12+
13+
### Enhanced - UI/UX Improvements
14+
- **Collapsible Tool Categories** - Auto-collapse clean categories, expand only those with issues
15+
- **Categorized Tool Grid** - Tools grouped by functionality (Static Analysis, Dependencies, Secrets, etc.)
16+
- **Visual Status Indicators** - Color-coded left borders (Green=Clean, Yellow=Issues, Gray=Skipped)
17+
- **Compact Tool Cards** - More efficient space usage with modern card-based layout
18+
- **Tool Status Badges** - Clear indication of findings count
19+
- **Category Statistics** - Shows count of tools with issues per category
20+
21+
### Fixed
22+
- **Snyk Scanner** - No longer fails when SNYK_TOKEN is not provided
23+
- Gracefully skips with clear message
24+
- Prevents authentication errors (401)
25+
- Shows skipped status in report
26+
27+
### Removed
28+
- **LLM Chat Integration** - Removed for single-shot scan compatibility
29+
- **WebUI Interactive Buttons** - Removed scan/refresh controls for standalone reports
30+
31+
### Changed
32+
- **Single-Shot Focus** - Reports are now fully standalone with no backend dependencies
33+
- **Simplified Architecture** - Removed all interactive web features
34+
535
## [1.1.0] - 2025-10-26
636

737
### Added - Major Scanner Expansion

Dockerfile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,10 @@ RUN chmod +x /SimpleSecCheck/scripts/configure.py
178178
RUN apt-get install -y sudo && \
179179
echo 'scanner ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
180180

181+
# Copy and set up entrypoint script
182+
COPY entrypoint.sh /entrypoint.sh
183+
RUN chmod +x /entrypoint.sh
184+
181185
# Switch to non-root user
182186
USER scanner
183187

@@ -250,4 +254,5 @@ ENV BANDIT_CONFIG_PATH=/SimpleSecCheck/bandit/config.yaml
250254
ENV ANCHORE_CONFIG_PATH=/SimpleSecCheck/anchore/config.yaml
251255

252256
WORKDIR /zap/wrk
257+
ENTRYPOINT ["/entrypoint.sh"]
253258
CMD ["bash"]

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.1.0
1+
1.2.0

docker-compose.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ services:
55
context: .
66
dockerfile: Dockerfile
77
args:
8-
VERSION: 1.1.0
8+
VERSION: 1.2.0
99
# image: fr4iser/simpleseccheck:latest # Aus Docker Hub (auskommentiert für lokales Building)
10-
container_name: SimpleSecCheck_scanner_v1.1.0
10+
container_name: SimpleSecCheck_scanner_v1.2.0
1111
volumes:
1212
- ./results:/SimpleSecCheck/results
1313
- ./logs:/SimpleSecCheck/logs

docs/implementation_summary.md

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# SimpleSecCheck UI/UX Implementation Summary
2+
3+
## ✅ Completed Improvements
4+
5+
I've successfully implemented the key UI/UX improvements to SimpleSecCheck:
6+
7+
### 1. **Glassmorphism Modern Design**
8+
- Applied modern glassmorphism styling throughout
9+
- Gradient backgrounds (purple/blue for light mode, navy/black for dark mode)
10+
- Frosted glass effects with `backdrop-filter: blur()`
11+
- Semi-transparent cards with subtle borders
12+
- Enhanced hover effects with smooth transitions
13+
14+
### 2. **Executive Dashboard** 📊
15+
- Added executive summary cards at the top
16+
- Shows Critical Issues, High Severity, Medium Severity counts
17+
- Displays Tools Passed ratio
18+
- Calculated Security Score (0-100)
19+
- Color-coded score indicator (Green/Yellow/Red)
20+
21+
### 3. **Which Scans Ran Section** 🔍
22+
- New section showing which security tools were executed
23+
- Visual status indicators (green/yellow/red dots)
24+
- Grid layout for easy scanning
25+
- Tip legend explaining status colors
26+
27+
### 4. **Enhanced Visuals** 🎨
28+
- Gradient text headers
29+
- Modern card-based layout
30+
- Better spacing and typography
31+
- Responsive mobile design
32+
- Improved dark mode support
33+
34+
## 📝 Files Modified
35+
36+
1. **`scripts/html_utils.py`** - Complete rewrite with:
37+
- Modern glassmorphism CSS
38+
- Executive summary function
39+
- Tool status section function
40+
- Backward compatible legacy functions
41+
42+
2. **`scripts/generate-html-report.py`** - Updated to:
43+
- Import new functions
44+
- Collect all findings for executive summary
45+
- Track which tools were executed
46+
- Display new sections
47+
48+
## 🎯 What You Get
49+
50+
The HTML reports now include:
51+
52+
```
53+
┌────────────────────────────────────────┐
54+
│ SimpleSecCheck Security Scan Summary │
55+
│ 🔍 Scans Executed section │
56+
├────────────────────────────────────────┤
57+
│ Executive Dashboard: │
58+
│ [Critical: 23] [High: 45] │
59+
│ [Medium: 89] [Tools: 12/28] │
60+
│ [Score: 62/100 - Needs Attention] │
61+
├────────────────────────────────────────┤
62+
│ Tool Status Grid │
63+
│ ✅ Semgrep ✅ Trivy ✅ CodeQL... │
64+
├────────────────────────────────────────┤
65+
│ Detailed Findings (existing sections) │
66+
└────────────────────────────────────────┘
67+
```
68+
69+
## 🚀 Remaining Optional Improvements
70+
71+
The following enhancements are available but not yet implemented:
72+
73+
### Future Enhancements:
74+
1. **Filter Bar** - Severity filters and search (requires JavaScript)
75+
2. **Collapsible Sections** - Auto-expand critical issues (requires JavaScript)
76+
3. **Charts** - Severity distribution visualization (requires Chart.js)
77+
4. **Export Options** - PDF/CSV export functionality
78+
79+
These would require additional JavaScript and can be added incrementally based on user feedback.
80+
81+
## 📖 Documentation
82+
83+
- Full analysis: `docs/ui_ux_improvements_analysis.md`
84+
- Key insights: `docs/ui_ux_key_insights.md`
85+
- Example implementation: `docs/ui_ux_implementation_example.html`
86+
87+
## 🎨 Design Highlights
88+
89+
- **Glassmorphism**: Modern frosted glass effects
90+
- **Gradient Backgrounds**: Beautiful purple/blue gradients
91+
- **Executive Dashboard**: At-a-glance security metrics
92+
- **Status Indicators**: Clear visual feedback
93+
- **Responsive**: Works on all devices
94+
- **Dark Mode**: Enhanced dark mode experience
95+
96+
## 🧪 Testing
97+
98+
To test the new design:
99+
100+
1. Run a security scan
101+
2. Open the generated HTML report
102+
3. Check for:
103+
- Executive summary at the top
104+
- "Scans Executed" section
105+
- Modern glassmorphism styling
106+
- Smooth animations on hover
107+
- Proper dark mode toggle
108+
109+
The new design is backward compatible and will work with existing scan results!
110+

entrypoint.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Fix permissions for mounted volumes at container startup
5+
if [ -d "/SimpleSecCheck/results" ]; then
6+
sudo chown -R scanner:scanner /SimpleSecCheck/results
7+
fi
8+
if [ -d "/SimpleSecCheck/logs" ]; then
9+
sudo chown -R scanner:scanner /SimpleSecCheck/logs
10+
fi
11+
12+
# Run the command passed as arguments
13+
exec "$@"
14+

scripts/generate-html-report.py

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from bs4 import BeautifulSoup
99
import traceback
1010
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
11-
from scripts.html_utils import html_header, html_footer, generate_visual_summary_section, generate_overall_summary_and_links_section
11+
from scripts.html_utils import html_header, html_footer, generate_visual_summary_section, generate_overall_summary_and_links_section, generate_executive_summary, generate_tool_status_section
1212
from scripts.zap_processor import zap_summary, generate_zap_html_section
1313
from scripts.zap_xml_parser import parse_zap_xml, generate_html_report
1414
from scripts.semgrep_processor import semgrep_summary, generate_semgrep_html_section
@@ -157,12 +157,58 @@ def main():
157157
ios_findings_summary = ios_plist_summary(ios_plist_json_path)
158158

159159
try:
160+
# Extract ZAP alerts list if available, otherwise use empty list
161+
zap_findings_list = zap_alerts.get('alerts', []) if isinstance(zap_alerts, dict) else []
162+
163+
# Collect all findings for executive summary
164+
all_findings = {
165+
'ZAP': zap_findings_list,
166+
'Semgrep': semgrep_findings,
167+
'Trivy': trivy_vulns,
168+
'CodeQL': codeql_findings,
169+
'Nuclei': nuclei_findings,
170+
'OWASP DC': owasp_dc_vulns,
171+
'Safety': safety_findings,
172+
'Snyk': snyk_findings,
173+
'SonarQube': sonarqube_findings,
174+
'Checkov': checkov_comprehensive_findings,
175+
'TruffleHog': trufflehog_findings,
176+
'GitLeaks': gitleaks_findings,
177+
'Detect-secrets': detect_secrets_findings,
178+
'npm audit': npm_audit_findings,
179+
'Wapiti': wapiti_findings,
180+
'Nikto': nikto_findings,
181+
'Burp Suite': burp_findings,
182+
'Kube-hunter': kube_hunter_findings,
183+
'Kube-bench': kube_bench_findings,
184+
'Docker Bench': docker_bench_findings,
185+
'ESLint': eslint_findings,
186+
'Clair': clair_vulns,
187+
'Anchore': anchore_vulns,
188+
'Brakeman': brakeman_findings,
189+
'Bandit': bandit_findings,
190+
}
191+
192+
# Determine which tools were executed
193+
# A tool was executed if it has actual findings or if it was run but found nothing
194+
# We need to check if findings exist AND are not None
195+
# None means skipped, [] or items means executed but may have no findings
196+
executed_tools = {}
197+
for tool, findings in all_findings.items():
198+
# Tools that have findings (even if empty list) or ZAP with alerts should show as executed
199+
if findings is not None:
200+
executed_tools[tool] = {'status': 'complete'}
201+
elif tool == 'ZAP' and isinstance(zap_alerts, dict):
202+
# ZAP returns a dict, not a list
203+
executed_tools[tool] = {'status': 'complete'}
204+
160205
with open(OUTPUT_FILE, 'w') as f:
161-
f.write(html_header('SimpleSecCheck Security Scan Summary'))
162-
f.write(f'<p><b>Scan Date:</b> {now}<br>')
163-
f.write(f'<b>Target:</b> {target}</p>\n')
206+
f.write(html_header(f'{target} - {now}'))
164207
# WebUI Controls Block
165-
f.write('''\n<!-- WebUI Controls -->\n<div style="margin: 1em 0;">\n <button id="scan-btn">Jetzt neuen Scan starten</button>\n <button id="refresh-status-btn">Status aktualisieren</button>\n <span id="scan-status" style="margin-left:1em; color: #007bff;">Status wird geladen...</span>\n</div>\n<!-- Hinweis: Scan-Status und Trigger laufen über Port 9100 (Watchdog) -->\n''')
208+
# WebUI Controls removed - using single-shot scans only
209+
210+
# Executive Summary Dashboard
211+
f.write(generate_executive_summary(all_findings))
166212

167213
# --- Visual summary with icons/colors for each tool ---
168214
f.write(generate_visual_summary_section(zap_alerts.get('summary', zap_alerts), semgrep_findings, trivy_vulns, codeql_findings, nuclei_findings, owasp_dc_vulns, safety_findings, snyk_findings, sonarqube_findings, checkov_comprehensive_findings, trufflehog_findings, gitleaks_findings, detect_secrets_findings, npm_audit_findings, wapiti_findings, nikto_findings, burp_findings, kube_hunter_findings, kube_bench_findings, docker_bench_findings, eslint_findings, clair_vulns, anchore_vulns, brakeman_findings, bandit_findings, android_findings_summary, ios_findings_summary))
@@ -195,8 +241,8 @@ def main():
195241
if len(safety_findings) > 0:
196242
f.write(generate_safety_html_section(safety_findings))
197243

198-
# Snyk Section (only if findings exist)
199-
if len(snyk_findings) > 0:
244+
# Snyk Section - show if skipped (None) or if there are findings
245+
if snyk_findings is None or len(snyk_findings) > 0:
200246
f.write(generate_snyk_html_section(snyk_findings))
201247

202248
# SonarQube Section (only if findings exist)

0 commit comments

Comments
 (0)