Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessVictim installs trojanized CPAN package
-
DeliveryVictim invokes generate_certificate
-
ExploitDropper decodes base64 http URL
-
ExecutionFetch remote payload over HTTP
-
PersistExecute code in-memory as user
-
ImpactFileless arbitrary code execution
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Code review, malicious code detection
|
| Exploitation Conditions | Exploitation requires the victim to install the malicious Crypt::SelfCertificate package (versions 1.01 through 1.05) from CPAN and then call the generate_certificate function - this is the trigger, since the releases contain no test scripts or build hooks that would fire at install time. The dropper (saved as lib/Crypt/SelfCertificate/sample/validate.p12 in 1.01 or cert7.pem in 1.05) additionally requires outbound HTTP egress to reach the hardcoded, base64-obfuscated URL and for that server to still serve payload code. Limiting factors: local attack vector (AV:L), mandatory user action of running the module (UI:R), the module's obscurity/tiny install base, and dependence on network access plus a live attacker endpoint; code runs only with the privileges of the invoking user. |
| Impact | This is a genuine, high-priority supply-chain compromise rather than an inflated CVSS score. Unlike a coding flaw, CVE-2026-95831 is intentional embedded malware (CWE-506): Crypt::SelfCertificate 1.01-1.05 is a trojanized CPAN package whose generate_certificate function drops a Python script (disguised as a certificate file) that base64-deobfuscates a hardcoded http URL, fetches remote code, and executes it in-memory as the invoking user - fileless, with no dropped script persisted. The CVSS 3.1 vector (AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H = 7.8) is consistent with the description: exploitation is local, requires the victim to install and run the module (UI:R), needs no prior authentication (PR:N), and yields full C/I/A compromise. No EPSS score, no CISA KEV listing, and no independent proof-of-concept exploit are provided; note that for malicious-package cases the 'exploit' IS the shipped payload, so absence of separate POC/EPSS/KEV signals does not lower real risk. The main risk-limiting factors are that the package is obscure (small install base) and that the payload depends on the attacker's hardcoded http URL still serving code and on outbound network egress being permitted. No signal conflicts with the description; the local attack vector and required user action are the primary mitigants, not the impact magnitude. |
| Exploit ScenarioDerived | A developer installs Crypt::SelfCertificate 1.01-1.05 from CPAN and calls generate_certificate to create a self-signed certificate. The function instead writes and runs a bundled Python dropper that decodes a base64-obfuscated http URL, downloads attacker-controlled code, and executes it in memory as the current user with no file artifact left behind. No separate public exploit is needed because the malicious payload ships inside the package itself. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 22, 2026
Crypt::SelfCertificate versions 1.01 through 1.05 for Perl ship embedded malware: the module's generate_certificate routine launches a Python dropper disguised as a certificate sample file, which decodes a base64-obfuscated URL, fetches the response body over HTTP, and executes it in memory under the privileges of the invoking user. Any host that installs one of these CPAN releases and then calls the function is exposed to arbitrary code execution with high confidentiality, integrity, and availability impact (assessed CVSS 3.1 base 7.8, AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H); exploitation is unauthenticated per the vector but requires the victim to install the package and trigger the function, and there is no public exploit identified at time of analysis. Because the payload is fetched and run without writing a script to disk, it behaves as a fileless stage and leaves minimal on-host artifact beyond the installed module itself - a genuine, high-priority supply-chain compromise rather than an inflated score.
RemediationAI
No vendor-released patch identified at time of analysis; the affected artifact is malware, so the correct response is removal rather than upgrade. Uninstall or delete any installed Crypt::SelfCertificate 1.01 through 1.05 from local Perl library paths (for example via cpanm --uninstall Crypt::SelfCertificate or by manually deleting the Crypt/SelfCertificate tree from site_perl/vendor_perl), then confirm no residual copies remain by hash: any file matching SHA-256 27b2d2d3174ad771474fff2521f5084ec231e9218ea8c832515aef1cbd5897bc under a Crypt/SelfCertificate/sample path is the dropper, and archive installs matching fbff21f45ff748365062a5e36fb2d72558cad82a507a6f357f320b4fcdf07760 or 9fdfa7d69b034b77d4510cda567e8da1e486ca81c7daaadc5732a45c41d71991 should be quarantined and never re-deployed; trade-off is that any legitimate self-signed certificate generation done through this module must be replaced with a maintained alternative such as Crypt::OpenSSL::CA or direct openssl invocations. As compensating controls, block outbound HTTP from build, CI, and developer hosts that do not require it - this defeats the dropper's fetch stage but may break package mirror access and other legitimate tooling - and restrict CPAN installs to an internally vetted mirror or pinned artifact repository with digest allowlists, which adds release latency for legitimate modules. Hunt for signs of prior execution by correlating python or python3 process spawns with parent Perl processes during build or test runs, unexpected outbound HTTP from build agents, and the presence of the sample-directory filenames validate.p12 or cert7.pem in library trees; rotate any credentials, tokens, or signing keys that were accessible with the privileges of any user who ran the module. Consult the advisories at https://seclists.org/oss-sec/2026/q3/876, https://www.nntp.perl.org/group/perl.cpan.testers.discuss/2026/09/msg4754.html, and http://www.openwall.com/lists/oss-security/2026/09/22/21 for updates and additional indicators of compromise.
Affected ProductsAI
Crypt::SelfCertificate for Perl, versions 1.01 through 1.05 inclusive, distributed via CPAN (no CPE strings were supplied in the source data; the ENISA EUVD identifier is EUVD-2026-84745 and the reporting source is CPANSec). In version 1.01 the dropper is located at lib/Crypt/SelfCertificate/sample/validate.p12, and in version 1.05 at lib/Crypt/SelfCertificate/sample/cert7.pem; both files carry the SHA-256 digest 27b2d2d3174ad771474fff2521f5084ec231e9218ea8c832515aef1cbd5897bc. The corresponding distribution archives are Crypt-SelfCertificate-1.01.tar.gz with SHA-256 fbff21f45ff748365062a5e36fb2d72558cad82a507a6f357f320b4fcdf07760 and Crypt-SelfCertificate-1.05.tar.gz with SHA-256 9fdfa7d69b034b77d4510cda567e8da1e486ca81c7daaadc5732a45c41d71991. Intermediate versions 1.02 through 1.04 fall within the stated 1.01-through-1.05 range and should be treated as suspect. Vendor and community advisories describing the distribution are available at https://www.nntp.perl.org/group/perl.cpan.testers.discuss/2026/09/msg4754.html, https://seclists.org/oss-sec/2026/q3/876, and http://www.openwall.com/lists/oss-security/2026/09/22/21.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected component is a Perl distribution published to CPAN, Crypt::SelfCertificate, whose advertised purpose is self-signed certificate generation. The distribution carries an embedded malicious payload classed as CWE-506 (Embedded Malicious Code): the releases contain no test scripts or build hooks, so nothing fires at install time and the payload is instead triggered when the consumer calls generate_certificate, which runs a Python script placed in the distribution's sample directory and named to look like a certificate artifact - lib/Crypt/SelfCertificate/sample/validate.p12 in 1.01 and lib/Crypt/SelfCertificate/sample/cert7.pem in 1.05. That script holds a hardcoded HTTP URL obfuscated with base64 encoding, retrieves the referenced resource, and passes the response body directly to execution, giving a fileless remote payload stage whose delivered code is controlled entirely by the external server. Notably, the two dropper files share the identical SHA-256 digest 27b2d2d3174ad771474fff2521f5084ec231e9218ea8c832515aef1cbd5897bc, indicating the same artifact was renamed between releases, while the tarballs differ (fbff21f45ff748365062a5e36fb2d72558cad82a507a6f357f320b4fcdf07760 for 1.01 and 9fdfa7d69b034b77d4510cda567e8da1e486ca81c7daaadc5732a45c41d71991 for 1.05). The assessed vector AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H reflects that the code executes locally as the user with no privilege gain within the module, but requires the user's action of installing and invoking the module, and further depends on outbound HTTP egress reaching an attacker-controlled endpoint that is still serving payload code.
Know when Perl gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
Local vector requiring the victim to install and run the module (UI:R), no authentication (PR:N), yielding full arbitrary code execution as the user (C:H/I:H/A:H).
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
2DescriptionCVE.org
Crypt::SelfCertificate versions from 1.01 through 1.05 for Perl contains malware which executes Python code from an obfuscated URL.
The generate_certificate runs a Python script saved as a certificate file. The pyhton script attempts to retrieve code from a hardcoded http URL that is obfuscated with base64 encoding and run the response body directly.
The impact is that arbitrary code can be invoked as the user, without a dropped script being saved on the affected host.
The releases have no test scripts nor build hooks. The intention may have been to trigger the payload after installation.
For version 1.01, the dropper script is in lib/Crypt/SelfCertificate/sample/validate.p12.
For version 1.05, the dropper script is in lib/Crypt/SelfCertificate/sample/cert7.pem.
The SHA-256 digests of the files are
fbff21f45ff748365062a5e36fb2d72558cad82a507a6f357f320b4fcdf07760 Crypt-SelfCertificate-1.01.tar.gz 27b2d2d3174ad771474fff2521f5084ec231e9218ea8c832515aef1cbd5897bc lib/Crypt/SelfCertificate/sample/validate.p12
9fdfa7d69b034b77d4510cda567e8da1e486ca81c7daaadc5732a45c41d71991 Crypt-SelfCertificate-1.05.tar.gz 27b2d2d3174ad771474fff2521f5084ec231e9218ea8c832515aef1cbd5897bc lib/Crypt/SelfCertificate/sample/cert7.pem
Executive ViewAI
Crypt::SelfCertificate versions 1.01 through 1.05, a Perl module distributed via CPAN, contain embedded malware that enables unauthenticated arbitrary code execution requiring user interaction, with high confidentiality, integrity, and availability impact. Any organization whose developers or systems have installed these specific releases and call the generate_certificate function faces a supply-chain compromise that executes fileless payloads fetched over HTTP, potentially affecting workstations, CI/CD pipelines, and production hosts. Because no vendor-released patch is available and no public exploit has been identified at time of analysis, leadership should prioritize immediate inventory and removal of affected installations.
No vendor-released patch identified at time of analysis; interim mitigations include uninstalling affected Crypt::SelfCertificate versions 1.01 through 1.05, blocking installation from CPAN, avoiding calls to generate_certificate, monitoring for Perl-spawned Python processes, filtering outbound HTTP traffic, and applying least-privilege execution for hosts using the module.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
The _compile function in Maketext.pm in the Locale::Maketext implementation in Perl before 5.17.7 does not properly hand
Stack-based buffer overflow in the CPerlHost::Add method in win32/perlhost.h in Perl before 5.24.3-RC1 and 5.26.x before
The VDir::MapPathA and VDir::MapPathW functions in Perl 5.22 allow remote attackers to cause a denial of service (out-of
Perl before 5.26.3 has a buffer overflow via a crafted regular expression that triggers invalid write operations. Rated
Perl before 5.26.3 and 5.28.0 before 5.28.1 has a buffer overflow via a crafted regular expression that triggers invalid
Perl before 5.26.3 has a buffer over-read via a crafted regular expression that triggers disclosure of sensitive informa
Perl might allow context-dependent attackers to bypass the taint protection mechanism in a child process via duplicate e
CPAN.pm before 2.35 does not verify TLS certificates when downloading distributions over HTTPS. Rated high severity (CVS
The XSLoader::load method in XSLoader in Perl does not properly locate .so files when called in a string eval, which mig
In Perl through 5.26.2, the Archive::Tar module allows remote attackers to bypass a directory-traversal protection mecha
Perl before 5.30.3 on 32-bit platforms allows a heap-based buffer overflow because nested regular expression quantifiers
The (1) S_reghop3, (2) S_reghop4, and (3) S_reghopmaybe3 functions in regexec.c in Perl before 5.24.0 allow context-depe
EUVD-2026-84745
GHSA-9ppr-x3mg-6jg2
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB