Case · DiggingBeagle record

Hermes Agent buffered anonymous authentication requests before enforcing limits

Tenable found that three public Hermes Agent authentication endpoints accepted and parsed oversized JSON bodies before authentication. Concurrent unauthenticated uploads raised dashboard memory consumption in a local test, leaving a denial-of-service risk. The October 9 advisory lists release 0.21.6 as patched.

Assessment profile

Assessment method
Setting
research demonstration
Exploitation
demonstrated
Evidence
Grade B
Remediation
patch available
AI role
AGAINST AI
Basis and provenance

A controlled concurrent-upload test quantified transient memory growth but not a service crash. The maintainer describes a 64 KiB pre-parser body limit and request-level tests in a merged patch. No independent field exploitation, measured service-wide downtime or complete bundle rollout is established.

Assessed Oct 11, 2026 using diggingbeagle.assessment/1.

At a glance

Mechanism and trust boundary

  1. 01

    Anonymous requests enter public authentication routes

    The routes must accept unauthenticated traffic but still need independent resource admission.

    Boundary: network / public auth path

  2. 02

    HTTP bodies are buffered and parsed before rejection

    Without a pre-parser size limit, the app allocates memory for payloads it will ultimately reject.

    Boundary: untrusted bytes / memory allocation

  3. 03

    Concurrent requests amplify memory pressure

    Eight held-open uploads measurably raised process memory in Tenable's experiment.

    Boundary: per-request allocation / service availability

Timeline

  1. Sep 3, 2026
    Event type unspecified

    Researcher starts disclosure

    Tenable reports first contact.

  2. Sep 3, 2026
    notification

    Vendor notified

  3. Oct 5, 2026
    Event type unspecified

    Fix noted

    Tenable records the memory-limit repair in PR #133370.

  4. Oct 5, 2026
    patch

    Fix date recorded

  5. Oct 9, 2026
    Event type unspecified

    TRA-2026-63 published

    Pre-authentication memory-exhaustion vulnerability is publicly disclosed.

  6. Oct 9, 2026
    disclosure

    Public disclosure

Claims & evidence

CLM-HERMES-MEM-PATCHTenable states the issue was fixed on October 5 in PR #133370 and identifies Hermes Agent 0.21.6 as the patched release in its October 9 advisory.supported

Basis: reported finding

Link to claim
CLM-HERMES-MEM-PREAUTHHermes Agent publicly accessible native-token, native-refresh and password-login routes read and parsed full JSON request bodies without application-level HTTP size bounds before an authentication decision.supported

Basis: reported finding

Link to claim
CLM-HERMES-MEM-EXACT-FIXNousResearch merged PR #133370 on October 5. Its pure-ASGI middleware caps public /auth/ POST bodies at 64 KiB before normal JSON buffering, rejects excessive Content-Length immediately and counts actual bytes to cut off chunked or understated bodies; authenticated routes, uploads and WebSockets are left unchanged.supported

Basis: reported finding

Link to claim
CLM-HERMES-MEM-MEASUREMENTDuring Tenable testing, eight concurrent 32 MiB anonymous uploads held open for fifteen seconds raised the dashboard process from 721 MiB to 1.08 GiB, while the health endpoint still reported overall=ok.supported

Basis: reported finding

Link to claim

Implications

Public authentication endpoints are resource-exhaustion surfaces even when their handler will reject the credentials.

Controls and mitigations

  • Upgrade Hermes Agent to 0.21.6 or later.
  • Enforce total HTTP body size, parser limits, connection timeouts and concurrent upload limits before accepting payloads.
  • Monitor actual process memory and ingress pressure in addition to a basic overall=ok health check.

Unknowns and contradictions

  • The advisory does not show an outage or exploitation against an unrelated live organization.
  • Availability impact depends on deployment memory limits and ingress protections.

Sources and citation

Material revision history

  1. Oct 10, 2026 · Published version · first publication · revision 120