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…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…