We take the security of RemoteLAN seriously. This document outlines our security practices, recent audit findings, and instructions on reporting vulnerabilities responsibly.
| Version | Supported | Notes |
|---|---|---|
| 1.4.x | π’ Yes | Active release branch (Current: v1.4.0) |
| 1.3.x | π΄ No | Superseded by v1.4.x |
| 1.2.x | π΄ No | Superseded by v1.3.x |
| 1.1.x | π΄ No | Superseded by v1.2.x |
| 1.0.x | π΄ No | Superseded by v1.1.x |
If you discover a security vulnerability in RemoteLAN, please do not open a public issue. Instead, report it privately to the maintainers via:
- GitHub Security Advisories: Submit a private advisory report directly on the repository.
- Email: Send vulnerability reports directly to the maintainer team.
Please include:
- A description of the issue and potential impact.
- Step-by-step reproduction steps or proof of concept.
- Affected versions (e.g., v1.4.0).
We will acknowledge receipt of your report within 48 hours, investigate the issue promptly, and release a patch in accordance with semantic versioning.
- Audit Date: September 2026 (Updated for v1.4.0 release)
- Audited Target: RemoteLAN v1.4.0 (
src/RemoteLAN,src/RemoteLAN.Protocol,tests/RemoteLAN.Tests) - Scope: Full repository security sweep (Secrets, Injection, Authentication/Authorization, Privilege Management, Supply Chain).
| Category | Status | Notes |
|---|---|---|
| Secrets & Keys | π’ PASSED | Zero hardcoded secrets, private keys, or API tokens in codebase. |
| Credential Storage | π‘ WARNING | JSON configuration stored at %ProgramData%\RemoteLAN\settings.json; recommend DPAPI encryption at rest. |
| Injection Vulnerabilities | π’ PASSED | Safe typed enum protocol routing; hardened structured ProcessStartInfo.ArgumentList execution in SystemPowerManager and StartupHelper. |
| Authentication & AuthZ | π’ PASSED | CSPRNG PIN generation, constant-time validation (FixedTimeEquals), IP lockout rate limiting. |
| Privilege Impersonation | π’ PASSED | Strict RAII token impersonation (ImpersonationScope) with guaranteed RevertToSelf(). |
| Network & DoS Defense | π’ PASSED | Enforced framing boundaries (MaxPayloadSize 20MB limit) preventing buffer exhaustion. |
| Dependencies & Supply Chain | π’ PASSED | Verified with dotnet list package --vulnerable; zero vulnerable packages across entire solution. |
- Scan Result: π’ PASSED
- Automated regex and static analysis detected zero hardcoded secrets, passwords, credentials, or API keys in application sources, configuration files, and test suites.
- All session codes and security tokens are generated dynamically at runtime using cryptographically secure random number generators (
System.Security.Cryptography.RandomNumberGenerator). - Sensitive file patterns (
.env,.env.*,settings.json,agent.id,*.id) are properly enforced in.gitignore.
- Scan Result: π’ PASSED
- Command Injection:
SystemPowerManagerexecutes Windows system commands (shutdown.exe) for remote Lock/Sleep/Restart/Shutdown using structuredProcessStartInfo.ArgumentList(/r,/s,/t,/f,/c), preventing argument injection or delimiter breakout.StartupHelpermanages Windows Task Scheduler and PowerShell configuration: hardened all process executions (schtasks.exe,powershell.exe) with structuredProcessStartInfo.ArgumentListto guarantee argument boundary safety without shell concatenation vulnerabilities.- Network Protocol Boundary: Incoming wire commands (
PowerActionMessage) carry only a strongly typed 1-byte enum (PowerActionType), preventing arbitrary command delivery over the network.
- SQL Injection: Not applicable (no SQL database used; settings are managed via JSON files).
- Cross-Site Scripting (XSS): Not applicable (native WPF desktop client rendering Direct3D/WPF visuals, no web views or
innerHTMLevaluation).
- Scan Result: π’ PASSED
- Cryptographic Randomness: Temporary session PINs are generated using
RandomNumberGenerator.GetInt32across an alphanumeric alphabet (23456789ABCDEFGHJKLMNPQRSTUVWXYZ), avoiding ambiguous characters (0, 1, I, O). - Timing Attack Prevention:
- Candidate PINs and unattended passwords in
PinManager.ValidatePinare verified usingCryptographicOperations.FixedTimeEqualsto prevent side-channel timing analysis.
- Candidate PINs and unattended passwords in
- Brute-Force & Rate Limiting:
AgentServerandSettingsManagerimplement automatic IP lockout: after 5 consecutive failed authentication attempts (configurable), the offending client IP is temporarily locked out for 10 minutes (configurable).
- Session Lifecycle:
- Sessions are strictly scoped using incrementing generation IDs (
_sessionGeneration). Disconnection immediately revokes session privileges and resets hardware input queues.
- Sessions are strictly scoped using incrementing generation IDs (
- Machine Identity & Dynamic IP Defense:
- Agents generate and persist a persistent cryptographically unique GUID (
agent.id). Controllers deduplicate and identify hosts by machine identity rather than transient network IPs, preventing host spoofing and multi-NIC crosstalk. - Multi-identifier credential mapping resolves saved credentials across
MachineId,MachineName, andIpAddresscross-referenced throughDeviceHistory, ensuring credentials cannot be misattributed when DHCP leases change.
- Agents generate and persist a persistent cryptographically unique GUID (
- Scan Result: π’ PASSED
- RemoteLAN interacts with Winlogon desktops to provide remote assistance during lock screens and UAC prompts.
- RAII Protection:
DesktopManager.ImpersonationScopewraps all Win32ImpersonateLoggedOnUseroperations inIDisposablescopes with guaranteedRevertToSelf()infinallyblocks. - All opened process, token, and desktop handles (
OpenProcessToken,DuplicateTokenEx,OpenDesktop,OpenInputDesktop) are explicitly closed in dedicatedfinallyblocks (CloseHandle,CloseDesktop). - Lock Screen Keystroke Safety:
DesktopManager.UnlockWithPassworduses non-destructive lock-screen wake (nativeSendSAS(false)and navigation keys) without emitting destructive cancellation keys (VK_ESCAPE) that disrupt credential providers.- Normalizes keystroke entry state (detects and disables active CapsLock via
NativeMethods.GetKeyState) prior to sending unlock sequences, preventing password corruption over the Winlogon boundary.
- Scan Result: π’ PASSED
NetworkFrameReadervalidates incoming length headers: any frame exceedingProtocolConstants.MaxPayloadSize(20MB) or indicating negative length is rejected immediately withInvalidDataException, dropping the connection and preventing memory exhaustion.
- Scan Result: π‘ WARNING (Future Hardening Recommended)
- Configuration and credentials (unattended access password and saved remote device passwords) are stored in JSON at
%ProgramData%\RemoteLAN\settings.json, partitioned and mapped by persistent Machine GUIDs. - While the directory location allows seamless background operation across both pre-logon (SYSTEM) and user interactive sessions:
- Recommendation: Encrypt stored passwords at rest using Windows Data Protection API (DPAPI:
ProtectedData.Protect) to safeguard credentials against unauthorized local tools running on the workstation.
- Recommendation: Encrypt stored passwords at rest using Windows Data Protection API (DPAPI:
- Scan Result: π’ PASSED
- Evaluated third-party packages via
dotnet list package --vulnerable:System.Drawing.Common(10.0.12)Vortice.Direct3D11(3.8.3)Vortice.DXGI(3.8.3)
- Dependencies have zero reported vulnerabilities and run against .NET 8 LTS.
- Full test suite passed (111 unit, integration, and regression tests).
- All security hardening modifications tested and verified.