Patch a cluster, one node at a time.
Two failover-cluster nodes patched in sequence, with the role online throughout. Two domain controllers patched one at a time, both healthy afterwards.
Nimstead Assure
Nimstead Assure finds what's exposed, fixes it safely, and gives your auditor proof they can check themselves.
Previewv0.7.2Source available · FSLSelf-hostedLinux and Windows
Fix first
Recommended upgrades, most important first.
A weakness matters more when it opens the next machine. Assure now distinguishes a confirmed sign-in route from a connection it cannot prove.
A confirmed cross-host route was proven in a real domain lab. The unverified case has unit tests; its real-host proof is still outstanding. Assure observes these connections. It does not probe them.
Read the release and its evidenceConfirmed routeAll three pieces of evidence present
No matching signed-in account? Unverified. A possible route stays a possible route.
Two failover-cluster nodes patched in sequence, with the role online throughout. Two domain controllers patched one at a time, both healthy afterwards.
Agentless Windows scans over PowerShell remoting, proven across hosts. Active Directory discovery finds machines without an agent. Fixes still need one.
SharePoint binaries and Exchange management tools checked against real installs. Windows coverage now includes 105 curated third-party apps; other apps remain inventory only.
Already running Assure? Use deploy/update.sh. No database migration from v0.7.1. Changes since v0.6
01 — Detect
An agent on each machine reports the installed packages every 6 hours. Assure matches them against advisories using each distro's own version rules and source-package names, so backported fixes aren't flagged. If a version can't be read exactly, there's no finding. Never a fuzzy match.
Every check gets a verdict and a confidence. The report says what it couldn't determine instead of calling a machine clean. Attack paths link weaknesses on a host and, where the evidence supports it, across hosts. Each chain names a fix that breaks it.
49real cases, exact agreement with the OSV API
10version comparators, from dpkg to NuGet
0fuzzy matches or banner guesses
Run the server · Docker Compose v2
$ git clone --branch v0.7.2 https://github.com/Nimstead/assure.git && cd assure $ cp .env.example .env # Set a long random POSTGRES_PASSWORD in .env. # Set NIMSTEAD_UPDATE_CHANNEL=preview to receive preview updates. $ docker compose up -d Open http://localhost:8000 and add your first machine.
Early access: start on test machines. There is no stable release yet. HTTPS, enrolment, upgrades and running without Docker: the install guide.
Install the agent · Linux
$ export NIMSTEAD_TOKEN=<TOKEN> $ curl -fsSL --proto '=https' https://<server>/install.sh \ | sudo --preserve-env=NIMSTEAD_TOKEN sh $ unset NIMSTEAD_TOKEN Nimstead agent installed; reporting every 6 hours.
The token goes in an environment variable because other users and sudo's log can read anything on the command line.
Windows · Administrator PowerShell
> $env:NIMSTEAD_TOKEN = "<TOKEN>" > irm https://<server>/install.ps1 | iex
02 — Prioritise
Assure ranks by what's being exploited, not by how scary a score looks. The home screen shows upgrades, not a wall of CVEs, and every ranking comes with its reasons in plain words.
Exploited in the wild (CISA KEV)
4.2% chance of exploitation in 30 days (EPSS)
Critical severity (CVSS 9.8)
Internet-facing asset
No fix yet — mitigate or accept
03 — Fix safely
Three levels of trust. Approve is the default. Switching back to Suggest cancels every approved job, which makes it your kill switch. Each machine must also opt in locally before anything can change on it. The agent checks for eligible jobs every 15 minutes. Set a maintenance window to control when approved changes run; Windows workstations can defer a restart until a deadline.
Real run — Debian 13
Assure upgraded perl in a Debian 13 sandbox. The upgrade itself worked. The canary service didn't. Assure saw the failed health check, put the old package back from the copy it saved first, and checked the service again.
Unedited job steps from the sandbox run. The same run went on to produce an evidence pack that met all six controls Assure mapped at the time (nine today): RESULT: PASS.
✓ Versions restoredrolled_back · trigger: service health check
04 — Prove
Every detection, fix and decision goes into a hash-chained ledger, with signed checkpoints kept outside the database. Export a pack for the last 30, 90 or 365 days. It's signed with Ed25519, and your auditor checks it offline, with no access to Nimstead. The verifier isn't in the pack, because whoever hands over a pack could have changed anything in it. Your auditor gets it from your server.
In the pack
pack.json controls, timings, the ledgerpack.sig Ed25519 signaturepublic_key.pem to check it withREADME.txt how to check itYour auditor, offline
# get verify.py from /api/evidence/verify.py and # check its SHA-256 at /api/evidence/public-key $ pip install cryptography $ python verify.py pack.json pack.sig public_key.pem \ --expect-fingerprint <FINGERPRINT> OK: signature valid, ledger chain intact
Time to fix, measured from the ledger
These are defaults, and you can change each one in Settings. A finding keeps the deadline in force when it was detected, so relaxing a deadline later can't turn an old miss into a pass.
| Framework | Control | What the pack shows |
|---|---|---|
| UK Cyber Essentials | Security update management | High and critical updates (CVSS 7 or above, or known exploited) applied within 14 days |
| ISO/IEC 27001:2022 | A.8.8 | Management of technical vulnerabilities |
| NIST SP 800-53 Rev. 5 | RA-5 | Vulnerability monitoring and scanning |
| NIST SP 800-53 Rev. 5 | SI-2 | Flaw remediation within organisation-defined time periods |
| PCI DSS v4.0.1 | 6.3.3 | Critical security patches installed within one month of release |
| SOC 2 (TSC 2017) | CC7.1 | Detection and monitoring identify newly discovered vulnerabilities |
| SOC 2 (TSC 2017) | CC8.1 | Changes are authorised, tested and approved before implementation |
| NIS2 Directive | Art. 21(2)(e) | Vulnerability handling in network and information systems maintenance |
| CIS Controls v8.1 | 7.3 / 7.4 | Automated OS and application patch management |
Each control is reported as met, not met or no activity. A deadline control reports no activity when nothing was fixed and nothing was overdue in the period.
05 — Where it runs
The verified rows have run on real or virtual machines. Partial rows separate what was observed from what remains unproven. Read the full evidence and known gaps.
| Platform | Fixes with | What's been proven | Status |
|---|---|---|---|
| Debian 13 | apt | 164 packages, 274 findings. A fix that broke a service rolled back on its own. | ✓ Verified |
| Ubuntu 24.04 | apt | 523 packages, 369 findings, end-to-end pass. | ✓ Verified |
| AlmaLinux 9 | dnf | 207 packages, 50 findings, end-to-end pass. | ✓ Verified |
| Alpine 3.21 | apk | 32 packages, 45 findings, end-to-end pass. | ✓ Verified |
| openSUSE Leap 16.0 | zypper + snapper | A broken fix undone with snapper, including a file the install scripts rewrote. | ✓ Verified |
| Windows Server 2025 | Windows Update by KB, DISM rollback | Fix and rollback proven end to end, across reboots. | ✓ Verified |
| Windows 11 | Windows Update by KB, DISM rollback | Fix and rollback proven end to end, across reboots and a power cut mid-rollback. Every package the update brings is checked before install. | ✓ Verified |
| Windows 10 LTSC 2021 | Windows Update by KB, DISM rollback | Detected in English and German; rollback proven. Applying a fix there isn't proven yet. | Partial proof |
| Windows Server 2016 | Servicing stack, then cumulative update | Both steps installed on a real host. The evaluation install was offered no newer cumulative, so the latest build was not reached. | Partial proof |
| Windows Server 2019 | Windows Update by KB | Supported update path; applying it has not been proven on a real host. | Partial proof |
| Windows Server 2022 | Windows Update by KB | Detected. An old install is stepped through the update Windows Update offers; the fix itself isn't proven yet. | Partial proof |
06 — Security
Found a vulnerability? Email security@nimstead.systems. Read the disclosure policy.
Nimstead
Running it, or thinking about it? Tell us about your estate and what you need: help deploying, support, or a licence question.
Bugs and feature requests go in GitHub issues. What we'll do with this form: reply from hello@nimstead.systems. What we won't: add you to a newsletter or share your details. Privacy