Skip to content

v1.11.6#412

Merged
tvancott42 merged 4 commits intomainfrom
dev
Mar 6, 2026
Merged

v1.11.6#412
tvancott42 merged 4 commits intomainfrom
dev

Conversation

@tvancott42
Copy link
Collaborator

@tvancott42 tvancott42 commented Mar 6, 2026

Summary

  • Media and Gaming network purpose types - Networks like "Entertainment", "Streaming", and "Theater" are now auto-classified as Media instead of IoT, eliminating false-positive isolation alerts. Gaming networks get their own classification with Home-level trust. (Add Media and Gaming network purpose types #411)
  • Fix device VLAN placement for Media and Gaming - Streaming devices, smart TVs, and media players on a Media network are now correctly placed (no audit finding). Game consoles on a Gaming network are also correctly placed. Security devices (smart locks, cameras) are NOT accepted on Media since Guest can access it. (Fix device VLAN placement for Media and Gaming networks #413)
  • Fix legacy firewall rule mapping regression - "Allow Established/Related" and "Drop Invalid State" rules no longer eclipse real inter-VLAN block rules in the firewall evaluator, fixing false missing-isolation findings on legacy firmware. (Fix legacy firewall rule mapping regression from #407 #410)
  • Fix alert severity inflation, schedule resilience, and add source links - System-category audit issues no longer inflate critical counts in alerts. Schedule DB errors no longer block alert delivery. Alert notifications now include direct links to the relevant page. (Fix alert severity inflation, schedule resilience, and add source links #409)
  • Media included in DNS and routing checks - Media networks are now checked for shared DNS servers with corporate and for routing being enabled, same as IoT and Guest.
  • Cleanup - Removed dead empty word boundary arrays for IoT and Home patterns. Fixed AlertHistoryEntry.SourceUrl doc comment.

…ks (#409)

* Fix alert severity inflation, schedule resilience, and add source links

- Exclude system-category issues from audit.completed severity counts
  so fingerprint DB unavailability doesn't inflate to Error severity
- Isolate DB update failures in ScheduleService so a successful task
  isn't mislabeled as failed when UpdateRunStatusAsync throws
- Reconnect to UniFi console before scheduled audits to prevent
  stale session failures on fingerprint cache refresh
- Enrich schedule summary with finding counts (e.g., "Score: 100 -
  0 critical, 3 recommended")
- Add SourceUrl property to AlertEvent and AlertHistoryEntry with
  fragment-based deep links (e.g., /speedtest#result-123, /audit)
- Render View links in Active Alerts, Acknowledged, and History tabs
- Include SourceUrl in all notification channels (ntfy, Discord,
  Teams, Slack, Email, Webhook)

* Use tab query params for data usage and schedule source links

Data usage alerts link to /alerts?tab=data-usage and schedule alerts
link to /alerts?tab=schedule instead of bare /alerts.

* Render source URL as plain text in email template

Relative paths like /audit are broken as <a href> in email clients
since there's no base URL context. Render as plain text instead.

* Resolve SourceUrl to absolute URLs for notification channels

Use the same hostname priority as the canonical redirect in Program.cs
(REVERSE_PROXIED_HOST_NAME > HOST_NAME > HOST_IP) to build absolute
URLs in AlertProcessingService. Email template restored to clickable
"View in app" link now that URLs are absolute.

* Fall back to auto-detected IP for alert source URLs

HOST_IP is only set if the user configures it. Use
DetectLocalIpFromInterfaces() as the final fallback so source
URLs are always absolute when possible.

* Fix delivery channels receiving relative instead of absolute source URLs

Delivery channels were using alertEvent.SourceUrl (the original relative
path like "/audit") instead of the resolved absolute URL from
historyEntry.SourceUrl. Uses record with-expression to pass the resolved
URL to DeliverAsync.
* Fix legacy firewall rule mapping regression from #407 (#251)

PR #407 added "ANY" matching targets for empty source/dest on legacy
rules, which caused infrastructure rules like "Allow Established/Related"
and "Drop Invalid State" to eclipse the real inter-VLAN block rule.

- Guard "ANY" fallback with isStateless check so stateful rules get null
  matching targets (invisible to network-pair evaluator)
- Fix evaluator to skip non-NEW block rules when forNewConnections=true
- Fix CheckForProblematicAllowRules to use forNewConnections=true
- Skip non-NEW allow rules in DetectPermissiveRules
- Check BlocksNewConnections in VlanAnalyzer.IsIsolatedViaFirewall
- Add 17 new tests covering legacy infrastructure rules and integration

* Add comprehensive rule engine tests for legacy RFC1918 block posture

Multi-network integration test verifying the full evaluation chain:
infrastructure rules (EST/REL, Drop Invalid) invisible, RFC1918 block
satisfies isolation for all pairs, and DetectPermissiveRules doesn't
flag infrastructure rules as permissive ANY->ANY.
Media networks (entertainment, streaming, theater, A/V) were previously
classified as IoT, causing false-positive IsolationBypassed criticals
when intentional allow rules exist (e.g., "Allow Guest to Media").

Media is semi-trusted: peers with IoT (no isolation between them),
accessible from Guest, but cannot initiate to trusted networks
(Corporate, Home, Gaming, Server).

Gaming networks (consoles, Xbox, PlayStation) were previously classified
as Home. Now a distinct type with the same trust level as Home -
including UPnP support.
* Accept Media and Gaming networks for device VLAN placement

Streaming devices, smart TVs, media players on a Media network and
game consoles on a Gaming network are now correctly placed (no audit
finding). Also remove dead IoT/Home word boundary arrays and fix
AlertHistoryEntry.SourceUrl doc comment.

* Only accept entertainment devices on Media network

Media networks allow Guest access, so security devices (smart locks,
cameras, hubs) should NOT be on Media. Only entertainment devices
(streaming, TVs, media players, speakers, consoles) are correctly
placed there.

* Include Media in DNS shared servers and routing checks

Media is semi-trusted (Guest can access it), so it should be checked
for shared DNS servers with corporate and for routing being enabled,
same as IoT and Guest networks.
@tvancott42 tvancott42 merged commit a293b6f into main Mar 6, 2026
1 check passed
@tvancott42 tvancott42 changed the title v1.11.5 v1.11.6 Mar 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant