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-checkwhich 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 inpyproject.toml.
Action for users
- If users installed any version from
v0.3.0throughv0.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.
{
"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"
}
Loading…
Loading…
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
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…