See how rurban compares to other vendors in security performance
The Cpanel::JSON::XS package before 4.33 for Perl performs out-of-bounds accesses in a way that allows attackers to obtain sensitive information or cause a denial of service.
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.
To skip a leading 3-byte UTF-8 BOM, decodejson() advances the input scalar's string pointer past the mark with SvPVset() and restores it only on the normal return path. When decoding aborts through a Perl exception, for example a filterjsonobject callback that croaks, the restore is skipped and the scalar is left with its string pointer offset into its own buffer and a shortened length.
When that scalar is later freed, the allocator receives an invalid pointer and the interpreter aborts. A single BOM prefixed document decoded with a throwing filter callback crashes any caller.
Cpanel::JSON::XS versions before 4.41 for Perl allow type confusion via duplicate object keys when dupkeysasarrayref is enabled.
decodehv() collapses duplicate object keys into an array reference under dupkeysasarrayref. The branch reached for a duplicate key tests SvTYPE (oldvalue) != SVtRV && SvTYPE (SvRV (oldvalue)) != SVtPVAV, which evaluates SvRV(oldvalue) before establishing that oldvalue is a reference. When the existing value is a plain scalar rather than an array reference, a non-reference scalar is dereferenced as a reference.
A caller decoding untrusted JSON with dupkeysasarrayref enabled is crashed, and the incompatible access follows a pointer taken from attacker controlled scalar contents.