// 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

PlainCVE Team · Published 2026-09-24 · AI-assisted · Press brief ↓

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 affectedUsers 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 happensOnly 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 nowUpgrade 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)
  • Vendor / maintainerHermes docs: installing a catalog entry runs whatever the manifest specifies, so read the manifest before installingyou should still read the manifest before installinghermes-agent.nousresearch.com
  • Vendor / maintainerHermes docs point to the n8n-official entry, which connects over HTTP with OAuth and needs no local bridgeNo local bridge or n8n API key is required.hermes-agent.nousresearch.com
  • Vendor / maintainerThe n8n bridge entry was retired from the catalog on 2026-09-19 and can no longer be reinstalled from it; the commit gives no security reasonStop offering the third-party bridge for new catalog installs.github.com
  • Our assessmentChecking for the n8n bridge, switching to n8n-official or removing it, and rotating the n8n API key as a precaution are our own suggestions; Nous Research has published no advisory or guidance for this vulnerability
Affected versionsOfficial 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)
  • CVE recordThe CVE record (VulnCheck): the bundled MCP catalog in 0.18.2 up to before 0.19.0 is affectedHermes Agent 0.18.2 prior to 0.19.0 contains a supply chain vulnerability in its bundled MCP catalogcveawg.mitre.org
  • CVE recordThe same CVE record's structured data: from 0.18.2, below 0.19.0, consistent with the description"version":"0.18.2","versionType":"semver","lessThan":"0.19.0"cveawg.mitre.org
  • Vendor / maintainerWhen the catalog was first added on 2026-05-26, the n8n entry already used ref: main; whether versions before 0.18.2 are affected is outside the official range and unconfirmedref: maingithub.com
  • Vendor / maintainerHermes docs: catalog entries never auto-update, so the risk arises when you install or reinstallMCPs are never auto-updated.hermes-agent.nousresearch.com
Fixed versions0.19.0 (2026.7.20) or later
View evidence(3)
  • Vendor / maintainerThe fix commit changes the n8n entry from main to a full commit SHA and adds a test that enforces exact pinsn8n: install.ref main -> full commit SHA 7a9ae007github.com
  • Vendor / maintainerAfter the fix, the n8n manifest is pinned to a full 40-character SHAref: 7a9ae00795593aa1fdb4e61ecd640e8bfd0c3841github.com
  • Vendor / maintainerThe 0.19.0 (2026.7.20) release notes include PR #64463 but describe it only as adding Blender, with no mention of a security fixBlender added to the MCP catalog with a curated 4-tool defaultgithub.com
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
  • Introduced 2026-07-07 · v0.18.2 (v2026.7.7.2) released, first affected version source
  • First public 2026-07-14
CISA KEVNot listed(Not being in KEV does not mean it has not been exploited)
View evidence(3)
  • Our assessmentOur 2026-09-24 CISA KEV snapshot does not list this CVE; not being listed does not mean it has not been exploited
  • CERT / governmentCISA's assessment in the CVE record: exploitation status is none"Exploitation":"none"cveawg.mitre.org
  • Our assessmentNo source says the upstream repository CyberSamuraiX/hermes-n8n-mcp was ever compromised, and none links this CVE to any attack activity

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.

DETECTCheckAm I affected? Any signs of compromise?
  1. 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 check
    grep -n -i 'n8n' ~/.hermes/config.yaml
  2. 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.

MITIGATEFix / mitigatePatch; block it if you cannot patch yet
  1. 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.

  2. 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.

RESPONDRespondIf you find signs of compromise
  1. 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.

