A web UI for managing Splunk Enterprise Security detection-rule CSV whitelists — with inline editing, approval workflows, version control, and a full diff-based audit trail.
Built for SOC teams who need to manage detection-rule exceptions without touching raw CSV files, Splunk configs, or the filesystem.
Documentation: the full user guide, security architecture, runbooks, and SBOM live on the hosted docs site at relativisticjet.github.io/wl_manager (deploys at Phase 3.4 public flip; until then, read directly from
docs/in this repo).
- Screenshots
- Features
- Quick Start
- Post-Installation Setup
- Architecture
- Development
- Requirements
- License
- Contributing
- Support This Project
- Trademark Notice
Main Dashboard — Inline editing with change tracking, search, pagination, and bulk operations
Inline Editing — Click any cell to edit. Modified cells are highlighted for review before saving.
Audit Trail — Complete audit dashboard with summary stats, filters, and approval tracking
Control Panel — Admin-only dashboard for approval queue, analyst usage, and limit configuration
- Inline cell editing with change tracking (before/after diffs)
- Add, remove, and bulk-edit rows with required comments
- Add and remove columns
- Row drag-and-drop reordering
- CSV import/export
- Search and filter rows
- Polished dark theme (light theme intentionally removed in build 637 (2026-05-01) — see CHANGELOG)
- Configurable thresholds trigger admin approval for bulk operations
- Daily usage limits per analyst (row removals, edits, additions, reverts)
- Admins approve/reject/cancel requests from the Control Panel
- Self-approval prevention — submitter cannot approve their own request
- Every save creates a timestamped snapshot (last 6 versions retained)
- Revert to any previous version with full audit trail
- Optimistic locking — concurrent edits detected via file mtime
- Every change logged to a dedicated
wl_auditSplunk index - Diff-based events: added, removed, edited, revert, auto-removed
- Per-field before/after values for edits
- Dashboard with summary stats, filters by analyst/rule/action/time
- Expiring-soon panel for proactive review
- Role-based access control:
wl_admin,wl_analyst_editor,wl_analyst_viewer - Server-side RBAC enforcement on every request
- Path traversal protection, input sanitization, rate limiting
- Control Panel restricted to admin roles
- Release artifacts are Sigstore-signed; see docs/SBOM.md for the cosign verification command
- Set expiration dates with presets (7d, 30d, 6mo, 1yr) or custom date/time
- Expired rows auto-removed on CSV load and via hourly scheduled cleanup
- Expiring-soon alerts in the Audit Trail dashboard
# Clone and start
git clone https://github.com/RelativisticJet/wl_manager.git
cd wl_manager
docker compose up -d
# Wait ~90 seconds for Splunk to start, then open:
# http://localhost:8000 (admin / Chang3d!)Navigate to Apps > Whitelist Manager to start using the app.
Download the latest .spl from the Releases page. Replace <VERSION> in the commands below with the release tag you downloaded (e.g., 1.0.0-rc1).
Option A — Splunk Web UI:
- Go to Apps > Manage Apps > Install app from file
- Upload
wl_manager-<VERSION>.spl - Restart Splunk when prompted
Option B — CLI:
$SPLUNK_HOME/bin/splunk install app wl_manager-<VERSION>.spl
$SPLUNK_HOME/bin/splunk restartOption C — Manual:
tar -xzf wl_manager-<VERSION>.spl -C $SPLUNK_HOME/etc/apps/
chown -R splunk:splunk $SPLUNK_HOME/etc/apps/wl_manager
$SPLUNK_HOME/bin/splunk restartThe app ships with three roles in authorize.conf. Assign them to your users via Settings > Access Controls > Roles:
| Role | Can View | Can Edit | Control Panel | Inherits |
|---|---|---|---|---|
wl_admin |
Yes | Yes | Yes | power |
wl_analyst_editor |
Yes | Yes | No | power |
wl_analyst_viewer |
Yes | No | No | user |
Legacy roles wl_editor and wl_viewer are supported for backward compatibility.
Edit lookups/rule_csv_map.csv to map your detection rules to CSV lookup files:
rule_name,csv_file,app_context
DR55_brute_force_login,DR55_brute_force_users.csv,wl_manager
DR130_privilege_escalation,DR130_priv_escalation.csv,wl_managerrule_name— display name in the Detection Rule dropdowncsv_file— the CSV lookup file in the app'slookups/directoryapp_context— the Splunk app containing the CSV (usuallywl_manager)
The packaged .spl ships with an empty rule_csv_map.csv — populate
it with your own detection rules. The repo includes a small set of
demo CSVs under lookups/ for screenshots and tests; these are
excluded from the published .spl (see scripts/package.sh).
The app creates a wl_audit index automatically via indexes.conf. Verify it exists:
| eventcount index=wl_audit
Admins can configure per-analyst daily limits from the Control Panel > Limits & Permissions tab:
- Row additions, removals, edits (default: 10/day each)
- Column additions and removals (default: 2/day each)
- Reverts (default: 3/day)
- Approval thresholds for bulk operations (default: 3+ rows)
wl_manager/
bin/wl_handler.py # REST handler (all server logic)
appserver/static/
whitelist_manager.js # Main dashboard controller
whitelist_manager.css # Styles (dark/light theme)
control_panel.js # Admin Control Panel
notifications.js # Approval notification system
default/
app.conf # App metadata
restmap.conf # REST endpoint config
authorize.conf # RBAC role definitions
indexes.conf # wl_audit index
savedsearches.conf # Expiration alert
data/ui/views/
whitelist_manager.xml # Main dashboard
audit.xml # Audit trail dashboard
control_panel.xml # Admin panel
lookups/
rule_csv_map.csv # Detection rule -> CSV mapping
- Frontend (JavaScript + jQuery) builds the entire UI dynamically inside Splunk SimpleXML panels
- Backend (
wl_handler.py) is aPersistentServerConnectionApplicationhandling GET/POST at/custom/wl_manager - Diff engine uses similarity-based matching to correctly detect edits even when rows are simultaneously removed
- Audit events are written directly to the
wl_auditindex via Splunk's REST API - Version snapshots are stored in
lookups/_versions/with a JSON manifest
- Docker and Docker Compose
- Git Bash (Windows) or any Unix shell
- Python 3.9+ (for validation)
# Start dev environment
make docker-up
make docker-wait
# After code changes
make validate # Run AppInspect-style checks
make test # Run integration tests
# Build release package
make package # Outputs dist/wl_manager-VERSION.spl- Create a CSV file in
lookups/with your column headers - Add a row to
lookups/rule_csv_map.csv - The new rule appears in the dashboard dropdown immediately (no code changes needed)
- Splunk Enterprise 9.3 (the only version on Splunk's currently-supported list as of 2026-05; tested on 9.3.1)
- Python 3 (bundled with Splunk 9)
- ~10 MB disk space for the app + audit data
- A modern desktop browser (Chrome, Firefox, Edge) at 1280×720 minimum. Whitelist Manager is designed for SOC-analyst desktop workflows; Splunk Web itself is not mobile-optimized, so mobile/tablet layouts are out of scope.
Apache License 2.0. See LICENSE and NOTICE for details.
Issues and pull requests welcome at github.com/RelativisticJet/wl_manager.
Read CONTRIBUTING.md before opening a PR — especially the
Security CI (Semgrep Taint Rules) section. Every PR runs three Splunk-adapted
Semgrep rules that gate against SSRF, command injection, and path traversal.
If you add a new validation wrapper (e.g. a path or URL sanitizer), update the
corresponding tests/semgrep/*-splunk.yaml pattern-sanitizers list in the
same PR, or legitimate callers of your wrapper will trip the rule.
Whitelist Manager is built and maintained on personal time. If it saves your SOC effort — or you'd like to see it keep evolving — you can support the work:
- Sponsor on GitHub — one-time or monthly contributions, any tier
- Star the repo — helps other SOC teams discover the project
- Report issues — bugs found during the v1.0.0-rc1 public hold period are high-leverage; see CONTRIBUTING.md for the response-SLA policy
Sponsorships fund focused time on Whitelist Manager (post-rc1 priorities: dark-theme polish, multi-org adaptability, richer approval workflows) and on new open-source SOC tooling in the same audit-first, solo-maintainer-friendly style.
Splunk, Splunk Enterprise, and Splunk Enterprise Security are registered trademarks of Splunk LLC in the United States and other countries. This project is an independent community tool — it is not affiliated with, endorsed by, or sponsored by Splunk LLC. All other product names, logos, and brands are property of their respective owners.



