Commit Graph

571 Commits

Author SHA1 Message Date
62f2f6a7a8 docs(secubox): Add KISS README for all 46 remaining packages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:34:06 +01:00
b516609bcc docs(master-link): Add README for both master-link packages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 07:16:22 +01:00
e74e44158f fix(master-link): Pre-read request file fields before cat truncation
Read timestamp, approved_at, and other fields into variables before
`cat > "$request_file"` truncates the file. Fixes invalid JSON output
(`"timestamp": ,`) in ml_join_approve, ml_join_reject, and
ml_promote_to_submaster.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 06:52:14 +01:00
13960d39c3 fix(master-link): Rename RPCD to luci.master_link and flatten JSON output
Hyphens in RPCD filenames break ubus CLI argument parsing. Rename
luci.master-link to luci.master_link and update all references in
the JS view, ACL, and Makefile. Also pipe RPCD method output through
tr -d '\n\t' so ubus receives single-line JSON it can parse.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 06:40:41 +01:00
c4c829a593 fix(master-link): Suppress p2p-mesh.sh stdout noise from sourced libraries
Use >/dev/null 2>&1 instead of just 2>/dev/null when sourcing
master-link.sh and calling chain_add_block, mesh_init, peer_add,
factory_trust_peer, and gossip_sync to prevent p2p-mesh.sh usage
text and block hashes from corrupting CGI JSON responses.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 06:38:11 +01:00
62c0850829 feat(master-link): Add secure mesh onboarding packages
Implement secubox-master-link (backend) and luci-app-master-link (LuCI
frontend) for secure node onboarding into the SecuBox mesh via
HMAC-SHA256 join tokens, blockchain-backed peer trust, and gigogne
(nested) hierarchy with depth limiting.

Backend provides: token management, join/approve/reject protocol, IPK
bundle serving, CGI API endpoints, and a dark-themed landing page for
new nodes. Frontend provides a 3-tab LuCI view (overview, join requests,
mesh tree) with RPCD integration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 06:15:47 +01:00
c0991336bb fix(mitmproxy): Fix JSON output corruption from grep -c exit codes
grep -c returns exit code 1 when no matches found (even though it
outputs 0), causing `|| echo 0` to append an extra 0 and corrupt
the JSON response. This broke ubus calls and LuCI status display.

Use `: ${var:=0}` pattern instead to provide defaults.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 05:15:27 +01:00
b2f0e23c32 fix(simplex): Use LXC configured path and skip existing rootfs download
- Read LXC path from /etc/lxc/lxc.conf instead of hardcoding /var/lib/lxc
  (OpenWrt uses /srv/lxc by default)
- Skip Alpine rootfs download if file already exists in /tmp

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 05:07:44 +01:00
c89e965631 fix(factory): Suppress ubus output to prevent JSON corruption in CGI responses
The factory_audit_log function's ubus call was only redirecting stderr,
allowing stdout JSON output to leak into CGI responses when Gitea backup
is enabled. This caused JSON parse errors in the Factory dashboard when
creating snapshots.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 04:17:48 +01:00
045af683b3 fix(feed): Remove stale mitmproxy r19 package
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:21:41 +01:00
d238e05098 chore(feed): Update build artifacts with WAF autoban stats UI
- luci-app-crowdsec-dashboard: WAF threats/bans stats on overview
- luci-app-mitmproxy: Auto-ban statistics card

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:21:10 +01:00
98440c456a feat(ui): Add WAF auto-ban statistics to dashboards
CrowdSec Dashboard:
- Added WAF Threats and WAF Auto-Bans stats cards
- Added WAF Auto-Ban status to health checks
- Shows sensitivity level (aggressive/moderate/permissive)