HARDENHardenPrevent the next one
  1. 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.

  2. 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.

  3. 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
  1. 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.
  2. 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.
  3. Where things live. MCP settings are under mcp_servers in ~/.hermes/config.yaml; credentials are in ~/.hermes/.env.
  4. 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.

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: 1. (Hypothetical) An attacker takes control of the upstream repository → 2. Pushes a malicious change to the main branch → 3. The user installs the n8n catalog entry on an affected version → 4. Hermes clones the branch and runs its bootstrap commands → 5. The bridge runs locally with the user's permissionsCVE-2026-82021 · Hermes Agent's bundled MCP catalog pinned a branch instead of a commit: if the upstream repowere hijacked, installing would run someone else's codeAttackerYour system(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. 1(Hypothetical) Anattacker takescontrol of theupstream repositoryPushes 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. 2Pushes a maliciouschange to the mainbranchThe 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). 3The user installsthe n8n catalogentry on anaffected versionHermes 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. 4Hermes clones thebranch and runsits bootstrapcommandsThe 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. 5The bridge runslocally with theuser's permissionsAttack pathCan be stopped herePlainCVE · plaincve.date/en/vulns/cve-2026-82021-hermes-agent-mcp-unpinned-branch · CC BY 4.0
Free to use in reporting and teaching under CC BY 4.0. Attribution is already on the image.
  1. 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.

  2. 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.

  3. 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.

  4. 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).

  5. 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

ConditionAffected?
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 catalogAffected (official range)
A catalog-bearing version from 2026-05-26 onward but before 0.18.2, with the n8n entry installedPossibly 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 laterFixed
Never installed the n8n bridge entryNot 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 time

The fixed approach:

Show code example(yaml)
source: <third-party git repository>
install:
  ref: <full 40-character commit SHA>   # always one reviewed snapshot; cannot be moved

The 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

DateEvent
2026-05-26MCP catalog added (PR #30870); the n8n entry ships with ref: main
2026-07-07v0.18.2 / v2026.7.7.2 released (start of the official affected range; its notes don’t mention the MCP catalog)
2026-07-14CNA’s public date (datePublic)
2026-07-15Fix commit / PR #64463 merged
2026-07-20v0.19.0 / v2026.7.20 released with the fix
2026-08-28CVE and VulnCheck advisory published
2026-08-31CVE record updated
2026-09-08NVD last modified (status: Deferred)
2026-09-19n8n 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-mcp was 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

Reviewed2026-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

  1. 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
  2. AdvisoryCVE-2026-82021 record (CVE Services API JSON) · CVE Program / VulnCheck (CNA), 2026-08-28 · accessed 2026-09-24
  3. CVE / NVD / OSVNVD CVE API – CVE-2026-82021 · NIST NVD, 2026-08-28 · accessed 2026-09-24
  4. Patch / releasefeat(mcp): enforce exact version pins across the whole MCP catalog · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
  5. 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
  6. Patch / releasePR #64463 files changed · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
  7. Patch / releaseoptional-mcps/n8n/manifest.yaml at fix commit · Nous Research (GitHub), 2026-07-15 · accessed 2026-09-24
  8. VendorHermes Agent v0.19.0 (v2026.7.20) – The Quicksilver Release · Nous Research (GitHub), 2026-07-20 · accessed 2026-09-24
  9. VendorHermes Agent v0.18.2 (v2026.7.7.2) · Nous Research (GitHub), 2026-07-07 · accessed 2026-09-24
  10. Vendorfeat(mcp): Nous-approved MCP catalog with interactive picker (#30870) · Nous Research (GitHub), 2026-05-26 · accessed 2026-09-24
  11. Otheroptional-mcps/n8n/manifest.yaml as first added · Nous Research (GitHub), 2026-05-26 · accessed 2026-09-24
  12. OtherHistory for optional-mcps/n8n/manifest.yaml · Nous Research (GitHub) · accessed 2026-09-24
  13. Vendorfix(mcp): retire the n8n bridge catalog entry (#116048) · Nous Research (GitHub), 2026-09-19 · accessed 2026-09-24
  14. VendorSecurity advisories · NousResearch/hermes-agent · Nous Research (GitHub) · accessed 2026-09-24
  15. 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.

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}
}