Skip to content

v2.0.0 β€” .NET 10 Upgrade & Security Hardening

Latest

Choose a tag to compare

@robgrame robgrame released this 24 Mar 22:27
· 2 commits to master since this release

πŸš€ What's New in v2.0.0

⬆️ .NET 10 LTS Upgrade

  • Upgraded all projects from .NET 9 to .NET 10.0 (Long Term Support β€” November 2028)
  • All NuGet packages aligned to .NET 10 versions
  • Target framework set to net10.0-windows for proper Windows platform support
  • Removed redundant packages (System.Text.Json, Microsoft.AspNetCore.SignalR 1.1.0)

πŸ”’ Security Fixes

  • Fixed JSON injection in EntraADHelper.SetExtensionAttributeValue() β€” replaced unsafe string interpolation with JsonObject
  • Fixed index out of bounds β€” replaced hardcoded index[9] with validated whitelist of extension attribute names (1–15)
  • Fixed OData filter injection in IntuneHelper β€” added EscapeODataFilterValue() for all 4 Graph API filter queries
  • Fixed URL parameter injection in EntraADHelper β€” added Uri.EscapeDataString() for device name URL parameters
  • Fixed reflection safety β€” extension attribute names validated against whitelist before property access
  • Fixed thread-unsafe token cache β€” added SemaphoreSlim with double-check locking pattern in AuthenticationHandler
  • Fixed resource disposal β€” DirectoryEntry from search results now properly disposed with using

🧹 Code Quality

  • Replaced Console.WriteLine with ILogger in library code
  • Fixed deprecated ConfigureHttpMessageHandlerBuilder β†’ ConfigureAdditionalHttpMessageHandlers
  • Added [SupportedOSPlatform("windows")] annotations (eliminates all CA1416 warnings)

πŸ§ͺ Testing

  • Added 28 unit tests covering: DN parsing, extension attribute validation, configuration defaults, notification settings
  • New test project: Nimbus.ExtensionAttributes.Tests with xUnit + Moq

πŸ“š Documentation

  • Moved documentation files to docs/ folder
  • Updated README with .NET 10 badges, correct build paths, and documentation links table
  • Completed truncated configuration example in README

🧹 Cleanup

  • Removed legacy empty folders (AD.Helper/, EntraAD.Helper/, ExtensionAttributes.Worker/, Intune.Helper/)
  • Added repository description and search topics for better discoverability