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.2.x | π’ Yes | Active release branch (Current: v1.2.1) |
| 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.2.1).
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: March 2026 (Updated for v1.2.1 release)
- Audited Target: RemoteLAN v1.2.1 (
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 | User-scoped %LocalAppData% JSON keyed by Machine GUIDs; recommend DPAPI encryption at rest. |
| Injection Vulnerabilities | π’ PASSED | Safe typed enum protocol routing; hardened ProcessStartInfo.ArgumentList execution. |
| Authentication & AuthZ | π’ PASSED | CSPRNG PIN generation, constant-time validation (FixedTimeEquals), IP lockout protection. |
| 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 | Minimal verified dependency tree on .NET 8; zero vulnerable packages. |
- Scan Result: π’ PASSED
- Automated regex and static analysis detected zero hardcoded secrets, passwords, credentials, or API keys in application sources and test suites.
- All session codes and security tokens are generated dynamically at runtime using cryptographically secure random number generators (
System.Security.Cryptography.RandomNumberGenerator).
- Scan Result: π’ PASSED
- Command Injection:
SystemPowerManagerexecutes Windows system commands (shutdown.exe) for remote Lock/Sleep/Restart/Shutdown.- Hardening Applied: Replaced string-interpolated arguments with structured
ProcessStartInfo.ArgumentList(/r,/s,/t,/f,/c), preventing argument injection or delimiter breakout. - Network Protocol Boundary: Incoming wire commands (
PowerActionMessage) carry only a strongly typed 1-byte enum (PowerActionType), preventing arbitrary command delivery over the network.
- Hardening Applied: Replaced string-interpolated arguments with structured
- 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:
- Hardening Applied: Candidate PINs and unattended passwords in
PinManager.ValidatePinare verified usingCryptographicOperations.FixedTimeEqualsto prevent side-channel timing analysis.
- Hardening Applied: 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
%LocalAppData%\RemoteLAN\settings.json, partitioned and mapped by persistent Machine GUIDs. - While access is restricted by Windows operating system NTFS file permissions to the current user and Administrators:
- Recommendation: Encrypt stored passwords at rest using Windows Data Protection API (DPAPI:
ProtectedData.ProtectwithDataProtectionScope.CurrentUser) to protect credentials against unauthorized tools running under the same user context.
- Recommendation: Encrypt stored passwords at rest using Windows Data Protection API (DPAPI:
- Scan Result: π’ PASSED
- Evaluated third-party packages:
System.Drawing.Common(10.0.12)Vortice.Direct3D11(3.8.3)Vortice.DXGI(3.8.3)
- Dependencies are up to date, minimal, and run against .NET 8 LTS.
- Full test suite passed (89 unit, integration, and regression tests).
- All security hardening modifications tested and verified.