From 6c9a7ab7e7893d1479125bd1fa691cd93161d3ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Compagnon?= Date: Fri, 3 Jul 2026 10:16:05 +0200 Subject: [PATCH 1/2] chore(deps): bump pydantic-settings to 2.14.2 Locked transitive dependency (pulled in by mcp) was 2.14.1, vulnerable to a symlink escape in NestedSecretsSettingsSource that could read files outside secrets_dir and bypass secrets_dir_max_size (GHSA, medium). Fixed in 2.14.2. Lockfile only, no API change. --- uv.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/uv.lock b/uv.lock index 4c81cc6..1d593ac 100644 --- a/uv.lock +++ b/uv.lock @@ -133,7 +133,7 @@ requires-dist = [ { name = "coloredlogs", specifier = ">=15.0" }, { name = "fastapi", specifier = ">=0.115" }, { name = "httpx", specifier = ">=0.27" }, - { name = "mcp", extras = ["cli"], specifier = ">=1.2" }, + { name = "mcp", extras = ["cli"], specifier = ">=1.9" }, { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.10" }, { name = "pydantic", specifier = ">=2.7" }, { name = "pytest", marker = "extra == 'dev'", specifier = ">=8.0" }, @@ -348,7 +348,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -899,16 +899,16 @@ wheels = [ [[package]] name = "pydantic-settings" -version = "2.14.1" +version = "2.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, { name = "python-dotenv" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/07/60/1d1e59c9c90d54591469ada7d268251f71c24bdb765f1a8a832cee8c6653/pydantic_settings-2.14.1.tar.gz", hash = "sha256:e874d3bec7e787b0c9958277956ed9b4dd5de6a80e162188fdaff7c5e26fd5fa", size = 235551, upload-time = "2026-05-08T13:40:06.542Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/b5/8f48e906c3e0205276e8bd8cb7512217a87b2685304d64be27cad5b3019f/pydantic_settings-2.14.2.tar.gz", hash = "sha256:c19dd64b19097f1de80184f0cc7b0272a13ae6e170cbf240a3e27e381ed14a5f", size = 237700, upload-time = "2026-06-19T13:44:56.324Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/8d/f1af3832f5e6eb13ba94ee809e72b8ecb5eef226d27ee0bef7d963d943c7/pydantic_settings-2.14.1-py3-none-any.whl", hash = "sha256:6e3c7edfd8277687cdc598f56e5cff0e9bfff0910a3749deaa8d4401c3a2b9de", size = 60964, upload-time = "2026-05-08T13:40:04.958Z" }, + { url = "https://files.pythonhosted.org/packages/77/c1/6e422f34e569cf8e18df68d1939c81c099d2b61e4f7d9621c8a77560799c/pydantic_settings-2.14.2-py3-none-any.whl", hash = "sha256:a20c97b37910b6550d5ea50fbcc2d4187defe58cd57070b73863d069419c9440", size = 61715, upload-time = "2026-06-19T13:44:55.02Z" }, ] [[package]] From e0be75eaa24d1a63ab2cbffc98b017c702abf5b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Compagnon?= Date: Fri, 3 Jul 2026 10:16:07 +0200 Subject: [PATCH 2/2] docs(changelog): cut 1.4.0 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eaf2a90..12d0f9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ and rename that heading to the version when you cut the release. ## [Unreleased] +## [1.4.0](https://github.com/obeone/caucus-mcp/compare/v1.3.0...v1.4.0) (2026-07-03) + ### Added - **Streamable HTTP MCP endpoint on the hub.** The hub now serves an in-process @@ -35,6 +37,13 @@ and rename that heading to the version when you cut the release. tagging `vX.Y.Z` (a GitHub Release); a new `Release` workflow builds and publishes to PyPI on tag push. No more `chore(release): bump version` commits. +### Security + +- **pydantic-settings 2.14.2** — bump the locked transitive dependency (pulled in + by `mcp`) past a symlink-escape flaw where `NestedSecretsSettingsSource` could + follow symlinks outside `secrets_dir` and bypass `secrets_dir_max_size` + (GHSA, medium). Lockfile only, no API change. + ## [1.3.0](https://github.com/obeone/caucus-mcp/compare/v1.2.1...v1.3.0) (2026-06-18)