GHSA-8PQQ-224H-X875

Vulnerability from github – Published: 2026-05-05 00:03 – Updated: 2026-05-05 00:03
VLAI
Summary
ogham-mcp had credentials embedded in published PyPI sdists -- Neon postgres URLs and Voyage API key
Details

Summary

Between 2026-02 and 2026-04-24 a total of 22 public PyPI sdists of ogham-mcp contained development credentials embedded in source files. All credentials have since been rotated on the respective providers. No known exploitation. Upgrade to v0.11.1 to get a clean release.

What was leaked

Credential Location in sdist Vulnerable range Count
3x Neon postgres URLs with passwords (US / EU / AP development databases) top-level Makefile (NEON_US, NEON_EU, NEON_AP vars) >=0.6.5, <0.11.0 21 sdists
1x Voyage AI API key (pa-...) tests/test_hooks.py::test_mask_secrets_key_value -- test fixture that fed a real key into the redaction-function tester >=0.6.3, <0.11.1 22 sdists

Impact

  • Primary risk: any consumer of the affected sdists could have extracted the credentials and used them. The Neon URLs pointed at development databases; the Voyage key was a rate-limited API key.
  • Observed exploitation: none detected. Audit logs on both providers were reviewed post-rotation.
  • Remediation on our side:
  • Neon passwords for all three regions rotated.
  • Voyage API key rotated.
  • All affected versions yanked from PyPI (v0.3.0 through v0.10.4 yanked on 2026-04-24; v0.11.0 pending yank after this advisory).
  • v0.11.0 removed the Neon URLs and introduced make publish-check which scans every sdist for credential patterns before upload.
  • v0.11.1 scrubs the Voyage key from the test fixture and excludes benchmarks/, docs/, research/, extras/, and **/*.env* from all future sdists via explicit hatchling sdist include/exclude in pyproject.toml.

Action for users

  • If users installed any version from v0.3.0 through v0.11.0, upgrade to v0.11.1 immediately: pip install --upgrade "ogham-mcp>=0.11.1"
  • Users do not need to rotate anything on their end. The leaked credentials were owned by the project maintainer, not by users.

Credit

Discovered during an internal pre-release audit on 2026-04-24 while preparing v0.11.1.

Show details on source website

{
  "affected": [
    {
      "package": {
        "ecosystem": "PyPI",
        "name": "ogham-mcp"
      },
      "ranges": [
        {
          "events": [
            {
              "introduced": "0.6.3"
            },
            {
              "fixed": "0.11.1"
            }
          ],
          "type": "ECOSYSTEM"
        }
      ]
    }
  ],
  "aliases": [],
  "database_specific": {
    "cwe_ids": [
      "CWE-798"
    ],
    "github_reviewed": true,
    "github_reviewed_at": "2026-05-05T00:03:48Z",
    "nvd_published_at": null,
    "severity": "MODERATE"
  },
  "details": "## Summary\n\nBetween 2026-02 and 2026-04-24 a total of 22 public PyPI sdists of `ogham-mcp` contained development credentials embedded in source files. All credentials have since been rotated on the respective providers. No known exploitation. Upgrade to **v0.11.1** to get a clean release.\n\n## What was leaked\n\n| Credential | Location in sdist | Vulnerable range | Count |\n|---|---|---|---|\n| 3x Neon postgres URLs with passwords (US / EU / AP development databases) | top-level `Makefile` (`NEON_US`, `NEON_EU`, `NEON_AP` vars) | `\u003e=0.6.5, \u003c0.11.0` | 21 sdists |\n| 1x Voyage AI API key (`pa-...`) | `tests/test_hooks.py::test_mask_secrets_key_value` -- test fixture that fed a real key into the redaction-function tester | `\u003e=0.6.3, \u003c0.11.1` | 22 sdists |\n\n## Impact\n\n- **Primary risk**: any consumer of the affected sdists could have extracted the credentials and used them. The Neon URLs pointed at development databases; the Voyage key was a rate-limited API key.\n- **Observed exploitation**: none detected. Audit logs on both providers were reviewed post-rotation.\n- **Remediation on our side**:\n  - Neon passwords for all three regions rotated.\n  - Voyage API key rotated.\n  - All affected versions yanked from PyPI (v0.3.0 through v0.10.4 yanked on 2026-04-24; v0.11.0 pending yank after this advisory).\n  - v0.11.0 removed the Neon URLs and introduced `make publish-check` which scans every sdist for credential patterns before upload.\n  - v0.11.1 scrubs the Voyage key from the test fixture and excludes `benchmarks/`, `docs/`, `research/`, `extras/`, and `**/*.env*` from all future sdists via explicit hatchling sdist include/exclude in `pyproject.toml`.\n\n## Action for users\n\n- If users installed any version from `v0.3.0` through `v0.11.0`, upgrade to **v0.11.1** immediately:\n  ```\n  pip install --upgrade \"ogham-mcp\u003e=0.11.1\"\n  ```\n- Users do not need to rotate anything on their end. The leaked credentials were owned by the project maintainer, not by users.\n\n## Credit\n\nDiscovered during an internal pre-release audit on 2026-04-24 while preparing v0.11.1.",
  "id": "GHSA-8pqq-224h-x875",
  "modified": "2026-05-05T00:03:49Z",
  "published": "2026-05-05T00:03:48Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/ogham-mcp/ogham-mcp/security/advisories/GHSA-8pqq-224h-x875"
    },
    {
      "type": "PACKAGE",
      "url": "https://github.com/ogham-mcp/ogham-mcp"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [],
  "summary": "ogham-mcp had credentials embedded in published PyPI sdists -- Neon postgres URLs and Voyage API key"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Detection rules are retrieved from Rulezet.

Loading…

Loading…