SysManager is a local Windows desktop tool. It runs on your machine, uses elevated privileges for some features, and executes PowerShell scripts and native system utilities on your behalf. Because of this, the security of the app and its releases matters — thank you for helping keep it safe.
Security fixes are applied to the latest minor release only. If you're on an older build, the first step is usually to update.
| Version | Supported |
|---|---|
| 1.65.x | ✅ |
| < 1.65 | ❌ |
The supported line is always the newest minor on the releases page — if that page shows a newer minor than the table above, the newest one is what's supported and this table is simply behind. Report the issue anyway; being on a build newer than this table never means you are unsupported.
Please do not open a public GitHub issue for security problems. Public issues are visible to everyone and may put users at risk before a fix is available.
Use GitHub private vulnerability reporting: go to the Security tab and open a draft advisory. Only the maintainer sees it, you keep a thread to discuss the fix, and you are credited automatically when it is published.
A free GitHub account is required, because an advisory is the only channel this project has that is genuinely private — there is no published email, and asking you to send vulnerability details to an unencrypted inbox would be worse advice than asking you to sign up.
Please include:
- A short description of the issue and its impact.
- Steps to reproduce (proof-of-concept, screenshots, or a minimal script if applicable).
- SysManager version (visible in the About tab).
- Windows version and whether the app was running elevated.
- Any suggested mitigation, if you have one.
- Acknowledgement within 72 hours.
- Initial assessment within 7 days (is it reproducible, how severe, which versions are affected).
- Fix timeline depends on severity:
- Critical (RCE, privilege escalation, arbitrary file deletion triggered remotely): patch released as soon as possible, usually within 7 days.
- High (local privilege issues, data disclosure): 14 days.
- Medium / low: next scheduled minor release.
- Public disclosure happens only after a fix is available. The reporter is credited in the release notes unless they prefer to stay anonymous.
What the app can and cannot do by design:
- Read system information (WMI, CIM, registry).
- Run read-only disk checks (
chkdskwithout/f). - Run PowerShell scripts bundled with the app (Windows Update, SMART queries, etc.).
- Launch external CLIs:
winget, Ooklaspeedtest,tracert,ping. - Delete files in user-selected cleanup categories (Deep Cleanup tab).
- Empty the Recycle Bin.
- Clear per-browser cache, history, cookies, and sessions (Browser Cleaner tab) — only for categories the user explicitly selects. Cookies and sessions are marked sensitive and unticked by default so a clean never silently signs the user out; locked files (browser open) are skipped, and reparse points are never followed out of the browser's own folders.
- Download application updates from the official GitHub Releases API.
- Reading or exfiltrating saved passwords or any browser password store.
- The Deep Cleanup engine touching browser data — that engine never reads or deletes browser caches/cookies; only the dedicated Browser Cleaner tab does, and only with the explicit per-category consent described above.
- Touching the Windows registry for cleanup.
- Deleting game files, installed binaries, or any active driver folder. The
cleanup engine never touches
steamapps\commonor installed game/program executables; it does remove specific launcher cache and log subfolders that happen to live underProgram Files(e.g. Steamappcache/htmlcache/depotcache/shadercache, Riot/League logs) — but never the games themselves. - Deleting from the Large Files scan (in the Deep Cleanup tab) — it is intentionally read-only, even with admin rights.
- Sending telemetry or contacting any server other than the ones needed for an explicit user action (ping targets, speed-test hosts, GitHub Releases).
- Elevating silently — every admin action surfaces a banner first and
uses the standard
runasUAC prompt.
- PowerShell execution: Windows Update and SMART features invoke PowerShell. Scripts are bundled with the app, not downloaded at runtime. Administrator sessions isolate PowerShell runspaces in Windows PowerShell 5.1 child processes whose module discovery is restricted to canonical machine-owned locations under Program Files and System32, without changing the parent process environment. Per-user modules and optional module installation remain available only when the app runs without elevation.
- External CLI downloads: the Ookla speed-test CLI is downloaded from
install.speedtest.netthe first time it's used. If that URL changes, the feature fails safely rather than substituting an alternative. - Local diagnostic log: SysManager keeps 14 days of rolling log files in
%LocalAppData%\SysManager\logs. They never leave the machine on their own — there is no upload path. Your Windows user name is replaced with[user]on every line before it is written, including inside exception messages, so a log you choose to share for a bug report does not carry your account name. The replacement happens in the log sink rather than at each logging call, so a new code path cannot forget it. Paths outside your user profile, such asC:\Program Files\..., are recorded as-is. - Auto-update: new builds are downloaded from the official GitHub
Releases endpoint. The app does not auto-install without an explicit
click. Before applying, the downloaded binary's SHA256 is compared against
the
.sha256published with the release — that comparison is the integrity gate, and it is what catches a modified download. The binary is also inspected for an Authenticode signature: an unsigned build is accepted, because SysManager currently ships unsigned, while a signature that cannot be parsed is rejected. The publisher comparison is a single constant that is empty until a code-signing certificate exists, so no publisher is pinned yet: today a signed build is accepted on the strength of the SHA256 comparison alone. Once that constant is filled in, a present signature has to match the pinned publisher AND its certificate chain has to validate to a trusted root with online revocation, or the update is refused — the same policy already applied to the third-party Ookla CLI. Writing both halves now is what stops the check from quietly becoming a no-op the day signing is switched on: without the pin, merely carrying a signature would pass, and a binary signed by an attacker's own self-issued certificate would be accepted like a legitimate build. Note that Authenticode inspection reads the signer certificate; it does not by itself validate the file against the signature, which is why SHA256 remains the integrity gate rather than a fallback. The swap is then performed from within the downloaded executable itself (no intermediate script on disk) using a staged atomic file move, so an interrupted update cannot leave a half-written, unstartable binary. Separately, the build being replaced is copied aside first, so an update that succeeds into a version that does not work is also recoverable: the About tab offers "Go back to the previous version" whenever a retained copy exists. Exactly one generation is kept, in%LocalAppData%\SysManager\updates, and retaining it is best-effort — if it cannot be written the update still proceeds rather than failing. You can also download manually and verify the binary yourself. - Portable distribution model: the standard distribution is a portable,
self-contained
.exe(also published to winget as a portable package), which lives in a per-user, user-writable location. This means a process already running under your account could replace the executable on disk — a property inherent to any user-writable portable app, independent of the update flow. If you run SysManager elevated, only run a build you obtained from the official Releases page and verified. A machine-scope installed build underProgram Files(not user-writable) is planned alongside code signing once a certificate is available.
SysManager collects nothing. There is no telemetry, no analytics, no crash reporting service, no account, and no cloud component. Nothing about you, your machine, or your usage is transmitted anywhere — there is no server side to transmit it to. The application is a single portable executable that reads and writes only on the machine it runs on.
All of it stays on your PC, inside your own user profile. None of it is encrypted, because none of it is secret: you can open any of these files in a text editor, and you can delete any of them at any time without breaking the app.
| What | Where | Why it exists |
|---|---|---|
| Appearance and theme choice | %AppData%\SysManager |
So the app looks the same next launch |
| Dark-mode schedule | %AppData%\SysManager |
Your chosen on/off times |
| Speed-test history | %LocalAppData%\SysManager |
So you can compare results over time |
| Recent-activity list | %LocalAppData%\SysManager |
Counts and sizes of actions you performed — never file names |
| Settings-watchdog baseline | %LocalAppData%\SysManager |
A snapshot of the Windows settings you chose, to detect later drift |
| Resource history | %LocalAppData%\SysManager |
CPU / RAM / temperature samples, for the history graphs |
| Diagnostic log | %LocalAppData%\SysManager\logs |
14 days of rolling files, so a problem can be diagnosed |
| Downloaded updates | %LocalAppData%\SysManager\updates |
The build you downloaded, plus one previous version for rollback |
| Startup version-check on/off | %AppData%\SysManager |
The About-tab checkbox that controls the once-a-day version check |
| Your saved sets and choices | %LocalAppData%\SysManager |
Gaming profiles, volume presets, what closing the window does, the standby-cleaner choice, saved environment variables |
| State the app keeps to undo its own changes | %LocalAppData%\SysManager |
A performance snapshot to restore from, a ledger of the service startup types it changed, whether the last session crashed, cached app-icon lookups |
Every one of these sits inside your own user profile, opens in a text editor, and can be deleted without breaking the app. Two folders are involved only because Windows separates roaming settings from machine-local data; nothing is hidden in either.
Your Windows user name is replaced with [user] in every log line — including
inside error messages — so a log you choose to share does not carry your account
name with it.
Only for things you explicitly ask for, plus one optional check:
- Network diagnostics — ping, traceroute and speed test contact the servers you select, because that is the measurement.
- App updates — installing an application you chose downloads it through winget.
- App icons in the Bulk Installer — off by default. Only if you tick "Load app icons from the web" does it fetch them from Google's favicon service.
- Version check — at startup the app asks GitHub's public releases endpoint which release is newest, so it can tell you when a fix is available. Nothing about you or your PC is sent. It runs at most once a day, and the About tab has a checkbox that switches it off entirely; the manual Check for updates button still works either way.
Nothing else leaves your PC. There is no background phone-home.
The application talks to no third-party service beyond those listed above. The project's development infrastructure — GitHub, for source code, releases and discussions — is covered by GitHub's own privacy policy, which applies to you only if you visit the repository or download a release in a browser.
Privacy questions can be raised through GitHub Issues, or privately through the channel described under Reporting a vulnerability.
Every release on GitHub ships a versioned SysManager-v<version>.exe, a matching
SysManager-v<version>.exe.sha256, and a SysManager-v<version>.sbom.json
dependency inventory. There are two independent checks, and they answer
different questions.
Did the file arrive intact? Compare the hash (replace <version> with the
version you downloaded):
Get-FileHash .\SysManager-v<version>.exe -Algorithm SHA256
# Compare the output to the contents of the .sha256 file from the release page.Was the file built from this source? Every release is covered by a GitHub build attestation — a SLSA provenance statement signed during the build and recorded in the public Sigstore transparency log, binding that binary's digest to this repository, the release workflow, and the commit that produced it. Verify it with the GitHub CLI:
gh attestation verify .\SysManager-v<version>.exe --repo laurentiu021/SystemManagerThe attestation is the stronger claim. The .sha256 file is computed and published
from the same job and onto the same release as the binary it describes, so the two
share a single trust root — effective against transport corruption and against
local tampering with a cached copy, but not against a replaced release asset. The
attestation is signed by GitHub's infrastructure at build time and its subject
digest, source repository, workflow, and commit are recorded in an append-only
public log, so the binding between a binary and its origin cannot be rewritten
after publication. It does not, by itself, assert that the source was reviewed or
that the maintainer's account was not compromised — it proves origin, not intent.
The build is not currently code-signed, so Windows SmartScreen shows a warning on first launch; this is expected until a code-signing certificate is available. The README walks through what that dialog says and what to click, with hash verification as the precondition. The code signing policy states who may commit, who reviews, and who approves a release for signing.
- Dependencies are tracked via NuGet and kept current by Dependabot.
- CI builds and runs the unit test suite on every pull request. Integration tests (which access real OS APIs) run locally only.
- The release workflow builds the binary from source on a clean GitHub
Actions runner and publishes the
.exe, its SHA256 sum, and a CycloneDX SBOM together. - Every release carries a signed build-provenance attestation (see Verifying a release). The privileged token that produces it is scoped to the build job alone; the workflow's default permission is read-only.
- Each release ships a CycloneDX SBOM (
SysManager-v<version>.sbom.json) listing every NuGet package resolved for the publishedwin-x64build, with version, package URL, and hash, so the dependency set can be audited against a vulnerability feed without unpacking the single-file executable. It is a resolved-dependency inventory rather than a byte-level manifest: a handful of entries are RID-specific placeholders for other platforms or build-time-only transitives that carry no payload into the shipped binary. - All GitHub Actions used in the release pipeline are pinned to full commit
SHAs, and release builds are deterministic
(
ContinuousIntegrationBuild+Deterministic).
In scope:
- Arbitrary code execution or privilege escalation through the app.
- Path traversal or symlink attacks that let the cleanup engine delete files outside advertised categories.
- Credential or token exposure (shouldn't apply — the app stores neither).
- Update channel attacks (spoofed releases, signature bypass).
Out of scope:
- Social engineering that requires the user to deliberately override a safety prompt.
- Vulnerabilities in third-party binaries the user chooses to install (winget packages, PSWindowsUpdate, Ookla CLI).
- Denial of service caused by scanning huge folder trees (the UI stays responsive; scans are cancellable).
Thanks for reading, and thanks in advance for any responsible disclosure.