CVE-2026-114608
Pylint: Arbitrary code execution via pickle deserialization of the stats cache in PYLINT_HOME
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- High
- Privileges needed
- Low
- User interaction
- Passive
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
5.4
Pylint: Arbitrary code execution via pickle deserialization of the stats cache in PYLINT_HOME
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
CVE-2026-114608- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
EUVDEUVD-2026-108257
5.4
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
EUVD-2026-108257- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-22qq-2fwx-7p67
5.4
Pylint: Arbitrary code execution via pickle deserialization of the stats cache in PYLINT_HOME
Impact
Since 2006 / pylint 0.15.2, pylint caches its stats as pickles in PYLINT_HOME and reload them on the next run with pickle.load. Someone without access to the configuration or linted code, but with access to the cache directory (predictable PYLINT_HOME on a multi-user host) can write a crafted pickle that will runs arbitrary code when pylint access its stat cache.
Patches
From pylint 4.0.9, the result cache is now stored as JSON instead of pickle, preventing code-execution.
Workarounds
Until upgrading do not point PYLINT_HOME to an untrusted, shared, or group-writable directory. The default value, ~/.cache/pylint, is writable only by the user running pylint.
Credits
- Reported privately via Tidelift coordinated disclosure (Dan Lenz).
- Record
GHSA-22qq-2fwx-7p67- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
NVD
5.4
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
CVE-2026-114608- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Weakness
- CWE-502
- Updated
- 2026-11-02
OSV
5.4
Pylint: Arbitrary code execution via pickle deserialization of the stats cache in PYLINT_HOME
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
CVE-2026-114608- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-03
OSVDEBIAN-CVE-2026-114608
5.4
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
DEBIAN-CVE-2026-114608- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-09
Show 8 moreShow less
OSVGHSA-22qq-2fwx-7p67
5.4
Pylint: Arbitrary code execution via pickle deserialization of the stats cache in PYLINT_HOME
Impact
Since 2006 / pylint 0.15.2, pylint caches its stats as pickles in PYLINT_HOME and reload them on the next run with pickle.load. Someone without access to the configuration or linted code, but with access to the cache directory (predictable PYLINT_HOME on a multi-user host) can write a crafted pickle that will runs arbitrary code when pylint access its stat cache.
Patches
From pylint 4.0.9, the result cache is now stored as JSON instead of pickle, preventing code-execution.
Workarounds
Until upgrading do not point PYLINT_HOME to an untrusted, shared, or group-writable directory. The default value, ~/.cache/pylint, is writable only by the user running pylint.
Credits
- Reported privately via Tidelift coordinated disclosure (Dan Lenz).
- Record
GHSA-22qq-2fwx-7p67- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-502
- Updated
- 2026-11-02
OSVOESA-2026-4699
5.4
pylint security update
Pylint is a Python source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells (as defined in Martin Fowler's Refactoring book). Pylint can be seen as another PyChecker since nearly all tests you can do with PyChecker can also be done with Pylint. However, Pylint offers some more features, like checking length of lines of code, checking if variable names are well-formed according to your coding standard, or checking if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins to add your own checks.
Security Fix(es):
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.(CVE-2026-114608)
- Record
OESA-2026-4699- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-04
OSVOESA-2026-4700
5.4
pylint security update
Pylint is a Python source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells (as defined in Martin Fowler's Refactoring book). Pylint can be seen as another PyChecker since nearly all tests you can do with PyChecker can also be done with Pylint. However, Pylint offers some more features, like checking length of lines of code, checking if variable names are well-formed according to your coding standard, or checking if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins to add your own checks.
Security Fix(es):
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.(CVE-2026-114608)
- Record
OESA-2026-4700- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-04
OSVOESA-2026-4701
5.4
pylint security update
Pylint is a Python source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells (as defined in Martin Fowler's Refactoring book). Pylint can be seen as another PyChecker since nearly all tests you can do with PyChecker can also be done with Pylint. However, Pylint offers some more features, like checking length of lines of code, checking if variable names are well-formed according to your coding standard, or checking if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins to add your own checks.
Security Fix(es):
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.(CVE-2026-114608)
- Record
OESA-2026-4701- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-04
OSVOESA-2026-4742
5.4
pylint security update
Pylint is a Python source code analyzer which looks for programming errors, helps enforcing a coding standard and sniffs for some code smells (as defined in Martin Fowler's Refactoring book). Pylint can be seen as another PyChecker since nearly all tests you can do with PyChecker can also be done with Pylint. However, Pylint offers some more features, like checking length of lines of code, checking if variable names are well-formed according to your coding standard, or checking if declared interfaces are truly implemented, and much more. Additionally, it is possible to write plugins to add your own checks.
Security Fix(es):
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.(CVE-2026-114608)
- Record
OESA-2026-4742- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - Updated
- 2026-11-11
OSVUBUNTU-CVE-2026-114608
5.4
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
UBUNTU-CVE-2026-114608- CVSS 4.0
- 5.4 Medium
CVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Updated
- 2026-11-02
OSVAZL-110543 No score
CVE-2026-114608 affecting package pylint 4.0.2-2
Pylint is a static code analyser for Python. From 0.15.2 until 4.0.9, Pylint stores module statistics in predictable files under PYLINT_HOME and loads those files with pickle.load on a later run. An attacker who can write to a shared, group-writable, or otherwise untrusted cache directory can replace a stats cache with crafted serialized data, causing arbitrary code to execute with the privileges of the user who next runs Pylint. The default per-user cache is not normally writable by another user. This issue is fixed in version 4.0.9.
- Record
AZL-110543- Updated
- 2026-11-05
OSVopenSUSE-SU-2026:12392-1 No score
python313-pylint-4.1.3-1.1 on GA media
These are all security issues fixed in the python313-pylint-4.1.3-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12392-1- Updated
- 2026-11-03
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pylintPyPI |
before 4.0.9 | 4.0.9 |
pylintAzure Linux:3 |
through 4.0.2-2 | None known |
pylintDebian:12 |
All versions, plus listed versions 2.16.2-22.17.4-13.0.3-13.0.3-23.1.0-1 Show 17 moreShow less3.1.0-23.2.2-13.2.2-23.2.6-13.2.7-13.3.1-13.3.1-23.3.3-13.3.3-23.3.4-13.3.4-24.0.4-14.0.5-14.0.6-14.0.8-14.0.8-24.0.9-1 |
None known |
pylintDebian:13 |
All versions, plus listed versions 3.3.4-13.3.4-24.0.4-14.0.5-14.0.6-14.0.8-14.0.8-24.0.9-1 |
None known |
pylintDebian:14 |
before 4.0.9-1, plus listed versions 3.3.4-13.3.4-24.0.4-14.0.5-14.0.6-14.0.8-14.0.8-2 |
4.0.9-1 |
pylintPyPI |
before 4.0.9, plus listed versions 0.10.00.11.00.12.10.13.00.14.0 Show 45 moreShow less0.15.20.16.00.18.00.18.10.19.00.20.00.21.00.21.10.21.20.21.30.22.00.23.00.24.00.25.00.25.10.25.20.26.00.27.00.28.00.4.10.6.00.6.10.7.00.8.11.0.01.1.01.2.01.2.11.3.01.3.11.4.01.4.11.4.21.4.31.4.41.4.51.5.01.5.11.5.21.5.31.5.41.5.51.5.61.6.01.6.1 |
4.0.9 |
pylintopenEuler:22.03-LTS-SP4 |
before 2.12.2-3.oe2203sp4 | 2.12.2-3.oe2203sp4 |
pylintopenEuler:24.03-LTS-SP1 |
before 3.0.3-3.oe2403sp1 | 3.0.3-3.oe2403sp1 |
pylintopenEuler:24.03-LTS-SP3 |
before 3.0.3-3.oe2403sp3 | 3.0.3-3.oe2403sp3 |
pylintopenEuler:24.03-LTS-SP4 |
before 3.0.3-3.oe2403sp4 | 3.0.3-3.oe2403sp4 |
Show 8 moreShow less
| Package | Affected | Fixed |
|---|---|---|
pylintUbuntu:16.04:LTS |
All versions, plus listed versions 1.3.1-3ubuntu11.4.4-1ubuntu11.5.2-1ubuntu1 |
None known |
pylintUbuntu:18.04:LTS |
All versions, plus listed versions 1.7.2-0ubuntu41.8.1-11.8.3-1 |
None known |
pylintUbuntu:20.04:LTS |
All versions, plus listed versions 2.2.2-32.4.4-12.4.4-2 |
None known |
pylintUbuntu:22.04:LTS |
All versions, plus listed versions 2.7.2-3ubuntu12.11.1-12.12.2-1 |
None known |
pylintUbuntu:24.04:LTS |
All versions, plus listed versions 2.17.4-13.0.3-13.0.3-2 |
None known |
pylintUbuntu:26.10 |
All versions, plus listed versions 4.0.5-14.0.6-14.0.8-1 |
None known |
pylintUbuntu:26.04:LTS |
All versions, plus listed versions 3.3.4-24.0.4-14.0.5-1 |
None known |
python-pylintopenSUSE:Tumbleweed |
before 4.1.3-1.1 | 4.1.3-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | OSV | |
| affected | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, facts, references | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-114608 is a medium vulnerability (CVSS 5.4) in Pylint-dev Pylint, published October 22, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.11%, the 1st percentile. Fixed in pylint 4.0.9.
References
github.com/pylint-dev/pylint/security/advisories/GHSA-22qq-2fwx-7p67
github.com/pylint-dev/pylint/commit/58c87cffca9de2b3e89aa07b89686cbc90cfea2d
github.com/pylint-dev/pylint/commit/5b241f66318220e9ba7b21ca631fbfe8e77682ca
github.com/pylint-dev/pylint/releases/tag/v4.0.9
nvd.nist.gov/vuln/detail/CVE-2026-114608
github.com/advisories/GHSA-22qq-2fwx-7p67
Show 10 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2026/114xxx/CVE-2026-114608.json
security-tracker.debian.org/tracker/CVE-2026-114608
github.com/pylint-dev/pylint
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4699
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4700
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4701
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4742
ubuntu.com/security/CVE-2026-114608
cve.org/CVERecord?id=CVE-2026-114608
suse.com/security/cve/CVE-2026-114608
Left out here: 164 versions. The JSON record has them.