---
id: "CVE-2026-112936"
kind: "vulnerability"
aliases: ["CVE-2026-112936"]
title: "filelock: symlinked lock path lets local users redirect or split locking"
severity: "medium"
cvss: 6.1
epss: null
exploited: false
status: "open"
category: "package"
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"]
published_at: "2026-10-20T15:17:16+00:00"
first_seen_at: "2026-10-23T21:57:20+00:00"
updated_at: "2026-10-25T04:04:08+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-112936", "first_seen_at": "2026-10-23T21:57:20+00:00"}]
---

# filelock: symlinked lock path lets local users redirect or split locking

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.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- vendor:tox-dev filelock affected >= 3.20.4, < 4.0.9 fixed 4.0.9

## 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`.
- 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.
- Keep lock files in a directory only the application's user can write to.

## Timeline

- 2026-10-23T21:57:20+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-112936

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
