CVE-2026-112910
filelock: WindowsFileLock ignores mode: a 0o600 lock file and the ReadWriteLock database inherit the directory ACL
CVE-2026-112910 is a medium vulnerability (CVSS 5.3) in Tox-dev Filelock, published October 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.16%, the 5th percentile. Fixed in filelock 4.2.1.
- Severity
- 5.3 MediumCVSS 3.1, CVE List
- Exploit chance
- 0.16%EPSS, 5th percentile
- Exploitation
- None knownNot on CISA’s or ENISA’s lists
- Fixed in
4.2.1filelock +8 more
Description
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- Low
- Availability
- Low
Exploit likelihood
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
filelockPyPI | 3.10.0 to 4.2.0 | 4.2.1 |
python-filelockAzure Linux:3 | through 3.20.3-4 | None known |
filelockPyPI | 3.10.0 up to 4.2.1, plus listed versions 3.10.13.10.23.10.33.10.43.10.5 Show 45 moreShow less3.10.63.10.73.11.03.12.03.12.13.12.23.12.33.12.43.13.03.13.13.13.23.13.33.13.43.14.03.15.03.15.13.15.23.15.33.15.43.16.03.16.13.17.03.18.03.19.13.20.03.20.13.20.23.20.33.20.43.21.03.21.13.21.23.22.03.23.03.24.03.24.13.24.23.24.33.25.03.25.13.25.23.28.03.29.03.29.13.29.2 | 4.2.1 |
python-filelockUbuntu:Pro:18.04:LTS | All versions, plus listed versions 2.0.11-12.0.12-12.0.13-13.0.0-23.0.3-13.0.4-13.0.4-1ubuntu0.1~esm1 | None known |
python-filelockUbuntu:Pro:20.04:LTS | All versions, plus listed versions 3.0.12-13.0.12-23.0.12-2ubuntu0.1~esm1 | None known |
python-filelockUbuntu:Pro:22.04:LTS | All versions, plus listed versions 3.0.12-23.3.2-13.4.0-13.4.2-13.4.2-23.6.0-13.6.0-1ubuntu0.1~esm1 | None known |
python-filelockUbuntu:Pro:24.04:LTS | All versions, plus listed versions 3.12.2-13.12.4-13.13.1-13.13.1-1ubuntu0.1~esm1 | None known |
python-filelockUbuntu:26.10 | All versions, plus listed versions 3.20.3-13.29.4-13.32.0-13.32.2-1 | None known |
python-filelockUbuntu:26.04:LTS | All versions, plus listed versions 3.18.0-13.20.0-13.20.2-13.20.3-1 | None known |
What each source reports
CVE List Score used 5.3
filelock: WindowsFileLock ignores mode: a 0o600 lock file and the ReadWriteLock database inherit the directory ACL
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
- Record
CVE-2026-112910- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-732
- Updated
- 2026-11-09
EUVDEUVD-2026-117809 5.3
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
- Record
EUVD-2026-117809- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Updated
- 2026-11-09
GitHub AdvisoriesGHSA-8mx5-7m5m-r77g 5.3
filelock: WindowsFileLock ignores mode: a 0o600 lock file and the ReadWriteLock database inherit the directory ACL
filelock on Windows ignores the mode argument. FileLock(path, mode=0o600) creates the same file as FileLock(path): one with no security descriptor of its own (the Windows record that says who may access a file). Its access list, or ACL, is whatever the lock directory hands down to new files. filelock creates the ReadWriteLock database, which it asks to be 0o600, the same way. In a directory whose inheritable ACL grants other local accounts access to new files, those accounts can open the lock file or database. They can take the byte-range lock (a lock on a span of bytes in a file) once the owner releases it and keep the owner's later acquire() calls waiting or timing out. They can read holder metadata an on_acquired hook left in a preserve_lock_file=True file. Where the directory hands down modify access, they can write to both files.
lock.mode still reports 0o600. The documentation neither promises an ACL on Windows nor says that Windows drops the mode. On Unix the same mode keeps other accounts out. Mutual exclusion between processes that follow the protocol holds on either platform. Affected versions are filelock 3.10.0 through 4.2.0 on Windows.
Anthropic's OSS Scanner reported this in private. Finding covered by this advisory:
ANT-2026-0KEO0DDO[medium, CWE-732]: WindowsFileLock ignores mode; 0o600 lock files inherit the directory ACL.
Severity
CVSS 3.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L scores 5.3 (Medium).
AV:L (local): the other account needs a logon on the same host. PR:L (low privileges): an ordinary account is enough. UI:N (no user interaction). AC:L (low attack complexity): no race. C:L (partial confidentiality impact): the lock file (holder metadata) and the lock database are readable where 0o600 was meant to keep them private. I:L (partial integrity impact): in the directory layout the maintainers tested, the other account can also write both files, which lets it corrupt the lock's own state but nothing the lock protects. A:L (partial availability impact): the other account can hold the byte-range lock and make the owner wait or time out. S:U (scope unchanged).
Classification from the review: Windows permission failure with security impact only where callers rely on mode=0o600 across accounts. The review had marked it an unconfirmed Windows claim, since the scanner traced stand-in Win32 calls on Linux. The maintainers have since confirmed it on Windows with two local accounts (see Evidence). The scanner rated this medium; the maintainers keep medium.
Scope and preconditions
- The affected classes are
FileLockandAsyncFileLockon Windows (WindowsFileLock), and the SQLite database ofReadWriteLockandAsyncReadWriteLock. Both go through_open_non_reparse_fd. The soft locks create their markers withos.open, which also keeps only a read-only bit of the mode on Windows; the scanner did not examine them further. - The directory is one that other local accounts cannot write, which the documentation already requires on Windows, but whose inheritable entries grant them read (or modify) access to new files. Examples are a service's data directory readable by
Users, or any directory with(OI)(CI)entries (entries that new files and sub-directories inherit) for another account. A directory whose ACL already excludes other accounts, such as one inside a user profile, hides the problem. - The other account must open the file. According to the
LockFileExdocumentation, read access is enough to take the byte-range lock, so it can hold the lock whenever the owner does not. The lock file exists while the owner holds the lock, and stays after release withpreserve_lock_file=True. TheReadWriteLockdatabase is not unlinked at any point. - Unix is not affected, because
UnixFileLockcreates the file with the mode and repeats it withfchmod. Mutual exclusion between cooperating processes is not affected.
Affected code
…
- Record
GHSA-8mx5-7m5m-r77g- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-732
- Updated
- 2026-11-02
NVD 5.3
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
- Record
CVE-2026-112910- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-732
- Updated
- 2026-11-09
OSV 5.3
filelock: WindowsFileLock ignores mode: a 0o600 lock file and the ReadWriteLock database inherit the directory ACL
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
- Record
CVE-2026-112910- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-732
- Updated
- 2026-11-07
OSVGHSA-8mx5-7m5m-r77g 5.3
filelock: WindowsFileLock ignores mode: a 0o600 lock file and the ReadWriteLock database inherit the directory ACL
filelock on Windows ignores the mode argument. FileLock(path, mode=0o600) creates the same file as FileLock(path): one with no security descriptor of its own (the Windows record that says who may access a file). Its access list, or ACL, is whatever the lock directory hands down to new files. filelock creates the ReadWriteLock database, which it asks to be 0o600, the same way. In a directory whose inheritable ACL grants other local accounts access to new files, those accounts can open the lock file or database. They can take the byte-range lock (a lock on a span of bytes in a file) once the owner releases it and keep the owner's later acquire() calls waiting or timing out. They can read holder metadata an on_acquired hook left in a preserve_lock_file=True file. Where the directory hands down modify access, they can write to both files.
lock.mode still reports 0o600. The documentation neither promises an ACL on Windows nor says that Windows drops the mode. On Unix the same mode keeps other accounts out. Mutual exclusion between processes that follow the protocol holds on either platform. Affected versions are filelock 3.10.0 through 4.2.0 on Windows.
Anthropic's OSS Scanner reported this in private. Finding covered by this advisory:
ANT-2026-0KEO0DDO[medium, CWE-732]: WindowsFileLock ignores mode; 0o600 lock files inherit the directory ACL.
Severity
CVSS 3.1 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L scores 5.3 (Medium).
AV:L (local): the other account needs a logon on the same host. PR:L (low privileges): an ordinary account is enough. UI:N (no user interaction). AC:L (low attack complexity): no race. C:L (partial confidentiality impact): the lock file (holder metadata) and the lock database are readable where 0o600 was meant to keep them private. I:L (partial integrity impact): in the directory layout the maintainers tested, the other account can also write both files, which lets it corrupt the lock's own state but nothing the lock protects. A:L (partial availability impact): the other account can hold the byte-range lock and make the owner wait or time out. S:U (scope unchanged).
Classification from the review: Windows permission failure with security impact only where callers rely on mode=0o600 across accounts. The review had marked it an unconfirmed Windows claim, since the scanner traced stand-in Win32 calls on Linux. The maintainers have since confirmed it on Windows with two local accounts (see Evidence). The scanner rated this medium; the maintainers keep medium.
Scope and preconditions
- The affected classes are
FileLockandAsyncFileLockon Windows (WindowsFileLock), and the SQLite database ofReadWriteLockandAsyncReadWriteLock. Both go through_open_non_reparse_fd. The soft locks create their markers withos.open, which also keeps only a read-only bit of the mode on Windows; the scanner did not examine them further. - The directory is one that other local accounts cannot write, which the documentation already requires on Windows, but whose inheritable entries grant them read (or modify) access to new files. Examples are a service's data directory readable by
Users, or any directory with(OI)(CI)entries (entries that new files and sub-directories inherit) for another account. A directory whose ACL already excludes other accounts, such as one inside a user profile, hides the problem. - The other account must open the file. According to the
LockFileExdocumentation, read access is enough to take the byte-range lock, so it can hold the lock whenever the owner does not. The lock file exists while the owner holds the lock, and stays after release withpreserve_lock_file=True. TheReadWriteLockdatabase is not unlinked at any point. - Unix is not affected, because
UnixFileLockcreates the file with the mode and repeats it withfchmod. Mutual exclusion between cooperating processes is not affected.
Affected code
…
- Record
GHSA-8mx5-7m5m-r77g- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Weakness
- CWE-732
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-112910 5.3
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
- Record
UBUNTU-CVE-2026-112910- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L - Updated
- 2026-11-07
OSVAZL-112711No score
CVE-2026-112910 affecting package python-filelock 3.20.3-4
filelock is a platform-independent file lock for Python. From 3.10.0 until 4.2.1, filelock on Windows ignores the mode argument for WindowsFileLock files and the ReadWriteLock SQLite database. A lock created with mode=0o600 receives the parent directory's inheritable ACL because _open_non_reparse_fd and _nt_open do not create an owner-only security descriptor. Another local account with inherited access can read holder metadata or the lock database, modify those files where the ACL permits writes, or take the byte-range lock after release and delay later acquisitions. UnixFileLock is not affected, and mutual exclusion between cooperating processes continues to hold. This issue is fixed in version 4.2.1.
- Record
AZL-112711- Updated
- 2026-11-06
History
| Recorded | Changed | Sources |
|---|---|---|
| references | CVE List, OSV | |
| affected, aliases, references | NVD, OSV | |
| affected, aliases, references | OSV | |
| references | OSV | |
| aliases | EUVD, NVD | |
| description, facts, products, references, severity | CVE List | |
| first indexed | GitHub Advisories, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
References
github.com/tox-dev/filelock/security/advisories/GHSA-8mx5-7m5m-r77g
github.com/tox-dev/filelock/pull/835
github.com/tox-dev/filelock/commit/72786d41aa25159ad28c1bcf4291738b135b2c6c
github.com/tox-dev/filelock/commit/e1e825b1992f69fb6b346dc395d5ae4893536c0a
github.com/tox-dev/filelock/releases/tag/4.2.1
github.com/advisories/GHSA-8mx5-7m5m-r77g
Left out here: 36 versions and the rest of 2 source descriptions. The JSON record has them.