mitmproxy Status:
- Added WAF Auto-Ban section with statistics
- Shows threats today, bans today, total bans
- Displays sensitivity level with color coding
- Shows pending bans count when applicable

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:15:40 +01:00
449d5bb96e chore(feed): Update build artifacts for mitmproxy v0.5.0-r21
- secubox-app-mitmproxy: Sensitivity-based auto-ban system
- luci-app-mitmproxy: Updated frontend
- luci-app-crowdsec-dashboard: Ban button on alerts page

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 16:04:49 +01:00
56d45fe7c2 feat(waf): Add sensitivity-based auto-ban system with CrowdSec integration
WAF Auto-ban Features:
- Three sensitivity levels: aggressive, moderate, permissive
- Aggressive: Immediate ban on first critical threat
- Moderate: Ban after 3 attempts in 5 minutes (default)
- Permissive: Ban after 5 attempts in 1 hour
- Attempt tracking with configurable thresholds

Critical threats (immediate in aggressive/moderate):
- CVE exploits, SQL injection, Command injection
- XXE, Log4Shell, SSTI attacks

CrowdSec Integration:
- Auto-ban requests written to /srv/mitmproxy/autoban-requests.log
- Cron job processes bans every minute via mitmproxyctl
- Bans sent to CrowdSec for network-wide enforcement

New Commands:
- mitmproxyctl process-autoban: Process pending bans
- mitmproxyctl reload-autoban: Reload config after UCI changes

CrowdSec Dashboard:
- Added ban button to alerts page
- Modal confirmation with 24h ban duration
- Real-time banned IP tracking

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 13:40:52 +01:00
db847ba1cd feat(simplex): Add SimpleX Chat self-hosted messaging servers
Integrate SimpleX Chat SMP and XFTP servers for privacy-focused messaging:

