DEV Community

CVE Reports
CVE Reports

Posted on • Originally published at cvereports.com

GHSA-382C-VX95-W3P5: GHSA-382C-VX95-W3P5: Missing Access Control on Profile Endpoint and MCP Tool in Gittensory

GHSA-382C-VX95-W3P5: Missing Access Control on Profile Endpoint and MCP Tool in Gittensory

Vulnerability ID: GHSA-382C-VX95-W3P5
CVSS Score: 6.5
Published: 2026-07-09

An insecure direct object reference (IDOR) and missing authorization validation check in the Gittensory REST API and Model Context Protocol (MCP) server allowed authenticated users to query arbitrary miner profiles, exposing sensitive cryptographic hotkeys and daily financial/economic yields.

TL;DR

Gittensory failed to validate contributor access permissions on its profile REST endpoint and Model Context Protocol tool, exposing cryptographic hotkeys and financial metrics to any authenticated user.


⚠️ Exploit Status: POC

Technical Details

  • CWE ID: CWE-284 / CWE-639
  • Attack Vector: Network
  • CVSS v3.1 Score: 6.5
  • EPSS Score: Not Applicable (No CVE Assigned)
  • Impact: Confidentiality Leak (Cryptographic Hotkeys and Yield Data)
  • Exploit Status: PoC Available in Test Suite
  • KEV Status: Not Listed

Affected Systems

  • Gittensory REST API Server
  • @jsonbored/gittensory-mcp Daemon
  • Gittensory: < Commit 811ef5fb9d748170011f8854d88c64627ad666a0 (Fixed in: Commit 811ef5fb9d748170011f8854d88c64627ad666a0)

Code Analysis

Commit: 811ef5f

Add requireContributorAccess to the REST profile route and the MCP tool; extend redactSensitiveForMcp to strip alphaPerDay/taoPerDay/usdPerDay from all MCP output.

@@ -1523,6 +1523,8 @@ export function createApp() {

   app.get("/v1/contributors/:login/profile", async (c) => {
     const login = c.req.param("login");
+    const unauthorized = await requireContributorAccess(c, login);
+    if (unauthorized) return unauthorized;
     const [github, pullRequests, issues, cachedRepoStats, gittensorSnapshot] = await Promise.all([
       fetchPublicContributorProfile(login),
       listContributorPullRequests(c.env, login),
@@ -691,6 +691,7 @@ export class GittensoryMcp {
   }

   private async getContributorProfile(login: string): Promise<ToolPayload> {
+    this.requireContributorAccess(login);
     const [github, pullRequests, issues, cachedRepoStats, gittensorSnapshot] = await Promise.all([
       fetchPublicContributorProfile(login),
       listContributorPullRequests(this.env, login),
@@ -1090,7 +1091,7 @@ function redactSensitiveForMcp(value: unknown): unknown {
   if (!value || typeof value !== "object") return value;
   return Object.fromEntries(
     Object.entries(value as Record<string, unknown>)
-      .filter(([key]) => !/hotkey|coldkey|wallet|private_key|privateKey|mnemonic/i.test(key))
+      .filter(([key]) => !/hotkey|coldkey|wallet|private_key|privateKey|mnemonic|alphaPerDay|taoPerDay|usdPerDay/i.test(key))
       .map(([key, entry]) => [key, redactSensitiveForMcp(entry)]),
   );
Enter fullscreen mode Exit fullscreen mode

Exploit Details

  • Regression Test Suite: Integration and automated security regression test cases verifying access control blocks on the REST router and MCP server.

Mitigation Strategies

  • Apply the fix committed in repository version 811ef5fb9d748170011f8854d88c64627ad666a0
  • Restrict REST API network access to authenticated corporate subnets or loopback interfaces
  • Restrict exposure of Model Context Protocol (MCP) server endpoints to trusted LLM client applications
  • Run the automated integration test suite to verify endpoint authorization restrictions

Remediation Steps:

  1. Clone or pull the latest update from Gittensory source repository
  2. Apply the patch from commit 811ef5fb9d748170011f8854d88c64627ad666a0 to local branches
  3. Recompile the server code and run the node package manager dependency builders
  4. Restart the Gittensory API service and the daemon hosting the MCP servers
  5. Execute the integrated test suite using npm test to confirm the profile endpoint rejects unauthorized requests

References


Read the full report for GHSA-382C-VX95-W3P5 on our website for more details including interactive diagrams and full exploit analysis.

Top comments (0)