{"id":"CVE-2026-112936","kind":"vulnerability","aliases":["CVE-2026-112936"],"related":[],"title":"filelock: symlinked lock path lets local users redirect or split locking","description":"filelock is a platform-independent file lock for Python. From 3.20.4 until 4.0.9, ReadWriteLock and AsyncReadWriteLock versions from 3.20.4 resolve the lock path and pass it to SQLite without rejecting a final symbolic link, allowing another local user who can create names in the lock directory to redirect database creation and locking or split mutual exclusion between targets. This issue is fixed in version 4.0.9.","summary":"filelock's ReadWriteLock and AsyncReadWriteLock in versions 3.20.4 through 4.0.9 pass the lock path to SQLite without rejecting a final symbolic link. A local user who can create names in the lock directory can redirect database creation and locking, which can break mutual exclusion.","severity":"medium","cvss":6.1,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"tox-dev filelock","fixed":["4.0.9"],"affected":">= 3.20.4, < 4.0.9","ecosystem":"vendor"}],"ecosystems":["vendor"],"tags":["filelock","local-multi-user","package","python"],"not_affected_if":["private-lock-directory","single-user-host","uses-filelock-only"],"how_to_check":"- Run `pip show filelock` or `python -c \"import filelock; print(filelock.__version__)\"` and check whether the version is between `3.20.4` and `4.0.9`.\n- Check whether the application uses `ReadWriteLock` or `AsyncReadWriteLock` with a lock path in a directory that other local users can write to.","fix":"- Upgrade filelock to `4.0.9` or later.\n- Keep lock files in a directory only the application's user can write to.","status":"open","published_at":"2026-10-20T15:17:16+00:00","first_seen_at":"2026-10-23T21:57:20+00:00","triaged_at":"2026-10-25T04:04:08+00:00","updated_at":"2026-10-25T04:04:08+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T04:04:08Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade filelock to `4.0.9` or later.\n- Keep lock files in a directory only the application's user can write to.","reach":"local","title":"filelock: symlinked lock path lets local users redirect or split locking","impact":"low","summary":"filelock's ReadWriteLock and AsyncReadWriteLock in versions 3.20.4 through 4.0.9 pass the lock path to SQLite without rejecting a final symbolic link. A local user who can create names in the lock directory can redirect database creation and locking, which can break mutual exclusion.","category":"package","nicknames":[],"who_cares":["python","filelock","local-multi-user"],"confidence":0.7,"needs_auth":"yes","worst_case":"Lock redirected to attacker target, breaking mutual exclusion between processes","analyst_note":"","how_to_check":"- Run `pip show filelock` or `python -c \"import filelock; print(filelock.__version__)\"` and check whether the version is between `3.20.4` and `4.0.9`.\n- Check whether the application uses `ReadWriteLock` or `AsyncReadWriteLock` with a lock path in a directory that other local users can write to.","needs_analyst":false,"not_affected_if":["single-user-host","private-lock-directory","uses-filelock-only"],"who_is_affected":"Only projects that use filelock's ReadWriteLock or AsyncReadWriteLock on a lock path in a shared or multi-user directory are exposed. Single-user machines, containers with a private lock directory, and projects that only use FileLock can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000628,"input_tokens":3391,"output_tokens":578,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-112936':14A,17A '-2026':13A,16A '3.20.4':36B,84C,92C '4.0.9':38B,86C,138C 'allow':108C 'anoth':109C 'asyncreadwritelock':33B,89C 'break':70B 'creat':56B,114C 'creation':65B,123C 'cve':12A,15A 'databas':64B,122C 'dev':20A 'directori':61B,119C 'exclus':72B,129C 'file':79C 'filelock':1A,21A,22B,29B,73C 'final':48B,105C 'fix':135C 'independ':78C 'issu':133C 'let':5A 'link':50B,107C 'local':6A,24B,52B,110C 'local-multi-us':23B 'lock':3A,11A,41B,60B,67B,80C,95C,118C,125C 'multi':25B 'mutual':71B,128C 'name':57B,115C 'packag':27B 'pass':39B,98C 'path':4A,42B,96C 'platform':77C 'platform-independ':76C 'python':28B,82C 'readwritelock':31B,87C 'redirect':8A,63B,121C 'reject':46B,103C 'resolv':93C 'split':10A,127C 'sqlite':44B,101C 'symbol':49B,106C 'symlink':2A 'target':131C 'tox':19A 'tox-dev':18A 'user':7A,26B,53B,111C 'version':35B,90C,137C 'without':45B,102C","nicknames":[],"mitigations":[],"who_affected":"Only projects that use filelock's ReadWriteLock or AsyncReadWriteLock on a lock path in a shared or multi-user directory are exposed. Single-user machines, containers with a private lock directory, and projects that only use FileLock can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-20T15:17:16+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:L","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-112936","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112936","severity":null,"published_at":"2026-10-20T15:17:16+00:00","modified_at":"2026-10-21T18:09:40+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"}