{"items":[{"id":"NVI-00018582","kind":"vulnerability","title":"PDM: Project-Local State and Config Writes Follow Symlinks","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-ghq2-5c67-fprm","CVE-2026-47763"],"plain_summary":"GitHub lists this reviewed advisory for pdm. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-3fe074ae9f053a3209fb0cb99cc2dcfd"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-3fe074ae9f053a3209fb0cb99cc2dcfd","url":"https://github.com/advisories/GHSA-ghq2-5c67-fprm","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-ghq2-5c67-fprm","publisher":"GitHub Advisory Database","observed_at":"2026-11-06T15:13:31.161Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-3fe074ae9f053a3209fb0cb99cc2dcfd"],"technology":"pdm","known_exclusions":[],"conditions_summary":"## Summary\n\nPDM writes several project-local state or configuration files without symlink protection. If a malicious repository places those files as symlinks, local PDM operations can overwrite the symlink targets.\n\nThis creates an arbitrary file clobber primitive relative to the privileges of the invoking user.\n\n## Affected Behavior\n\n- Project-local config writes can affect files outside the repository\n- The most stable demonstrated sink is `pdm.toml`\n- Related sinks include `.pdm-python` and `.python-version`\n\n## Affected Code\n\n- `src/pdm/project/config.py:303-350`\n- `src/pdm/project/core.py:209-217`\n- `src/pdm/cli/commands/use.py:187-189`\n\n## Technical Details\n\n`Config.__init__()` resolves the project-local `pdm.toml` path and `_save_config()` writes to the resolved target. If `PROJECT_ROOT/pdm.toml` is a symlink to another file, `pdm config -l ...` updates the target file instead of refusing the write.\n\nThe same general problem exists for other project-local persistence paths that are written directly with no `lstat` / `O_NOFOLLOW` protection.\n\nFor the `pdm.toml` PoC specifically, the target file must already contain parseable TOML. Otherwise the load step fails before the wri","public_affected_ranges":["< 2.27.0"]}],"null_published_at":"2026-11-07T07:07:39.858Z","source_updated_at":"2026-06-10T20:32:57.000Z","source_disclosed_at":"2026-06-10T20:32:56.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-06T15:13:31.161Z"}],"next_cursor":null,"snapshot_revision":"42594"}