CVE-2026-110686
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
CVE-2026-110686- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-416
- Updated
- 2026-11-02
EUVDEUVD-2026-104565
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
EUVD-2026-104565- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q5qq-6rc9-83rg
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes...
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
GHSA-q5qq-6rc9-83rg- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-416
- Updated
- 2026-11-02
NVD
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
CVE-2026-110686- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-416
- Updated
- 2026-11-02
OSV
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
CVE-2026-110686- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-416
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-110686
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv. A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
DEBIAN-CVE-2026-110686- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 6 moreShow less
OSVUBUNTU-CVE-2026-110686
6.5
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv. A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
UBUNTU-CVE-2026-110686- CVSS 3.1
- 6.5 Medium
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVAZL-109860 No score
CVE-2026-110686 affecting package perl-Cpanel-JSON-XS 4.39-1
Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv.
A decode copies the parser's filter_json_object and filter_json_single_key_object callbacks without taking references to them. A filter callback that removes the last single-key filter frees the callback table while the decode in progress still uses it. The next object is dispatched through freed memory and can crash the process.
- Record
AZL-109860- Updated
- 2026-11-05
OSVMGASA-2026-0559 No score
Updated perl-Cpanel-JSON-XS package fixes security vulnerabilities
Cpanel::JSON::XS versions before 4.41 for Perl allow type confusion via duplicate object keys when dupkeys_as_arrayref is enabled. (CVE-2026-9334) Cpanel::JSON::XS versions before 4.41 for Perl allow denial of service via UTF-8 BOM prefixed input when a decode filter callback throws. (CVE-2026-9516) Cpanel::JSON::XS versions before 4.80 for Perl leak the decoded key of an object rejected for a duplicate key or a missing colon in decode_hv. (CVE-2026-110672) Cpanel::JSON::XS versions before 4.80 for Perl allow stack exhaustion via nested tagged values under allow_tags in decode_tag. (CVE-2026-110673) Cpanel::JSON::XS versions from 4.33 before 4.80 for Perl miss duplicate non-ASCII bare keys, allowing type confusion under dupkeys_as_arrayref in decode_hv. (CVE-2026-110674) Cpanel::JSON::XS versions from 4.33 before 4.80 for Perl accept malformed UTF-8 in bare hash keys under allow_barekey in decode_hv. (CVE-2026-110675) Cpanel::JSON::XS versions before 4.80 for Perl allow memory exhaustion by encoding exponent notation as full decimal digits under allow_bignum. (CVE-2026-110676) Cpanel::JSON::XS versions from 4.28 before 4.80 for Perl leak the array collecting duplicate key values under dupkeys_as_arrayref in decode_hv. (CVE-2026-110677) Cpanel::JSON::XS versions before 4.80 for Perl allow memory exhaustion by buffering incremental input past max_size in incr_parse. (CVE-2026-110678) Cpanel::JSON::XS versions from 4.20 before 4.80 for Perl write out of bounds when a tied or shared hash grows during canonical encoding in encode_hv. (CVE-2026-110680) Cpanel::JSON::XS versions before 4.80 for Perl use the parent interpreter's scalars from a parser object cloned into a new ithread. (CVE-2026-110681) Cpanel::JSON::XS versions from 4.42 before 4.80 for Perl let input chunking change the decoded value of top-level numbers in incr_parse. (CVE-2026-110682) Cpanel::JSON::XS versions from 3.0202 before 4.80 for Perl leak memory and retain overloaded objects when encoding values as strings in encode_stringify. (CVE-2026-110684) Cpanel::JSON::XS versions before 4.80 for Perl leak the decoded arguments of a tagged value when its THAW method dies in decode_tag. (CVE-2026-110685) Cpanel::JSON::XS versions before 4.80 for Perl use freed filter callbacks when a filter removes itself during decoding in decode_hv. (CVE-2026-110686) Cpanel::JSON::XS versions from 4.43 before 4.80 for Perl misorder byte-string keys during canonical encoding in utf16_cmp. (CVE-2026-110687) Cpanel::JSON::XS versions from 4.51 before 4.80 for Perl allow quadratic CPU use by revalidating the remaining buffer per value in incr_parse. (CVE-2026-110688)
- Record
MGASA-2026-0559- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12217-1 No score
perl-Cpanel-JSON-XS-4.800.0-1.1 on GA media
These are all security issues fixed in the perl-Cpanel-JSON-XS-4.800.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12217-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:22187-1 No score
Security update for perl-Cpanel-JSON-XS
This update for perl-Cpanel-JSON-XS fixes the following issues:
Changes in perl-Cpanel-JSON-XS:
- updated to 4.800.0 (4.80)
-
Security fixes, reported by Stig Palmquist (CPANSec):
- CVE-2026-110672 decode: free the hash key on "Duplicate keys not allowed" and on a missing ':' (leak). bsc#1286166
- CVE-2026-110673 decode: charge allow_tags "(" nesting against max_depth (stack overflow). bsc#1286167
- CVE-2026-110674 decode: look bare keys up as UTF-8, so the duplicate check no longer misses or crashes on non-ASCII keys. bsc#1286168
- CVE-2026-110675 decode: validate bare hash keys as UTF-8 like quoted keys (malformed keys). bsc#1286169
- CVE-2026-110676 encode: compact allow_bignum Math::BigFloat values with huge exponents (30MB from 12 bytes). bsc#1286170
- CVE-2026-110677 decode: fix the dupkeys_as_arrayref reference counts (leaked every array). bsc#1286173
- CVE-2026-110678 incr_parse: apply max_size to the buffered text in every context. bsc#1286174
- CVE-2026-110680 encode: bound the canonical key snapshot for growing tied or shared hashes (overflow). bsc#1286175
- CVE-2026-110681 new: clone the callbacks and buffer SVs on ithread clone instead of sharing the parent's pointers. bsc#1286176
- CVE-2026-110682 incr_parse: reject a top-level number, true, false or null unless allow_nonref was set explicitly, as chunking changes their value. Strings, arrays and objects are unchanged. bsc#1286177
- CVE-2026-110684 encode: release the temporary references when stringifying overloaded objects (leak). bsc#1286179
- CVE-2026-110685 decode_tag: free the tag and its arguments when THAW dies (leak). bsc#1286180
- CVE-2026-110686 decode: keep the filter callbacks alive while they run (use-after-free when a filter removes itself). bsc#1286181
- CVE-2026-110687 canonical: sort byte-string keys as Latin-1. bsc#1286182
- CVE-2026-110688 incr_parse: validate UTF-8 only up to the end of the decoded text (quadratic CPU). bsc#1286183
-
Add version markers to all module files. (PR #260 demerphq)
-
Use utf8n_to_uvchr on Perl 5.32 and later to avoid the deprecated utf8n_to_uvuni API. (PR #260 demerphq)
-
Add schema-based validation for decoded JSON (GH #238): Cpanel::JSON::XS::Type now provides check_type($data, $schema[, $found_type]), which validates an already-decoded perl structure against a type spec built from the existing encoder building blocks (JSON_TYPE_* / json_type_arrayof / json_type_hashof / json_type_anyof), plus the new json_type_optional() for hash keys that may be absent, and short scalar type name sugar ('Str', 'Int', 'Float', 'Bool', 'Null', 'Any', and nullable 'Str?' etc.) so a schema reads as "just a hash of keys and types", as requested. Unlike the encoder's hash type spec, a plain hashref schema is closed: unknown keys and missing required keys are reported. New $json->decode_and_validate($json_text, $schema) method decodes and croaks with all mismatches if validation fails, using decode()'s own type introspection as ground truth to avoid perl's usual dual-var/stringified-number ambiguity.
-
json_type_optional() and the nullable '?' type-name suffixes ('Str?', 'Int?', 'Float?', 'Bool?') give schemas an explicit way to declare a key/value as optional instead of demanding a complete type specification for every key. The encoder now also understands json_type_optional() directly (it unwraps to the wrapped type, since encode() only ever sees keys that are actually present): the exact same type spec built for check_type()/decode_and_validate() can now be handed to encode() as-is, instead of croaking with "no type was specified for hash key '...'" for every optional key. Encoding stays strict by default otherwise: a hash key with no entry at all in the type spec still croaks (GH #242).
-
4.53 2026-09-28 (rurban)
- Fix…
-
- Record
openSUSE-SU-2026:22187-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:4926-1 No score
Security update for perl-Cpanel-JSON-XS
This update for perl-Cpanel-JSON-XS fixes the following issues:
- CVE-2025-40929: integer overflow (bsc#1249331).
- CVE-2026-9334: type confusion via duplicate object keys when
dupkeys_as_arrayrefis enabled (bsc#1267546). - CVE-2026-9516: denial of service via UTF-8 BOM prefixed input when a decode filter callback throws (bsc#1267547).
- CVE-2026-110672: leak of decoded key of an object rejected for a duplicate key or a missing colon in
decode_hv(bsc#1286166). - CVE-2026-110673: stack exhaustion via nested tagged values under
allow_tagsindecode_tag(bsc#1286167). - CVE-2026-110674: duplicate non-ASCII bare keys are missed, allowing type confusion under
dupkeys_as_arrayrefindecode_hv(bsc#1286168). - CVE-2026-110675: malformed UTF-8 accepted in bare hash keys under
allow_barekeyindecode_hv(bsc#1286169). - CVE-2026-110676: memory exhaustion by encoding exponent notation as full decimal digits under
allow_bignum(bsc#1286170). - CVE-2026-110677: array collecting duplicate key values leaked under
dupkeys_as_arrayrefindecode_hv(bsc#1286173). - CVE-2026-110678: memory exhaustion by buffering incremental input past
max_sizeinincr_parse(bsc#1286174). - CVE-2026-110680: out-of-bounds write when a tied or shared hash grows during canonical encoding in
encode_hv(bsc#1286175). - CVE-2026-110681: parent interpreter's scalars from a parser object cloned into a new
ithread(bsc#1286176). - CVE-2026-110682: input chunking can change the decoded value of top-level numbers in
incr_parse(bsc#1286177). - CVE-2026-110684: memory leaked and overloaded objects retained when encoding values as strings in
encode_stringify(bsc#1286179). - CVE-2026-110685: decoded arguments of a tagged value leaked when its THAW method dies in
decode_tag(bsc#1286180). - CVE-2026-110686: freed filter callbacks used when a filter removes itself during decoding in
decode_hv(bsc#1286181). - CVE-2026-110687: byte-string keys misordered during canonical encoding in
utf16_cmp(bsc#1286182). - CVE-2026-110688: quadratic CPU use due to remaining buffer revalidation per value in
incr_parse(bsc#1286183).
Changes for perl-Cpanel-JSON-XS:
- updated to 4.800.0 (4.80)
- Add version markers to all module files. (PR #260 demerphq)
- Use utf8n_to_uvchr on Perl 5.32 and later to avoid the deprecated utf8n_to_uvuni API. (PR #260 demerphq)
- Add schema-based validation for decoded JSON (GH #238): Cpanel::JSON::XS::Type now provides check_type($data, $schema[, $found_type]), which validates an already-decoded perl structure against a type spec built from the existing encoder building blocks (JSON_TYPE_* / json_type_arrayof / json_type_hashof / json_type_anyof), plus the new json_type_optional() for hash keys that may be absent, and short scalar type name sugar ('Str', 'Int', 'Float', 'Bool', 'Null', 'Any', and nullable 'Str?' etc.) so a schema reads as 'just a hash of keys and types', as requested. Unlike the encoder's hash type spec, a plain hashref schema is closed: unknown keys and missing required keys are reported. New $json->decode_and_validate($json_text, $schema) method decodes and croaks with all mismatches if validation fails, using decode()'s own type introspection as ground truth to avoid perl's usual dual-var/stringified-number ambiguity.
- json_type_optional() and the nullable '?' type-name suffixes ('Str?', 'Int?', 'Float?', 'Bool?') give schemas an explicit way to declare a key/value as optional instead of demanding a complete type specification for every key. The encoder now also understands json_type_optional() directly (it unwraps to the wrapped type, since encode() only ever sees keys that are actually present): the exact same type spec built for check_type()/decode_and_validate() can now be handed to encode() as-is, instead of croaking with 'no type was specified for hash key '...'' for every optional key. Encoding stays strict by default otherwise: a hash key…
- Record
SUSE-SU-2026:4926-1- Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
perl-Cpanel-JSON-XSAzure Linux:3 |
through 4.39-1 | None known |
libcpanel-json-xs-perlDebian:12 |
All versions, plus listed versions 4.35-14.35-1+deb12u14.36-14.37-14.38-1 Show 8 moreShow less4.39-14.39-24.39-2~deb13u14.40-14.41-14.42-14.51-14.80-1 |
None known |
libcpanel-json-xs-perlDebian:13 |
All versions, plus listed versions 4.39-14.39-24.39-2~deb13u14.40-14.41-14.42-14.51-14.80-1 |
None known |
libcpanel-json-xs-perlDebian:14 |
before 4.80-1, plus listed versions 4.39-14.39-24.39-2~deb13u14.40-14.41-14.42-14.51-1 |
4.80-1 |
perl-Cpanel-JSON-XSMageia:10 From an advisory covering 17 CVEs |
before 4.800.0-1.mga10 | 4.800.0-1.mga10 |
perl-Cpanel-JSON-XSSUSE:Linux Enterprise Module for Package Hub 15 SP7 From an advisory covering 18 CVEs |
before 4.800.0-150700.3.9.1 | 4.800.0-150700.3.9.1 |
libcpanel-json-xs-perlUbuntu:16.04:LTS |
All versions, plus listed versions 3.0115-13.0210-1ubuntu1 |
None known |
libcpanel-json-xs-perlUbuntu:18.04:LTS |
All versions, plus listed versions 3.0225-1build13.0239-1 |
None known |
libcpanel-json-xs-perlUbuntu:20.04:LTS |
All versions, plus listed versions 4.12-14.12-1build14.15-14.17-14.18-14.19-14.19-1build14.19-1ubuntu0.1 |
None known |
libcpanel-json-xs-perlUbuntu:22.04:LTS |
All versions, plus listed versions 4.25-1build14.25-1build24.27-14.27-1build14.27-1ubuntu0.14.27-1ubuntu0.2 |
None known |
Show 5 moreShow less
| Package | Affected | Fixed |
|---|---|---|
libcpanel-json-xs-perlUbuntu:24.04:LTS |
All versions, plus listed versions 4.37-14.37-1build14.37-1build24.37-1build34.37-1ubuntu0.1 |
None known |
libcpanel-json-xs-perlUbuntu:26.10 |
All versions, plus listed versions 4.40-14.42-14.42-1build1 |
None known |
libcpanel-json-xs-perlUbuntu:26.04:LTS |
All versions, plus listed versions 4.39-24.40-1 |
None known |
perl-Cpanel-JSON-XSopenSUSE:Tumbleweed From an advisory covering 15 CVEs |
before 4.800.0-1.1 | 4.800.0-1.1 |
perl-Cpanel-JSON-XSopenSUSE:Leap 16.0 From an advisory covering 15 CVEs |
before 4.800.0-bp160.1.1 | 4.800.0-bp160.1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | ||
| facts | 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-110686 is a medium vulnerability (CVSS 6.5) in perl-Cpanel-JSON-XS, published October 19, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.43%, the 37th percentile. Fixed in libcpanel-json-xs-perl 4.80-1.
References
github.com/rurban/Cpanel-JSON-XS/commit/c3e7e3c5b0b72d82b072c6a7cfb8c34cec4c7ea2.patch
metacpan.org/release/RURBAN/Cpanel-JSON-XS-4.80/changes
nvd.nist.gov/vuln/detail/CVE-2026-110686
github.com/advisories/GHSA-q5qq-6rc9-83rg
cpan.org/modules
github.com/CVEProject/cvelistV5/tree/main/cves/2026/110xxx/CVE-2026-110686.json
Show 50 moreShow less
github.com/rurban/Cpanel-JSON-XS
security-tracker.debian.org/tracker/CVE-2026-110686
advisories.mageia.org/MGASA-2026-0559.html
bugs.mageia.org/show_bug.cgi?id=35626
openwall.com/lists/oss-security/2026/06/03/4
openwall.com/lists/oss-security/2026/06/03/5
lists.security.metacpan.org/cve-announce/msg/40653179
lists.security.metacpan.org/cve-announce/msg/40653165
lists.fedoraproject.org/archives/list/[email protected]/message/HGX5TKYHWGNVQLWOJWF3FTSVTGJK2EEV
openwall.com/lists/oss-security/2026/10/19/4
suse.com/support/update/announcement/2026/suse-su-20264926-1
bugzilla.suse.com/1249331
bugzilla.suse.com/1267546
bugzilla.suse.com/1267547
bugzilla.suse.com/1286166
bugzilla.suse.com/1286167
bugzilla.suse.com/1286168
bugzilla.suse.com/1286169
bugzilla.suse.com/1286170
bugzilla.suse.com/1286173
bugzilla.suse.com/1286174
bugzilla.suse.com/1286175
bugzilla.suse.com/1286176
bugzilla.suse.com/1286177
bugzilla.suse.com/1286179
bugzilla.suse.com/1286180
bugzilla.suse.com/1286181
bugzilla.suse.com/1286182
bugzilla.suse.com/1286183
suse.com/security/cve/CVE-2025-40929
suse.com/security/cve/CVE-2026-110672
suse.com/security/cve/CVE-2026-110673
suse.com/security/cve/CVE-2026-110674
suse.com/security/cve/CVE-2026-110675
suse.com/security/cve/CVE-2026-110676
suse.com/security/cve/CVE-2026-110677
suse.com/security/cve/CVE-2026-110678
suse.com/security/cve/CVE-2026-110680
suse.com/security/cve/CVE-2026-110681
suse.com/security/cve/CVE-2026-110682
suse.com/security/cve/CVE-2026-110684
suse.com/security/cve/CVE-2026-110685
suse.com/security/cve/CVE-2026-110686
suse.com/security/cve/CVE-2026-110687
suse.com/security/cve/CVE-2026-110688
suse.com/security/cve/CVE-2026-9334
suse.com/security/cve/CVE-2026-9516
ubuntu.com/security/CVE-2026-110686
cve.org/CVERecord?id=CVE-2026-110686
lists.security.metacpan.org/cve-announce/msg/44479884
Left out here: the rest of 2 source descriptions. The JSON record has them.