Repository navigation
Releases: 0x78654C/CIARELiveShareAPI
Releases · 0x78654C/CIARELiveShareAPI
Release list
CIARELiveShareAPI v2.0.0
- Caret system integration: Enables CIARE clients to clear departed users’ remote carets and name
labels, preventing stale participant indicators in the editor. - Disconnect notifications: Added UserDisconnected(connectionId) for both normal disconnects and
unexpected connection loss. - Session isolation: Disconnect notifications reach only participants in the affected session.
- Regression coverage: Added checks for disconnects, reconnection, notification routing, and session
cleanup.
What's Changed
Full Changelog: v1.0.4...v2.0.0
CIARELiveShareAPI v1.0.4
Release Notes — v1.0.4
Security Hardening Release
This release addresses multiple security vulnerabilities across the API server and test client.
🔒 Critical Fixes
- Thread-safety: Replaced non-thread-safe
List<string>andDictionary<string, string>inGlobalVariableswithConcurrentDictionaryto eliminate race conditions and potential server crashes under concurrent SignalR connections. - Memory exhaustion protection: Added session limits (max 10 connections per session, max 1000 active sessions) to prevent unbounded memory growth from malicious or leaked connections.
- Buffer size reduction: Reduced SignalR
MaximumReceiveMessageSizefrom 100 MB to 5 MB and transport/application buffers from 100 MB to 10 MB, mitigating denial-of-service via oversized messages.
🛡️ Cryptography Improvements (TestAPI)
- Modern AES API: Replaced obsolete
RijndaelManagedwithAes.Create(). - Stronger key derivation: Increased PBKDF2 iterations from 300 to 600,000 and switched hash algorithm from SHA-1 to SHA-256.
- Random salt: Each encryption now generates a unique 16-byte random salt (previously hardcoded).
- Full password usage: Removed
Substring(2, 10)truncation — the entire password is now used for key derivation. - MAC-then-decrypt:
Decrypt()now verifies the HMAC using constant-time comparison before decryption, preventing padding oracle attacks. - Modern RNG: Replaced obsolete
RNGCryptoServiceProviderwithRandomNumberGeneratorin key generation.
🧹 Maintenance
- Removed unused package: Removed
Microsoft.AspNet.SignalR.Core 2.4.3(legacy .NET Framework package incompatible with .NET 8). - Framework update: Updated TestAPI target framework from
net6.0-windows(end-of-life) tonet8.0-windows. - Error logging: Replaced silent
catch { // ignored }blocks in the SignalR hub with structuredILoggererror logging. - Input validation: Added length limits on
sessionId,code, andpositionparameters in the hub to reject malformed input.
⚠️ Breaking Changes
- Encryption format: The updated
AESEncryptionclass produces a new payload format (includessaltfield). Data encrypted with v1.0.3 cannot be decrypted by v1.0.4 and vice versa. Since encryption is used for live-share transit only, no data migration is needed — both peers must use the same version. - Message size limit: Clients sending messages larger than 5 MB will now be rejected. Adjust
MaximumReceiveMessageSizeinProgram.csif larger payloads are required.
📋 Remaining Recommendations
The following were identified but not addressed in this release as they require architectural decisions:
- Authentication/Authorization — No
[Authorize]or auth middleware is configured. Consider adding API key or token-based authentication. - Rate limiting — No request throttling is in place. Consider ASP.NET Core's built-in rate limiting middleware.
- CORS policy — No explicit CORS configuration. Add a policy appropriate for your deployment.