deps(mcp): update dependency pydantic-settings to v2.14.2 [security]#7841
Open
flagsmith-engineering[bot] wants to merge 1 commit into
Open
deps(mcp): update dependency pydantic-settings to v2.14.2 [security]#7841flagsmith-engineering[bot] wants to merge 1 commit into
flagsmith-engineering[bot] wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 3 Skipped Deployments
|
Contributor
Playwright Test Results (oss - depot-ubuntu-latest-16)Details
Playwright Test Results (oss - depot-ubuntu-latest-arm-16)Details
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.14.1→2.14.2pydantic-settings: NestedSecretsSettingsSource follows symlinks outside secrets_dir, enabling local file read and bypassing secrets_dir_max_size
GHSA-4xgf-cpjx-pc3j
More information
Details
Summary
NestedSecretsSettingsSourcereads secret values from files in a configuredsecrets_dir. Whensecrets_nested_subdir=True, a directory entry insidesecrets_dirthat is a symbolic link pointing outsidesecrets_diris followed, so files outside the configured directory are read into settings values. The same code path bypasses the documentedsecrets_dir_max_sizeprotection. An attacker or lower-privileged component able to influence entries in the configured secrets directory (for example, a writable or shared secrets mount) can turn this into an unintended local file read into settings and can defeat the advertised loading-size cap. This report does not claim network reachability by itself.Details
NestedSecretsSettingsSourceperformed two passes oversecrets_dirusing two different, inconsistent directory-traversal implementations:validate_secrets_path()usedPath.glob('**/*'), which does not descend into a symbolically-linked directory.load_secrets()usedglob.iglob(f'{path}/**/*', recursive=True)followed byread_text(), which does follow symlinked directories and reads through the link target.Because the two passes disagreed on symlinks, a symlinked directory inside
secrets_dirwhose target lives elsewhere was invisible to the size accounting (counted as 0 bytes) while still being fully read by the loader. This produces two distinct problems:secrets_dirthat resolves outside it is followed, and the external file's contents are loaded into the corresponding settings field.secrets_dir_max_sizebypass (CWE-400). The size check never sees the out-of-tree content, so the documented size cap is neither respected nor able to reject the oversized external file. A related amplification exists for cyclic in-tree symlinks, whichglob.iglob(recursive=True)re-traverses, inflating the size accounting and the number of loaded secrets.Reproduction
In a clean Linux container, with a
secrets_dircontaining a symlinksecrets/db -> /path/outsideand anoutside/passwdfile of 512 bytes, whilesecrets_dir_max_size=100:On affected versions,
Settings().db.passwdis populated with the 512-byte out-of-tree file and noSettingsErroris raised, even though the file exceedssecrets_dir_max_size.Impact
Applications that opt into
NestedSecretsSettingsSourcewithsecrets_nested_subdir=Trueand load secrets from a directory whose entries can be influenced by an attacker or a lower-privileged component (for example, a writable or shared secrets mount, or a secrets directory partially populated from untrusted input) are affected. The impact is:secrets_dircan be read into settings values (local file read).secrets_dir_max_sizecap can be bypassed, and cyclic symlinks can inflate resource usage during loading.The vulnerability requires the ability to place a symbolic link inside the configured secrets directory; it is not remotely reachable on its own. Applications that do not use
NestedSecretsSettingsSource, or that pointsecrets_dirat a directory fully under the application's control, are not affected.Mitigation
Upgrade to pydantic-settings 2.14.2, which:
secrets_dir, so symlinked directories pointing outside are never followed;secrets_dir, as defense in depth.If upgrading is not immediately possible, ensure the configured
secrets_diris fully owned and controlled by the application (no writable or attacker-influenced entries), or avoidsecrets_nested_subdir=True.Severity
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:LReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Release Notes
pydantic/pydantic-settings (pydantic-settings)
v2.14.2Compare Source
What's Changed
This is a security patch release.
NestedSecretsSettingsSourcefrom following symlinks outsidesecrets_dirby @hramezani in #889Security
Fixes GHSA-4xgf-cpjx-pc3j:
NestedSecretsSettingsSourcewithsecrets_nested_subdir=Truecould follow a symbolic link insidesecrets_dirpointing outside it, reading out-of-tree files into settings values and bypassing thesecrets_dir_max_sizecap. Affected versions:>= 2.12.0, < 2.14.2.Full Changelog: pydantic/pydantic-settings@v2.14.1...v2.14.2
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.