- secubox-app-simplex: Backend with LXC container management
  - SMP server for message relay (port 5223)
  - XFTP server for encrypted file sharing (port 443)
  - Auto-download of SimpleX binaries for aarch64/x86_64
  - TLS certificate generation (self-signed or Let's Encrypt)
  - Firewall and HAProxy integration

- luci-app-simplex: LuCI dashboard with:
  - Service status monitoring
  - Server address display with copy-to-clipboard
  - Full configuration forms for SMP, XFTP, and TLS
  - Install/certificate management actions

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:53:41 +01:00
ec31cdba12 chore(feed): Update build artifacts for mitmproxy v0.5.0-r21
Added comprehensive CVE detection patterns for WAF filtering.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:31:21 +01:00
94c02c9224 feat(waf): Add comprehensive CVE detection patterns
Added 60+ CVE patterns for WAF filtering:

2021 CVEs:
- CVE-2021-44228 (Log4Shell)
- CVE-2021-41773 (Apache path traversal)
- CVE-2021-26084 (Confluence OGNL)
- CVE-2021-34473 (ProxyShell)
- CVE-2021-21972 (VMware vCenter)
- CVE-2021-22986 (F5 BIG-IP)

2022 CVEs:
- CVE-2022-22963 (Spring Cloud Function)
- CVE-2022-22965 (Spring4Shell)
- CVE-2022-1388 (F5 Auth Bypass)
- CVE-2022-26134 (Confluence OGNL)
- CVE-2022-41040 (ProxyNotShell)
- CVE-2022-42889 (Apache Commons Text)

2023 CVEs:
- CVE-2023-34362 (MOVEit Transfer)
- CVE-2023-22515/22518 (Confluence)
- CVE-2023-46747 (F5 BIG-IP)
- CVE-2023-27997 (Fortinet SSL VPN)
- CVE-2023-20198 (Cisco IOS XE)
- CVE-2023-4966 (Citrix Bleed)

2024 CVEs:
- CVE-2024-3400 (PAN-OS)
- CVE-2024-21887 (Ivanti)
- CVE-2024-1709 (ScreenConnect)
- CVE-2024-27198 (TeamCity)
- CVE-2024-23897 (Jenkins)
- CVE-2024-4577 (PHP-CGI)
- CVE-2024-6387 (OpenSSH)
- CVE-2024-55591 (FortiOS)

2025 CVEs:
- CVE-2025-15467 (OpenSSL CMS)
- CVE-2025-0282 (Ivanti)
- CVE-2025-23006 (SonicWall)

Plus CMS, Framework, Database, CI/CD, and Cloud patterns.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:27:31 +01:00
f6ab1fc6c5 chore(feed): Update build artifacts for crowdsec-dashboard v0.7.0-r32
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:23:44 +01:00
21f59b6c9a fix(crowdsec): Restore working setup page from settings.js
Restored the original settings.js functionality as setup.js with
updated nav references. The simplified version was broken.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 11:01:16 +01:00
a9086b1d21 chore(feed): Update build artifacts for crowdsec-dashboard v0.7.0-r31
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:58:07 +01:00
6298e8b961 refactor(crowdsec): Simplify LuCI interface - KISS setup
- Remove unused views: metrics.js, waf.js, wizard.js
- Remove unused CSS: wizard.css, soc.css
- Remove settings.js, replace with simplified setup.js
- Update menu: remove WAF, Metrics entries
- Update nav.js: remove references to deleted pages
- Add status grid CSS for setup page

The new Setup page provides:
- System status overview (Agent, LAPI, CAPI, Bouncer)
- Console enrollment form
- Service controls (start/stop/restart/repair)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:56:13 +01:00
840d226881 fix(crowdsec): Add capi_enrolled to status response
The settings page was showing "CAPI: Error" because the status
method didn't return the capi_enrolled field. Added CAPI status
check to get_status() so the health display shows correct status.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:50:35 +01:00
27c5900f53 chore(feed): Update build artifacts for v0.18.2
Updated package indices and IPK files for secubox-feed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:48:10 +01:00
2ce7c5da3a fix(security): Move CVE-2025-15467 detection before SSRF check
Content-Type based CVE detection must happen before SSRF patterns
to avoid false positives when routing through localhost.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:44:23 +01:00
77e572a787 feat(security): Add CVE-2025-15467 detection and mitmproxy threat integration
- Add CVE-2025-15467 (OpenSSL CMS stack overflow) detection patterns
- Detect S/MIME/CMS content types that may be exploited
- Integrate mitmproxy threats into security-threats dashboard
- Security threats page now shows real-time WAF detections

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:34:20 +01:00
4a8975f436 feat(mitmproxy): Disable LAN transparent proxy by default
LAN transparent mode now requires explicit opt-in via transparent.enabled
to prevent HTTPS certificate errors for LAN clients.

Changes:
- mitmproxyctl: Check transparent_enabled before setting up LAN firewall rules
- LuCI settings: Add warning about certificate requirements for LAN mode
- Default config already has transparent.enabled='0'

WAN protection mode remains active for incoming threat detection.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:20:59 +01:00
f4b9c910c5 feat(mitmproxy): Add WAN protection mode for incoming traffic inspection
Add WAF-like functionality to mitmproxy for protecting services exposed
to the internet. Incoming WAN traffic is redirected through mitmproxy
for threat detection before reaching backend services.

Features:
- WAN protection mode with nftables rules for incoming traffic
- Enhanced bot scanner detection with 50+ scanner signatures
- Behavioral detection for config/admin/backup/shell hunting
- CrowdSec integration with new scenarios for bot scanners
- LuCI interface for WAN protection configuration
- DPI mirror mode support (secondary feature)

New CrowdSec scenarios:
- secubox/mitmproxy-botscan: Detect automated reconnaissance
- secubox/mitmproxy-shell-hunter: Detect shell/backdoor hunting
- secubox/mitmproxy-config-hunter: Detect credential file hunting
- secubox/mitmproxy-suspicious-ua: Detect suspicious user agents

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 10:07:40 +01:00
b0cf6e2240 fix(ollama): Show start prompt when Ollama is not running
Instead of showing clickable model suggestions when Ollama is stopped,
display a helpful message prompting the user to start Ollama first.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 07:15:38 +01:00
ed7184f45f fix(dnsguard): Fix subshell issues in provider lookup methods
Replace pipe-to-while loops with grep/cut to avoid subshell variable
scope issues in method_status, method_get_providers, and method_set_provider.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 07:15:38 +01:00
72f51623fa feat: Add DNS Guard app and Ollama model suggestions
DNS Guard (luci-app-dnsguard):
- Privacy-focused DNS manager with KISS UI
- DNS provider feed: FDN, Quad9, Cloudflare, Mullvad, AdGuard, etc.
- Smart Config auto-detects fastest DNS for location
- Category filtering (privacy, security, fast, family, adblock)
- One-click provider switching with dnsmasq integration

Ollama:
- Add suggested models grid when no models installed
- Clickable cards to download directly
- Models: tinyllama, llama3.2, phi3, gemma2, qwen2.5, mistral, codellama

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 07:15:38 +01:00
5f85e76ac0 feat: Add DNS Guard app and Ollama model suggestions
DNS Guard (luci-secubox-dnsguard):
- Privacy-focused DNS manager with KISS UI
- DNS provider feed: FDN, Quad9, Cloudflare, Mullvad, AdGuard, etc.
- Smart Config auto-detects fastest DNS for location
- Category filtering (privacy, security, fast, family, adblock)
- One-click provider switching with dnsmasq integration

Ollama:
- Add suggested models grid when no models installed
- Clickable model cards to download directly
- Models: tinyllama, llama3.2, phi3, gemma2, qwen2.5, mistral, codellama

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 14:11:41 +01:00
41a870b4e7 fix(exposure): Use reserved ports with listening verification
- Change Gitea default port to 3001 (avoid AdGuard Home conflict)
- Add process_name and description to Gitea known service
- Use reserved port from config, verify if actually listening
- Add separate listening/running flags for better status reporting
- Reserved ports are tracked for dedup, dynamic detection fills gaps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 14:06:27 +01:00
f243002933 fix(haproxy): Detect actual listening port for running services
- Change AdGuard Home default port to 3003 (avoid Gitea conflict)
- Update config file path to /var/lib/adguardhome/AdGuardHome.yaml
- Add netstat-based port detection for running processes
- Actual listening port overrides default when service is running

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 14:00:28 +01:00
681382c7ff feat(haproxy): Add AdGuard Home detection and improve service discovery
- Add AdGuard Home to known services (port 3000, security category)
- Enhance _add_exposed_service to handle YAML config files
- Add process name detection and running status for known services
- Fix subshell issue in dynamic service detection (while loop)
- Add port deduplication between known and dynamic services
- Include description and process fields in service response

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 11:35:13 +01:00
906c3e8988 chore(feed): Update package feed with latest builds
Updated packages:
- luci-app-ollama: KISS UI rewrite
- luci-app-secubox-netdiag: Temperature monitoring and port mode controls
- secubox-core, secubox-p2p: Latest versions
- All other packages rebuilt with current SDK

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 09:50:14 +01:00
9435cc6282 feat(ollama,netdiag): KISS UI rewrite and thermal monitoring
Ollama:
- Complete KISS UI rewrite with simplified dashboard
- RPC declarations without expect clauses for reliability
- Service controls, model management, and chat interface

Network Diagnostics:
- Add temperature display with color-coded thresholds
- Add error collection and export functionality
- Add port mode switching (speed/duplex/EEE)
- Add collect_errors, get_port_modes, get_temperature RPC methods
- Add set_port_mode RPC method for port configuration
- Fix ACL permissions for new methods

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 09:41:30 +01:00
948b8776d8 fix(crowdsec-dashboard): Fix nav paths in all view files
Change nav paths from services/crowdsec to security/crowdsec in alerts,
bouncers, decisions, and settings views to match the new menu location.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 09:21:16 +01:00
497ea3c316 fix(webapp): Fix CrowdSec decisions data extraction
getDecisions() was looking for result.alerts but RPC returns
result.decisions - fixed to use correct property name.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 09:11:42 +01:00
6b364ab52a fix(crowdsec-dashboard): Fix alerts and countries display in overview
- Change RPCD to return alerts_raw and decisions_raw as JSON strings
- Add parseAlerts() to parse alerts_raw in JavaScript
- Fix countries and alerts now display correctly in overview

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 09:05:24 +01:00
5496ca1f3a fix(crowdsec-dashboard): Fix overview nav path and countries parsing
- Fix nav links to use correct path (security instead of services)
- Add parseCountries() to convert top_countries_raw JSON to object
- Fix geo data display in overview

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 09:01:30 +01:00
e14ef7fa00 refactor(mitmproxy): Move to Security menu
Move mitmproxy from Services to SecuBox → Security & Access menu
alongside CrowdSec for better organization.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:58:48 +01:00
dcc000c55d fix(wireguard-dashboard): Fix QR code generation
- Use SVG output instead of PNG (PNG disabled in OpenWrt qrencode)
- Fix endpoint port duplication when port already in endpoint string

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:56:25 +01:00
f0ac51ddd1 refactor(network-tweaks): Move to Network menu
Move Network Tweaks from Services to Network menu for better UX.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:41:53 +01:00
60ed796b5a fix(metablogizer): Fix require path and async hosting status load
- Fix qrcode require path (slash to dot notation)
- Load hosting status asynchronously to prevent XHR timeout
- Dashboard now loads instantly with sites, HAProxy/IP populate after

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:33:30 +01:00
6e247800a4 fix(metablogizer): Remove incorrect expect clauses from API declarations
The RPCD returns data directly without wrapping in a 'result' object,
but api.js was using expect: { result: {} } which caused empty data
in the UI (0 sites shown instead of 6).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:13:49 +01:00
163364843e feat(metablogizer): KISS UI redesign with backend status
- Replace overview.js with dashboard.js using standard cbi-* classes
- Add api.js module for RPC declarations
- Show port, runtime, backend_running status in sites table
- Add sync_config, discover_vhosts, import_vhost RPC methods
- Update ACL with new method permissions
- Menu: Sites -> Dashboard

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:06:22 +01:00
e07fec6cb4 feat(streamlit): Add instances management and Gitea integration
- Add Running Instances section with enable/disable/delete actions
- Add Instance form to create new instances on different ports
- Add Gitea clone functionality to pull apps from repositories
- Add Gitea configuration section in Settings page
- RPCD handler now supports:
  - get_gitea_config, save_gitea_config
  - gitea_clone, gitea_pull, gitea_list_repos
- API module exports all new Gitea methods
- Upload supports both .py files and .zip archives
- Instance status shown with colored indicators

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:27:24 +01:00
5317f37e7a refactor(streamlit): KISS UI redesign
Simplify LuCI interface from 5 tabs to 2:
- Dashboard: status, controls, apps list, upload (all-in-one)
- Settings: configuration options

Remove complex custom CSS, use standard LuCI styles.

Deleted: overview.js, apps.js, instances.js, logs.js
Added: dashboard.js (single-page dashboard)
Updated: settings.js (simplified form), menu.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:17:20 +01:00
280c6a08d9 fix(streamlit): Remove null text in app description display
When an app has no description, return empty string instead of null
to prevent "null" text from being rendered in the instances table.

Also: secubox-p2p bumped to v0.6.0-r3 with catalog fix.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:13:27 +01:00
f44d218b7d fix(catalog): Use original_backend when mitmproxy inspection enabled
When HAProxy inspection mode routes all vhosts through mitmproxy_inspector,
the catalog now uses the original_backend UCI property to correctly map
domains to their actual services.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:05:47 +01:00