// threat brief
Hermes Agent's bundled MCP catalog pinned a branch instead of a commit: if the upstream repo were hijacked, installing would run someone else's code
- CVSS
- 9.0 CRITICAL
- CISA KEV
- Not listed
- Weakness
- CWE-494
- Topics
- Supply chain · AI security
Human review 2026-09-24Command tests: none yetReproduced: not yetVerification record ↓
Hermes Agent's MCP catalog installed its n8n bridge from a movable branch; if that upstream repo were hijacked, installs would run its code.
| Who is affected | Users who installed or reinstalled the n8n bridge entry from the bundled catalog on Hermes Agent 0.18.2 up to (not including) 0.19.0 (calendar versions 2026.7.7.2 to before 2026.7.20). Builds from late May 2026 that predate 0.18.2 may have the same issue, but the official range does not cover them; this is unconfirmed. |
|---|---|
| What happens | Only if the upstream repository were actually controlled by an attacker: installing the n8n entry would then run arbitrary code on your machine with your permissions. No source says the upstream was ever compromised. |
| What to do now | Upgrade to Hermes Agent 0.19.0 (2026.7.20) or later, check whether the n8n bridge is installed, and if so consider switching to n8n-official or removing it.View evidence(4)
|
| Affected versions | Official range: 0.18.2 up to (not including) 0.19.0 (calendar versions 2026.7.7.2 up to, not including, 2026.7.20). Earlier builds that shipped the catalog from 2026-05-26 onward may also be affected (unconfirmed).View evidence(4)
|
| Fixed versions | 0.19.0 (2026.7.20) or laterView evidence(3)
|
| CVSS vector | Show full vectorCVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H |
| Timeline |
|
| CISA KEV | Not listed(Not being in KEV does not mean it has not been exploited)View evidence(3)
|
Blue team playbook
Check, fix / mitigate, respond, harden. Matching the affected versions does not mean you were compromised, and a check that finds nothing does not prove you are safe; each item says what it can and cannot show. Tagged steps point to where the attack flow below can be stopped.
- 01Check whether the n8n bridge is installed
Hermes stores MCP server settings under mcp_servers in ~/.hermes/config.yaml; the interactive hermes mcp picker also shows each entry's status (available, enabled, installed (disabled)). If you never installed the n8n bridge, this issue does not apply to you.
Read-only checkgrep -n -i 'n8n' ~/.hermes/config.yaml - 02Check which Hermes version you installed it with
The official affected range is 0.18.2 up to (not including) 0.19.0. If you installed on a version from late May 2026 but before 0.18.2, you may have received the same unpinned entry (unconfirmed). No indicators of compromise (IoCs) have been published, because no compromise is known.
- 01Upgrade to 0.19.0 (2026.7.20) or later
After the fix, the n8n entry uses a fixed commit SHA and a new test enforces exact pins across all catalog manifests. Note: upgrading Hermes does not replace an n8n bridge that is already installed.
- 02Switch to n8n-official or remove the old bridge
The n8n bridge entry was retired from the catalog on 2026-09-19 and can no longer be reinstalled from it. The official docs point to the newer n8n-official entry, which connects over HTTP with OAuth and needs no local bridge. Uninstall or disable it in the hermes mcp picker, or delete it from config.yaml. This is PlainCVE's suggestion, not official guidance for this CVE.
- 01Rotate the n8n API key as a precaution
For extra assurance, rotate the n8n API key stored in ~/.hermes/.env. This is a precautionary suggestion from PlainCVE and does not mean the upstream was compromised; no source says it was.
- 01Read MCP manifests before installing
The official docs warn that installing a catalog entry runs whatever the manifest specifies. Before installing, look at which repository source: points to and which commands install.bootstrap: runs.
- 02Limit what local MCP servers receive
Use per-server tool filtering; stdio servers receive only the environment variables you explicitly configure plus a safe baseline, so don't hand them more.
- 03Pin your own dependencies immutably too
Copy the practice the fix adopted: full SHAs for git dependencies, exact versions for package launchers (uvx, npx and so on), an automated test to enforce it, and a roughly two-week wait before pinning new code (a cooldown).
Full remediation steps and notes
- Upgrading does not clean out an old n8n bridge. Upgrading to 0.19.0 (2026.7.20) or later fixes the catalog itself, but an n8n bridge that is already installed is not replaced, because catalog entries never auto-update.
- The n8n bridge can no longer be reinstalled from the catalog. It was retired on 2026-09-19 (commit 8d4abc3 gives no security reason). Existing installs keep their configuration. To keep using n8n, the official docs point to
n8n-official, which connects over HTTP with OAuth and needs no local bridge. - Where things live. MCP settings are under
mcp_serversin~/.hermes/config.yaml; credentials are in~/.hermes/.env. - No official workaround or indicators of compromise. No compromise is known and no source published any IoCs. The check, switch and key rotation steps above are PlainCVE’s suggestions, not official Nous Research guidance.
Attack flow
Read left to right: this is the order the attack happens in. A blue shield means the step can be stopped; the earlier, the better. Click an icon for details.
- Attacker
(Hypothetical) An attacker takes control of the upstream repository
The n8n entry installs from the third-party repository CyberSamuraiX/hermes-n8n-mcp. This is the precondition for exploitation; no source says it has actually happened.
- Attacker
Pushes a malicious change to the main branch
A branch name works like a bookmark that can be moved; once a new commit is pushed, "main" points at the new code.
Defense: Pin a full 40-character commit SHA instead: a SHA always refers to one reviewed snapshot and cannot be moved upstream.
- Your system
The user installs the n8n catalog entry on an affected version
When hermes mcp install runs, Hermes fetches code according to ref: main in the manifest. Catalog entries are never auto-updated, so the risk arises at install or reinstall time (PlainCVE's inference).
Defense: Upgrade to 0.19.0 (2026.7.20) or later, where the catalog uses a fixed SHA and an automated test enforces exact pins for every entry.
- Your system
Hermes clones the branch and runs its bootstrap commands
For example, creating a Python virtual environment and installing packages. Whatever is on the upstream branch at that moment runs, with no integrity check.
Defense: Read the manifest's source: and install.bootstrap: before installing (advice from the official docs).
- Your system
The bridge runs locally with the user's permissions
A local MCP server is an ordinary process on the machine; if its code were swapped, it could do anything the user can do.
Defense: Pass stdio servers only the environment variables they need; if in doubt, rotate the n8n API key stored in ~/.hermes/.env.
Who is affected
| Condition | Affected? |
|---|---|
| Hermes Agent 0.18.2 up to (not including) 0.19.0 (calendar 2026.7.7.2 up to, not including, 2026.7.20), and the n8n bridge entry installed or reinstalled from the catalog | Affected (official range) |
| A catalog-bearing version from 2026-05-26 onward but before 0.18.2, with the n8n entry installed | Possibly affected; code history shows the same unpinned entry already existed, but the CVE record starts the range at 0.18.2. Unconfirmed |
| Hermes Agent 0.19.0 (2026.7.20) or later | Fixed |
| Never installed the n8n bridge entry | Not affected by this issue; no source says any other catalog entry was affected in practice |
Two things must both be true for the risk to become real: you installed the n8n entry on an affected version, and at that moment the main branch of the upstream repository CyberSamuraiX/hermes-n8n-mcp held malicious code. No source says the upstream was ever compromised, and there is no record of exploitation. The flaw is not in CISA KEV.
How it works
Hermes Agent ships a catalog of MCP servers approved by Nous Research. MCP (Model Context Protocol) is a standard that lets AI call external tools. Each catalog entry is a manifest file that says where to download the code from and which install commands to run. When a user runs hermes mcp install <name>, Hermes clones the git repository named in the manifest, runs its bootstrap commands (for example, creating a Python virtual environment and installing packages), and then runs it as a local process.
The problem was that the n8n entry said ref: main. main is a branch, which works like a bookmark that can be moved: every time the upstream pushes a new commit, it points at new code. So Nous reviewed the code as it looked on one day, but users got whatever was on the branch when they installed, with no integrity check in between. This maps to CWE-494 (Download of Code Without Integrity Check).
Notably, PR #30870, which created the catalog, says git entries are cloned at a pinned ref and never float on main. Yet both its schema example and the n8n entry it shipped used ref: main.
The flawed approach (conceptual illustration, not the actual file):
Show code example(yaml)
source: <third-party git repository>
install:
ref: main # a branch; upstream can change what it points to at any timeThe fixed approach:
Show code example(yaml)
source: <third-party git repository>
install:
ref: <full 40-character commit SHA> # always one reviewed snapshot; cannot be movedThe fix (commit 9df5f87) also added an automated test that checks every shipped manifest: git installs must use full SHAs; package launchers such as uvx, npx, pipx, bunx and pnpx must use exact versions; HTTP-based entries are exempt. The docs also advise that a new pin should be at least two weeks old when chosen.
The risk arises at install or reinstall time. The CVE description and the VulnCheck advisory say that once the upstream repository is taken over, malicious code reaches every host that installs the affected catalog entry, with no further action by the operator. Hermes’s docs and PR #30870 say catalog entries are “never auto-updated” and must be reinstalled to refresh. Both are true at once: an install fetches the latest upstream code, while a copy that is already installed does not change on its own. So the exposure is any install or reinstall while the upstream is compromised. The “user interaction required” part of the CVSS vectors fits this.
Timeline
| Date | Event |
|---|---|
| 2026-05-26 | MCP catalog added (PR #30870); the n8n entry ships with ref: main |
| 2026-07-07 | v0.18.2 / v2026.7.7.2 released (start of the official affected range; its notes don’t mention the MCP catalog) |
| 2026-07-14 | CNA’s public date (datePublic) |
| 2026-07-15 | Fix commit / PR #64463 merged |
| 2026-07-20 | v0.19.0 / v2026.7.20 released with the fix |
| 2026-08-28 | CVE and VulnCheck advisory published |
| 2026-08-31 | CVE record updated |
| 2026-09-08 | NVD last modified (status: Deferred) |
| 2026-09-19 | n8n bridge entry retired from the catalog |
The date the flaw was reported to Nous Research is unknown. Credit goes to Zubair Ashraf of Helmet Security.
Further reading
- Scoring: The only scores come from the CNA, VulnCheck: CVSS 4.0 9.0 (Critical) and CVSS 3.1 8.3 (High). They are the same assessment under two scoring systems. NVD has not scored it; it lists VulnCheck’s scores as secondary and marks the entry Deferred. The score is high because the outcome would be full code execution on the host; “high attack complexity” reflects that an attacker would first need to take over the upstream repository. CISA’s SSVC data in the CVE record: exploitation “none”, not automatable, technical impact “total”.
- No vendor advisory: Nous Research’s GitHub security-advisories page lists nothing for this. The fix sits inside PR #64463, titled as adding Blender to the MCP catalog, and the v0.19.0 release notes describe it only as the Blender addition, not as a security fix.
- Version wording: The CVE description says “0.18.2 prior to 0.19.0” and the structured data says “lessThan 0.19.0”. They agree: 0.19.0 is fixed.
- This is not a breach: No source links this CVE to any campaign or worm, and no source says
CyberSamuraiX/hermes-n8n-mcpwas ever compromised. - The broader lesson: An AI agent’s approved plug-in list is a software distribution channel. Pinning to immutable SHAs, enforcing that with an automated test, and using a cooldown period are standard supply-chain protections.
Verification Reviewed and checked against sources; not yet reproduced in our lab
| Reviewed | 2026-09-24 |
|---|
Verification records describe the environment and the result only, never reproduction steps or code that could attack other people’s systems. See our policy.
Sources
- AdvisoryHermes Agent 0.18.2 < 0.19.0 MCP Catalog Supply Chain RCE via Mutable Branch Reference · VulnCheck, 2026-08-28 · accessed 2026-09-24
- AdvisoryCVE-2026-82021 record (CVE Services API JSON) · CVE Program / VulnCheck (CNA), 2026-08-28 · accessed 2026-09-24
- CVE / NVD / OSVNVD CVE API – CVE-2026-82021 · NIST NVD, 2026-08-28 · accessed 2026-09-24
- Patch / releasefeat(mcp): enforce exact version pins across the whole MCP catalog · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
- Patch / releasefeat(mcp): add Blender to the MCP catalog with a curated 4-tool default (#64463) · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
- Patch / releasePR #64463 files changed · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
- Patch / releaseoptional-mcps/n8n/manifest.yaml at fix commit · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
- VendorHermes Agent v0.19.0 (v2026.7.20) – The Quicksilver Release · Nous Research (GitHub), 2026-07-20 · accessed 2026-09-24
- VendorHermes Agent v0.18.2 (v2026.7.7.2) · Nous Research (GitHub), 2026-07-07 · accessed 2026-09-24
- Vendorfeat(mcp): Nous-approved MCP catalog with interactive picker (#30870) · Nous Research (GitHub), 2026-05-26 · accessed 2026-09-24
- Otheroptional-mcps/n8n/manifest.yaml as first added · Nous Research (GitHub), 2026-05-26 · accessed 2026-09-24
- OtherHistory for optional-mcps/n8n/manifest.yaml · Nous Research (GitHub) · accessed 2026-09-24
- Vendorfix(mcp): retire the n8n bridge catalog entry (#116048) · Nous Research (GitHub), 2026-09-19 · accessed 2026-09-24
- VendorSecurity advisories · NousResearch/hermes-agent · Nous Research (GitHub) · accessed 2026-09-24
- VendorMCP (Model Context Protocol) – Hermes Agent docs · Nous Research · accessed 2026-09-24
Press brief
In one sentence
Hermes Agent is Nous Research's open-source AI agent, and it ships a list of approved MCP plug-ins that users can install with one command. The list's n8n bridge entry pointed at a movable branch of a third-party repository instead of a fixed version, so if that repository fell into an attacker's hands, users installing it would run malicious code on their own machines. This is a pinning weakness: no source says the upstream was ever compromised or that anyone exploited it, and it is not in CISA's Known Exploited Vulnerabilities catalog. The fixed version, 0.19.0, was released on July 20, 2026.
Key facts
- Severity
- CVSS 4.0 9.0 / CVSS 3.1 8.3 (CNA: VulnCheck; NVD has not scored it) cveawg.mitre.org
- Weakness type
- CWE-494: Download of Code Without Integrity Check services.nvd.nist.gov
- Fixed version
- 0.19.0 / 2026.7.20 (released 2026-07-20) github.com
- Fix merged
- 2026-07-15 (PR #64463) github.com
- CVE published
- 2026-08-28 cveawg.mitre.org
- Credit
- Zubair Ashraf (Helmet Security) cveawg.mitre.org
Confirmed
- Before the fix the n8n catalog entry used ref: main; the fix commit changed it to a full commit SHA.
- The fix added an automated test that enforces exact pins in every catalog manifest.
- CISA's assessment data in the CVE record marks exploitation as "none", and the flaw is not in KEV.
- The CVE text and the VulnCheck advisory say that, once the upstream is taken over, malicious code reaches "every host that installs the affected catalog entry" with no further operator action; they do not say existing copies update automatically.
Unconfirmed / disputed
- Whether releases from late May 2026 before 0.18.2 that included the catalog are also affected; the code history suggests they likely are.
- Whether any catalog entry other than n8n was also unpinned at the time; no source says so.
- When the flaw was reported to Nous Research; Nous Research has also not published its own advisory.
Quotable line
The review approved the code as it looked on one day; users got whatever the branch turned into later.
Images
Download the share image (PNG) · Attack flow diagram (downloadable)
Please credit "PlainCVE" and link to this page. Full citation format is under "How to cite" below. Found a factual error? Report it.
Hermes Agent's bundled MCP catalog pinned a branch instead of a commit: if the upstream repo were hijacked, installing would run someone else's code Hermes Agent is Nous Research's open-source AI agent, and it ships a list of approved MCP plug-ins that users can install with one command. The list's n8n bridge entry pointed at a movable branch of a third-party repository instead of a fixed version, so if that repository fell into an attacker's hands, users installing it would run malicious code on their own machines. This is a pinning weakness: no source says the upstream was ever compromised or that anyone exploited it, and it is not in CISA's Known Exploited Vulnerabilities catalog. The fixed version, 0.19.0, was released on July 20, 2026. Key facts: - Severity:CVSS 4.0 9.0 / CVSS 3.1 8.3 (CNA: VulnCheck; NVD has not scored it)(https://cveawg.mitre.org/api/cve/CVE-2026-82021) - Weakness type:CWE-494: Download of Code Without Integrity Check(https://services.nvd.nist.gov/rest/json/cves/2.0?cveId=CVE-2026-82021) - Fixed version:0.19.0 / 2026.7.20 (released 2026-07-20)(https://github.com/NousResearch/hermes-agent/releases/tag/v2026.7.20) - Fix merged:2026-07-15 (PR #64463)(https://github.com/NousResearch/hermes-agent/pull/64463) - CVE published:2026-08-28(https://cveawg.mitre.org/api/cve/CVE-2026-82021) - Credit:Zubair Ashraf (Helmet Security)(https://cveawg.mitre.org/api/cve/CVE-2026-82021) Confirmed: - Before the fix the n8n catalog entry used ref: main; the fix commit changed it to a full commit SHA. - The fix added an automated test that enforces exact pins in every catalog manifest. - CISA's assessment data in the CVE record marks exploitation as "none", and the flaw is not in KEV. - The CVE text and the VulnCheck advisory say that, once the upstream is taken over, malicious code reaches "every host that installs the affected catalog entry" with no further operator action; they do not say existing copies update automatically. Unconfirmed / disputed: - Whether releases from late May 2026 before 0.18.2 that included the catalog are also affected; the code history suggests they likely are. - Whether any catalog entry other than n8n was also unpinned at the time; no source says so. - When the flaw was reported to Nous Research; Nous Research has also not published its own advisory. 「The review approved the code as it looked on one day; users got whatever the branch turned into later.」— PlainCVE https://plaincve.date/en/vulns/cve-2026-82021-hermes-agent-mcp-unpinned-branch
How to cite this page
This article is CC BY 4.0. Please keep the attribution and link when republishing.
PlainCVE Team (2026). "Hermes Agent's bundled MCP catalog pinned a branch instead of a commit: if the upstream repo were hijacked, installing would run someone else's code". PlainCVE. https://plaincve.date/en/vulns/cve-2026-82021-hermes-agent-mcp-unpinned-branch (accessed YYYY-MM-DD)BibTeX
@misc{cve202682021hermesagentmcpunpinnedbranch2026,
title = {Hermes Agent's bundled MCP catalog pinned a branch instead of a commit: if the upstream repo were hijacked, installing would run someone else's code},
author = {PlainCVE Team},
year = {2026},
howpublished = {PlainCVE},
url = {https://plaincve.date/en/vulns/cve-2026-82021-hermes-agent-mcp-unpinned-branch},
note = {Updated 2026-09-24}
}