{"id":"CVE-2026-112935","kind":"vulnerability","aliases":["CVE-2026-112935"],"related":[],"title":"filelock: race lets two processes hold the same SoftFileLock","description":"filelock is a platform-independent file lock for Python. From 3.22.0 until 4.2.1, SoftFileLock can break a stale marker after an attacker frees its own marker following the stale read, an honest contender creates a live successor on the reused inode, and the successor's modification time is not newer than the saved observation, causing the live marker to be removed and two holders to be admitted. This issue is fixed in version 4.2.1.","summary":"filelock's SoftFileLock can be tricked into removing a live lock marker after a stale-lock race, so two holders get admitted at once. An attacker who can race lock acquisition on a shared lock path can break mutual exclusion, which can corrupt data guarded by the lock.","severity":"medium","cvss":4.7,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"tox-dev filelock","fixed":["4.2.1"],"affected":">= 3.22.0, < 4.2.1","ecosystem":"vendor"}],"ecosystems":["vendor"],"tags":["filelock","package","python","self-hosted"],"not_affected_if":["default-config","single-tenant"],"how_to_check":"- Run `pip show filelock` and check whether the version is at least `3.22.0` and below `4.2.1`.\n- Search dependency files for `filelock` pins, for example `grep -i filelock requirements*.txt poetry.lock uv.lock`.","fix":"- Upgrade filelock to `4.2.1` or later, for example `pip install -U \"filelock>=4.2.1\"`.\n- Rebuild and redeploy services that vendor or pin filelock.","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:35:12+00:00","updated_at":"2026-10-25T04:35:12+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T04:35:12Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade filelock to `4.2.1` or later, for example `pip install -U \"filelock>=4.2.1\"`.\n- Rebuild and redeploy services that vendor or pin filelock.","reach":"local","title":"filelock: race lets two processes hold the same SoftFileLock","impact":"medium","summary":"filelock's SoftFileLock can be tricked into removing a live lock marker after a stale-lock race, so two holders get admitted at once. An attacker who can race lock acquisition on a shared lock path can break mutual exclusion, which can corrupt data guarded by the lock.","category":"package","nicknames":[],"who_cares":["python","filelock","self-hosted"],"confidence":0.6,"needs_auth":"unknown","worst_case":"two processes hold the same lock and corrupt shared data","analyst_note":"","how_to_check":"- Run `pip show filelock` and check whether the version is at least `3.22.0` and below `4.2.1`.\n- Search dependency files for `filelock` pins, for example `grep -i filelock requirements*.txt poetry.lock uv.lock`.","needs_analyst":false,"not_affected_if":["default-config","single-tenant"],"who_is_affected":"Applications that use SoftFileLock from filelock 3.22.0 up to but not including 4.2.1 to guard shared resources between processes. Exposure depends on an attacker being able to create and free lock markers on the same lock path, so multi-tenant or shared-filesystem setups are the main concern. Projects that use only the default platform lock or that do not depend on filelock can skip it.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000631,"input_tokens":3381,"output_tokens":586,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-112935':12A,15A '-2026':11A,14A '3.22.0':86C '4.2.1':88C,149C 'acquisit':57B 'admit':48B,142C 'attack':52B,97C 'break':64B,91C 'caus':130C 'contend':108C 'corrupt':69B 'creat':109C 'cve':10A,13A 'data':70B 'dev':18A 'exclus':66B 'file':81C 'filelock':1A,19A,20B,26B,75C 'fix':146C 'follow':102C 'free':98C 'get':47B 'guard':71B 'hold':6A 'holder':46B,139C 'honest':107C 'host':25B 'independ':80C 'inod':116C 'issu':144C 'let':3A 'live':35B,111C,132C 'lock':36B,42B,56B,61B,74B,82C 'marker':37B,94C,101C,133C 'modif':121C 'mutual':65B 'newer':125C 'observ':129C 'packag':21B 'path':62B 'platform':79C 'platform-independ':78C 'process':5A 'python':22B,84C 'race':2A,43B,55B 'read':105C 'remov':33B,136C 'reus':115C 'save':128C 'self':24B 'self-host':23B 'share':60B 'softfilelock':9A,28B,89C 'stale':41B,93C,104C 'stale-lock':40B 'successor':112C,119C 'time':122C 'tox':17A 'tox-dev':16A 'trick':31B 'two':4A,45B,138C 'version':148C","nicknames":[],"mitigations":[],"who_affected":"Applications that use SoftFileLock from filelock 3.22.0 up to but not including 4.2.1 to guard shared resources between processes. Exposure depends on an attacker being able to create and free lock markers on the same lock path, so multi-tenant or shared-filesystem setups are the main concern. Projects that use only the default platform lock or that do not depend on 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:H/PR:L/UI:N/S:U/C:N/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-112935","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-112935","severity":null,"published_at":"2026-10-20T15:17:16+00:00","modified_at":"2026-10-21T21:12:13+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"}