VulnManager is a comprehensive, full-stack web application designed to help cybersecurity consultants manage and report findings from assessment projects. It features automated report parsing, intelligent deduplication, and customizable reporting capabilities.
- Scalable Architecture: Built with FastAPI, PostgreSQL, and Docker for high performance and portability.
- Intelligent Deduplication: Findings are grouped into master issues with multiple specific instances.
- Secure File Parsing: Securely imports reports from Burp Suite XML and Nessus XML with built-in XXE prevention and size limits.
- Data Visualization: Real-time risk summary charts and dashboard metrics (Total, Critical, High, Medium/Low findings).
- Professional Reporting: Export findings tables directly into DOCX and PDF formats.
- π Quick Add Finding: Rapid finding creation with vulnerability template search and multi-instance support.
- π Vulnerability Repository: Searchable library of vulnerability templates with CWE/CVE mapping and external database import.
- ποΈ CWE Database Import: Bulk import MITRE CWE database (900+ weakness entries) for comprehensive vulnerability coverage.
- π CVE Import: Import individual CVEs directly from NIST NVD API with automatic template creation.
- π Import History: Track all CWE/CVE database imports with statistics (created, updated, skipped, errors, success rate).
- π€ Enhanced Export Formats (v0.10.0):
- π§ SARIF Export: CI/CD integration format compatible with GitHub Security, GitLab, Azure DevOps, SonarQube
- π Interactive HTML: Sortable/filterable web reports with expandable details, works offline
- π½οΈ PowerPoint: Executive presentations with risk charts and top findings
- π¦ Bulk Export: Multi-project ZIP archives (HTML/JSON/SARIF formats)
- π Report Templates (v0.10.0): Unified template system with drag-and-drop builder, template library management, and usage tracking.
- π Dashboard Widgets: Real-time metrics cards showing project statistics and risk distribution.
- π Peer Review Workflow: Complete review system with status tracking (Pending, In Review, Approved, Rejected), reviewer assignment, and collaborative comments.
- π Issue Status Tracking: Manage finding lifecycle (Open, Partially Closed, Closed) with status comments and audit trails.
- β° SLA Management: Automatic deadline tracking with visual indicators (On Track, At Risk, Overdue) based on risk severity.
- π Jira Integration: Bi-directional sync with Jira for seamless issue tracking and status updates.
- π¬ Collaborative Comments: Team discussion on findings with timezone-aware timestamps and real-time updates.
- π Timezone Support: Full timezone awareness (default GMT+8/MYT) with user preferences for dates and times.
- βοΈ Inline Editing: Quick edit finding titles, risk ratings, and statuses directly in the data grid.
- π± Responsive Design: Mobile-optimized UI with high contrast theme and accessibility features (WCAG 2.1 Level AA).
- β¨οΈ Keyboard Shortcuts: Power user features with keyboard navigation and quick actions.
- π Advanced Filtering: Multi-criteria filtering by risk rating, issue status, SLA status, and more.
- π Project Statistics: Last upload dates, risk distribution, and finding counts on project cards.
- π¨ Fluid Tables: Auto-resizing columns and persistent user preferences for table layouts.
| Component | Technology | Rationale |
|---|---|---|
| Backend (API) | FastAPI (Python) | High performance, automatic validation (Pydantic), and Swagger/ReDoc documentation. |
| Database | PostgreSQL | Robust, scalable, production-ready relational database with timezone support. |
| ORM | SQLModel | Unified Pydantic models for validation and SQLAlchemy for database interaction. |
| Frontend | React + TypeScript + Material-UI | Modern, type-safe SPA with rich component library and responsive design. |
| Deployment | Docker & Docker Compose | Ensures portability and isolated environments. |
- Docker and Docker Compose installed.
- A terminal/shell environment (Bash, PowerShell, etc.).
git clone https://github.com/aphesz/vuln-manager.git vuln-manager
cd vuln-manager
# Build images and start all three services (backend, db, frontend)
docker-compose up --build -d
# For development with hot-reload, use:
ENVIRONMENT=development docker-compose -f docker-compose.dev.yml up --build -dThe application supports two deployment modes:
- Optimized for performance and stability
- Multiple workers (2 by default)
- Connection pooling
- Minimal logging
- No file watching/hot-reload
- Enhanced debugging
- SQL query logging
- Hot-reload enabled
- Detailed logging
- Single worker
Key configuration parameters (set in Dockerfile or environment):
# Backend Performance
WORKERS=2 # Number of uvicorn workers
LIMIT_CONCURRENCY=1000 # Maximum concurrent connections
BACKLOG=2048 # Connection queue size
TIMEOUT_KEEP_ALIVE=5 # Keep-alive timeout in seconds
# Database Optimization
POOL_SIZE=5 # Base pool size
MAX_OVERFLOW=10 # Maximum additional connections
POOL_RECYCLE=3600 # Connection recycle time in secondsFor high-traffic deployments, consider adjusting these values based on your hardware resources.
Once all services are running:
- Frontend UI: http://localhost:3000
- Backend API: http://localhost:8000
- API Documentation: http://localhost:8000/docs (Swagger UI)
- Alternative API Docs: http://localhost:8000/redoc (ReDoc)
The application uses Alembic for database migrations. Migrations run automatically on startup, but you can manage them manually:
# Check current migration version
docker exec -w /code vuln-manager-backend-1 alembic current
# Run all pending migrations
docker exec -w /code vuln-manager-backend-1 alembic upgrade head
# Revert last migration
docker exec -w /code vuln-manager-backend-1 alembic downgrade -1
# View migration history
docker exec -w /code vuln-manager-backend-1 alembic history- Metrics Cards: Visual display of Total, Critical, High, and Medium/Low findings
- Risk Distribution Chart: Interactive donut chart showing finding breakdown by severity
- Project Statistics: Quick overview of last upload dates and risk counts per project
- Multi-Tab Detail View: Overview, Instances, Remediation, Peer Review, Issue Status
- Inline Editing: Quick edit titles, risk ratings, and statuses without opening dialogs
- Bulk Actions: Update multiple findings at once (risk rating, status, export)
- Advanced Filtering: Filter by risk level, issue status, SLA status, and more
- Column Customization: Show/hide columns, resize, and persist preferences
- Peer Review System: Assign reviewers, track review status, add reviewer comments
- Comments Section: Team discussions on findings with timezone-aware timestamps
- Audit Trails: Complete history of changes for compliance and accountability
- Jira Sync: Create and track Jira issues directly from findings
- Report Export: Generate professional DOCX/PDF reports with customizable templates
- π Report Templates: Executive Summary, Technical Findings, Risk Assessment, and more
- π¨ Custom Template Builder: Design your own report layouts with drag-and-drop section editor
- Section Types: Text, metrics, charts, filtered findings, tables
- Layout Control: Page size (Letter/A4), orientation, margins
- Widget Library: Key metrics, risk distribution, remediation rates, SLA compliance
- Smart Filters: Risk rating, status, date range filters for findings
- Template Library: Save, search, duplicate, and manage custom templates
- Multi-Format: Export to HTML, DOCX, or PDF from the same template
- Usage Tracking: Popularity metrics to identify most-used templates
- Report Generation: One-click reports with project filtering and email delivery
- Template Library: 900+ vulnerability templates from MITRE CWE database + NIST NVD CVE data
- CWE Import Process:
- Navigate to Vulnerability Repository page
- Click "Import CWE Database" button in toolbar
- Download latest CWE XML from https://cwe.mitre.org/data/xml/cwec_latest.xml.zip
- Upload the XML file (supports up to 50MB)
- Review import statistics (parsed, created, skipped, errors)
- Choose to overwrite existing entries or skip duplicates
- CVE Import Process:
- Click "Import CVE" button in toolbar
- Enter CVE ID (e.g., CVE-2024-1234 or just 2024-1234)
- Click "Import CVE" to fetch from NIST NVD API
- Review imported CVE details (CVSS score, description, remediation)
- Optional: Check "Overwrite existing" to update existing CVE templates
- Import History:
- Click "Import History" button to view all imports
- See statistics: date, source (CWE/NVD), templates created/updated/skipped, errors, success rate
- Filter by source or view all records
- Delete history records (does not affect imported templates)
- Auto-Enrichment: Imported templates include CWE/CVE IDs, weakness descriptions, CVSS scores, remediation strategies, and risk ratings
- Smart Matching: Auto-link findings to CWE/CVE templates during scan uploads
Key API endpoints (full documentation at /docs):
GET /projects/- List all projectsPOST /projects/- Create new project (rate limited: 30/hour)GET /projects/{id}- Get project with findingsGET /projects/stats/all- Get all projects with statisticsPOST /projects/{id}/upload/{scanner}- Upload Burp/Nessus report (rate limited: 10/min)POST /projects/{id}/findings- Manually create finding (rate limited: 20/min)GET /projects/{id}/export.{format}- Export findings (csv/xlsx)
GET /findings/- List all findingsPATCH /findings/{id}- Update findingGET /findings/{id}/comments- Get finding commentsPOST /findings/{id}/comments- Add comment (rate limited: 60/min)
GET /vulnerability-templates- List all templates (search, filter, paginate)POST /vulnerability-templates- Create template (rate limited: 30/hour)POST /vulnerability-templates/import-cwe-database- Bulk import MITRE CWE database (50MB limit)POST /vulnerability-templates/import-cve- Import single CVE from NIST NVD by CVE IDGET /vulnerability-templates/{id}- Get template detailsGET /cwe/{cwe_id}- Lookup CWE by ID (local DB or MITRE redirect)GET /repository/search- Search templates (fuzzy search)GET /projects/{id}/template-suggestions- Get project-specific suggestions
GET /import-history- List all import history records (paginated, filterable by source)GET /import-history/{id}- Get import history detailsDELETE /import-history/{id}- Delete import history record
GET /findings/{id}/review- Get review statusPATCH /findings/{id}/review- Update review status
POST /jira/settings- Configure Jira settingsPOST /jira/create-issue/{finding_id}- Create Jira issueGET /jira/sync/{finding_id}- Sync Jira status
GET /sla/overview/{project_id}- SLA dashboardPATCH /findings/{id}/issue-status- Update issue status
The project includes comprehensive test suites for both frontend and backend:
# Run backend tests
docker exec vuln-manager-backend-1 pytest
# Run frontend tests
docker exec vuln-manager-frontend-1 npm test
# Run tests with coverage
docker exec vuln-manager-backend-1 pytest --cov=app --cov-report=htmlSee /backend/tests/README.md for detailed testing documentation.
- Light/Dark Mode: System preference detection with manual toggle
- High Contrast Theme: WCAG 2.1 Level AA compliant for accessibility
- Responsive Design: Optimized for desktop, tablet, and mobile devices
- Keyboard Navigation: Full keyboard support with shortcuts
- Screen Reader Support: ARIA labels and semantic HTML
VulnManager supports full timezone awareness:
- Default Timezone: GMT+8 (Asia/Kuala_Lumpur - Malaysia Time)
- User Preferences: Configurable timezone per user
- Supported Timezones: All IANA timezone database entries
- Automatic Conversion: All timestamps stored in UTC, displayed in user's timezone
- Relative Timestamps: "2 hours ago" format with absolute time tooltips
Key database models:
- Project: Container for findings
- Finding: Deduplicated vulnerability/issue
- Instance: Specific occurrence of a finding
- Comment: Team discussions on findings
- AuditLog: Change tracking for compliance
- JiraSettings: Jira integration configuration
- UserPreferences: User timezone and locale settings
All datetime fields use TIMESTAMPTZ (timezone-aware) for proper timezone handling.
- Rate Limiting: Automatic throttling of API requests to prevent abuse
- Uploads: 10 per minute per IP
- Project creation: 30 per hour per IP
- Finding creation: 20 per minute per IP
- Comments: 60 per minute per IP
- Templates: 30 per hour per IP
- Input Validation: Comprehensive sanitization of all user inputs
- Length limits (titles: 200 chars, descriptions: 5000 chars)
- HTML/Script tag stripping to prevent XSS attacks
- URL format validation
- Maximum instance limits (100 per request)
- XXE Prevention: Secure XML parsing with
defusedxml - File Size Limits: 10 MiB upload limit to prevent DoS
- SQL Injection Protection: Parameterized queries via SQLModel
- Security Headers: CSP, X-Frame-Options, X-Content-Type-Options, etc.
- Connection Pooling: Prevents connection exhaustion attacks
- CORS Configuration: Controlled cross-origin access
# Check database is running
docker ps | grep vuln-manager-db
# View database logs
docker logs vuln-manager-db-1
# Connect to database directly
docker exec -it vuln-manager-db-1 psql -U pgakar -d vulndb# View backend logs
docker logs vuln-manager-backend-1 -f
# Restart backend
docker-compose restart backend
# Check migration status
docker exec -w /code vuln-manager-backend-1 alembic current# View frontend logs
docker logs vuln-manager-frontend-1
# Rebuild frontend
docker-compose up --build -d frontend
# Clear browser cache and reloadSee Changelog.md for version history and release notes.
Contributions are welcome! Please see .github/copilot-instructions.md for development guidelines and architecture overview.
This project is proprietary software. All rights reserved.
Built with:
- FastAPI - Modern Python web framework
- React - UI library
- Material-UI - React component library
- PostgreSQL - Database
- SQLModel - SQL database ORM
- Docker - Containerization
VulnManager - Making vulnerability management efficient and collaborative π‘οΈ