Skip to main content

Crypt::SelfCertificate CVE-2026-95831

| EUVDEUVD-2026-84745 HIGH
Embedded Malicious Code (CWE-506)
2026-09-22 CPANSec GHSA-9ppr-x3mg-6jg2
7.8
CVSS 3.1 · Vendor: CPANSec
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Victim installs trojanized CPAN package
  2. Delivery
    Victim invokes generate_certificate
  3. Exploit
    Dropper decodes base64 http URL
  4. Execution
    Fetch remote payload over HTTP
  5. Persist
    Execute code in-memory as user
  6. Impact
    Fileless 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Vendor (CPANSec) PRIMARY 7.8 HIGH
AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
vuln.today AI 7.8 HIGH

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).

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (CPANSec).

CVSS VectorVendor: CPANSec

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
CVE Published
Sep 22, 2026 - 18:21 cve.org
UNKNOWN (no severity yet)
CVE Published
Sep 22, 2026 - 18:21 cve.org
HIGH 7.8

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Rare
obscure single-author CPAN module, negligible enterprise deployment footprint
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

More in Perl

View all
CVE-2012-6329 HIGH POC
7.5 Jan 04

The _compile function in Maketext.pm in the Locale::Maketext implementation in Perl before 5.17.7 does not properly hand

CVE-2017-12814 CRITICAL POC
9.8 Sep 28

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

CVE-2015-8608 CRITICAL POC
9.8 Feb 07

The VDir::MapPathA and VDir::MapPathW functions in Perl 5.22 allow remote attackers to cause a denial of service (out-of

CVE-2018-18314 CRITICAL POC
9.8 Dec 07

Perl before 5.26.3 has a buffer overflow via a crafted regular expression that triggers invalid write operations. Rated

CVE-2018-18312 CRITICAL POC
9.8 Dec 05

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

CVE-2018-18313 CRITICAL POC
9.1 Dec 07

Perl before 5.26.3 has a buffer over-read via a crafted regular expression that triggers disclosure of sensitive informa

CVE-2016-2381 HIGH
7.5 Apr 08

Perl might allow context-dependent attackers to bypass the taint protection mechanism in a child process via duplicate e

CVE-2023-31484 HIGH POC
8.1 Apr 29

CPAN.pm before 2.35 does not verify TLS certificates when downloading distributions over HTTPS. Rated high severity (CVS

CVE-2016-6185 HIGH POC
7.8 Aug 02

The XSLoader::load method in XSLoader in Perl does not properly locate .so files when called in a string eval, which mig

CVE-2018-12015 HIGH POC
7.5 Jun 07

In Perl through 5.26.2, the Archive::Tar module allows remote attackers to bypass a directory-traversal protection mecha

CVE-2020-10543 HIGH
8.2 Jun 05

Perl before 5.30.3 on 32-bit platforms allows a heap-based buffer overflow because nested regular expression quantifiers

CVE-2015-8853 HIGH
7.5 May 25

The (1) S_reghop3, (2) S_reghop4, and (3) S_reghopmaybe3 functions in regexec.c in Perl before 5.24.0 allow context-depe

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy