Skip to content

GHSA-w5r6-mcgq-7pq4 CVE-2026-44596

Yamcs has No Rate Limiting on Authentication Endpoint

Critical Maven
Severity
6.5 / 10
Critical · CVSS 3.1
Exploit chance (EPSS)
2.06%
Chance of exploitation in the next 30 days. Higher than 81.33% of scored vulnerabilities.
Known exploited
No
Not in CISA's catalog
Weakness
CWE-307 Improper Restriction of Excessive Authentication Attempts
Fix
5.12.7
Upgrade org.yamcs:yamcs-core to this version or later

Description

Summary

The authentication endpoint POST /auth/token in yamcs-core lacks any form of rate limiting, account lockout, or failed attempt throttling. As a result, an unauthenticated remote attacker can perform unlimited password guessing attempts against any user account.

This missing rate limiting vulnerability (CWE-307) significantly increases the risk of successful brute-force attacks.

Root Cause

File: yamcs-core/src/main/java/org/yamcs/http/auth/AuthHandler.java

POST /auth/token has no rate limiting, no lockout after failed attempts, and no CAPTCHA. The handler processes unlimited authentication requests without any throttling mechanism:

// AuthHandler.java — handleToken()
// No throttle, no failed attempt counter, no lockout
private void handleToken(HandlerContext ctx) {
    ...
    getSecurityStore().login(token).whenComplete((info, err) -> {
        // Directly attempts authentication with no rate check
    });
}

This is absent by default — the official quickstart and documentation contain no guidance on configuring rate limiting.

Impact

An attacker can make unlimited authentication attempts against any account. This enables efficient brute-force attacks against any account.

Proof of Concept

# 20 attempts — zero rate limiting
for i in $(seq 1 20); do
  curl -s -o /dev/null -w "Attempt $i: HTTP %{http_code}\n" \
    -X POST "http://TARGET:8090/auth/token" \
    -d "grant_type=password&username=operator&password=operator12$i"
done
# All return HTTP 401 — no HTTP 429 ever

Confirmed: 20 attempts in 0.07 seconds, no rate limiting enforced.

Fix

Implement DRF-style throttling on /auth/token:

// Track failed attempts per IP
private static final Cache<String, Integer> FAILED_ATTEMPTS =
    CacheBuilder.newBuilder().expireAfterWrite(15, TimeUnit.MINUTES).build();

private static final int MAX_ATTEMPTS = 10;

private void handleToken(HandlerContext ctx) {
    String ip = ctx.getRemoteAddress();
    int attempts = Optional.ofNullable(FAILED_ATTEMPTS.getIfPresent(ip)).orElse(0);
    if (attempts >= MAX_ATTEMPTS) {
        throw new TooManyRequestsException("Rate limit exceeded");
    }
    // ... existing auth logic
    // On failure: FAILED_ATTEMPTS.put(ip, attempts + 1)
}

Affected versions

Maven

PackageVulnerableFixed in
org.yamcs:yamcs-core
< 5.12.7
5.12.7

How to fix

Move to the fixed version or later with your package manager, update the lockfile, and run your tests. If the package only arrives through another dependency, upgrade that dependency first. If none of its releases pulls a fixed version yet, force the version with your package manager's override.

org.yamcs:yamcs-core Maven → 5.12.7

maven
<dependency><groupId>org.yamcs</groupId><artifactId>yamcs-core</artifactId><version>5.12.7</version></dependency>
gradle
implementation("org.yamcs:yamcs-core:5.12.7")

Severity breakdown

CVSS 3.1 6.5

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Weakness

CWE-307: Improper Restriction of Excessive Authentication Attempts

The product does not implement sufficient measures to prevent multiple failed authentication attempts within a short time frame.

How to prevent it
  • Architecture and Design: Common protection mechanisms include: Disconnecting the user after a small number of failed attempts Implementing a timeout Locking out a targeted account Requiring a computational task on the user's part.
  • Architecture and Design: Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid [REF-1482]. Consider using libraries with authentication capabilities such as OpenSSL or the ESAPI Authenticator. [REF-45]

References

Timeline

  1. Published
  2. Last updated by the source
  3. Latest EPSS score
AdvisorySeverityWhy it's related
GHSA-9272-wg2r-7xmx
Yamcs has DOM XSS in Extension Routing
Medium Also affects org.yamcs:yamcs-core
GHSA-c64q-hj4j-375f
Yamcs vulnerable to authenticated remote code execution via unescaped StreamSQL `LIKE` pattern compiled by Janino (`LikeExpression`)
Critical Also affects org.yamcs:yamcs-core
GHSA-73mf-m39p-wpm9
Yamcs vulnerable to Remote Code Execution via instance-template argument YAML injection (createInstance)
Critical Also affects org.yamcs:yamcs-core
GHSA-9jg3-g3wh-w9pj
Yamcs has Unauthenticated Directory Traversal
High Also affects org.yamcs:yamcs-core
GHSA-rxpg-wjf8-qv9c
Yamcs has Reflected XSS in the URL of the Authorize Endpoint
Medium Also affects org.yamcs:yamcs-core
GHSA-cvw4-55pp-3hfq
Yamcs's Missing Authorization on Role and Privilege Enumeration Endpoints Allows Any Authenticated User to Disclose Full Security Configuration
Medium Also affects org.yamcs:yamcs-core
GHSA-fwww-cp23-7f5g
Yamcs's WebSocket subscription handlers omit the privilege checks their REST siblings enforce
Medium Also affects org.yamcs:yamcs-core
GHSA-962x-ccwf-8x6p
Yamcs Core API has Multiple Missing Function Level Access Control vulnerabilities
High Also affects org.yamcs:yamcs-core
Is this in your code?

MergeHarbor checks every repository's dependencies against this database, ranks what matters by exploitability and reachability, routes it to the owning team and opens the fix pull request.

Check your repos with MergeHarbor