{"id":"CVE-2026-112912","kind":"vulnerability","aliases":["CVE-2026-112912"],"related":[],"title":"filelock: symlink race lets local users probe file writability","description":"filelock is a platform-independent file lock for Python. From 3.32.6 until 4.2.1, SoftFileLock can follow a swapped symbolic link during the conditional os.access writability check for a node without its owner-write bit, allowing another local user on a platform and directory configuration that follows the link to infer whether a chosen path exists and is writable from the observable acquisition result. This issue is fixed in version 4.2.1.","summary":"SoftFileLock in filelock versions 3.32.6 through 4.2.1 can follow a swapped symbolic link during its writability check. A local user can infer whether a chosen path exists and is writable from whether the lock acquisition succeeds.","severity":"low","cvss":2.5,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"tox-dev filelock","fixed":["4.2.1"],"affected":">= 3.32.6, < 4.2.1","ecosystem":"vendor"}],"ecosystems":["vendor"],"tags":["filelock","local-multi-user","package","python"],"not_affected_if":["filelock-below-3.32.6","no-softfilelock","single-user-host"],"how_to_check":"- Run `pip show filelock` or `python -c \"import filelock; print(filelock.__version__)\"` and check whether the version is at least `3.32.6` and below `4.2.1`.\n- Check whether the project pins filelock in a lock file such as `requirements.txt`, `poetry.lock` or `uv.lock`.","fix":"- Upgrade filelock to `4.2.1` or later.","status":"open","published_at":"2026-10-20T15:17:15+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","triaged_at":"2026-10-25T04:49:34+00:00","updated_at":"2026-10-25T04:49:34+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-10-25T04:49:34Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade filelock to `4.2.1` or later.","reach":"local","title":"filelock: symlink race lets local users probe file writability","impact":"low","summary":"SoftFileLock in filelock versions 3.32.6 through 4.2.1 can follow a swapped symbolic link during its writability check. A local user can infer whether a chosen path exists and is writable from whether the lock acquisition succeeds.","category":"package","nicknames":[],"who_cares":["python","filelock","local-multi-user"],"confidence":0.8,"needs_auth":"yes","worst_case":"local user infers existence and writability of chosen paths","analyst_note":"","how_to_check":"- Run `pip show filelock` or `python -c \"import filelock; print(filelock.__version__)\"` and check whether the version is at least `3.32.6` and below `4.2.1`.\n- Check whether the project pins filelock in a lock file such as `requirements.txt`, `poetry.lock` or `uv.lock`.","needs_analyst":false,"not_affected_if":["single-user-host","no-softfilelock","filelock-below-3.32.6"],"who_is_affected":"Applications that use SoftFileLock from filelock on a shared machine where another local user can create symbolic links in the lock file's directory. Systems with single-user machines or containers that do not share directories with other users are much less exposed. Teams that do not use SoftFileLock or that run only on a single-user host can likely skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000606,"input_tokens":3381,"output_tokens":536,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-112912':12A,15A '-2026':11A,14A '3.32.6':31B,74C '4.2.1':33B,76C,134C 'acquisit':61B,126C 'allow':99C 'anoth':100C 'bit':98C 'check':43B,89C 'chosen':51B,117C 'condit':86C 'configur':108C 'cve':10A,13A 'dev':18A 'directori':107C 'exist':53B,119C 'file':8A,69C 'filelock':1A,19A,20B,29B,63C 'fix':131C 'follow':35B,79C,110C 'independ':68C 'infer':48B,114C 'issu':129C 'let':4A 'link':39B,83C,112C 'local':5A,22B,45B,101C 'local-multi-us':21B 'lock':60B,70C 'multi':23B 'node':92C 'observ':125C 'os.access':87C 'owner':96C 'owner-writ':95C 'packag':25B 'path':52B,118C 'platform':67C,105C 'platform-independ':66C 'probe':7A 'python':26B,72C 'race':3A 'result':127C 'softfilelock':27B,77C 'succeed':62B 'swap':37B,81C 'symbol':38B,82C 'symlink':2A 'tox':17A 'tox-dev':16A 'user':6A,24B,46B,102C 'version':30B,133C 'whether':49B,58B,115C 'without':93C 'writabl':9A,42B,56B,88C,122C 'write':97C","nicknames":[],"mitigations":[],"who_affected":"Applications that use SoftFileLock from filelock on a shared machine where another local user can create symbolic links in the lock file's directory. Systems with single-user machines or containers that do not share directories with other users are much less exposed. Teams that do not use SoftFileLock or that run only on a single-user host can likely skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T15:17:15+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-112912","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112912","severity":null,"published_at":"2026-10-20T15:17:15+00:00","modified_at":"2026-10-21T21:18:18+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","fetched_at":"2026-10-23T22:28:58+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}