Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessPublish malicious module to CPAN
-
DeliveryVictim installs IO::Socket::SSL::SelfCertificate 1.00
-
ExploitVictim calls generate_certificate()
-
ExecutionPython dropper decodes base64 HTTP URL
-
PersistFetch remote payload from hardcoded C2
-
ImpactExecute response body in-memory as user
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 | Requires the victim to install the specific malicious release IO-Socket-SSL-SelfCertificate-1.00 from CPAN AND to invoke generate_certificate(); the advisory explicitly notes there are no test scripts or build hooks, so the payload does NOT run automatically at install time and must be manually triggered. It further requires outbound HTTP egress to reach the hardcoded, base64-obfuscated C2 URL for the payload to be retrieved and executed. Limiting factors: victim must both install and call the function, the package is a v1.00 malicious upload likely removed from CPAN quickly, and blocked/proxied outbound HTTP would prevent payload retrieval. |
| Impact | This is not a conventional exploitable vulnerability but a supply-chain malware upload (CWE-506, Embedded Malicious Code): IO::Socket::SSL::SelfCertificate v1.00 on CPAN is itself a malicious dropper. The published CVSS 9.8 (AV:N/AC:L/PR:N/UI:N) overstates network-exploitability - the description explicitly states the package has NO test scripts nor build hooks, meaning it does NOT auto-execute on install and instead requires the victim to install the package AND call generate_certificate(). That makes real-world triggering user-interaction-dependent (UI:R) and effectively local, so AV:N/UI:N is misleading - verify against the reality that a human must run the function. Corroborating signals point AWAY from urgency: EPSS is 0.12% (1st percentile), it is NOT in CISA KEV, and no POC/exploit code is referenced (none is needed - the code IS the payload). The genuine risk is real but narrow: anyone who installed this specific malicious release and invoked its certificate-generation routine would fetch and execute attacker-controlled Python from a hardcoded, base64-obfuscated HTTP URL as their own user. Given the package was flagged by CPANSec and is a brand-new v1.00 malicious upload, exposure is limited to the small set of users who pulled it before removal. |
| Exploit ScenarioDerived | A developer installs IO::Socket::SSL::SelfCertificate 1.00 from CPAN (e.g., mistaking it for the legitimate IO::Socket::SSL family) and later calls generate_certificate(), which runs the bundled Python dropper (lib/IO/Socket/SSL/SelfCertificate/sample/cert.pem). The script decodes a base64-obfuscated hardcoded HTTP URL, downloads the response body, and executes it in memory as the invoking user with no file dropped to disk. No public POC is referenced because the package itself contains the live malware. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 25, 2026
The Perl CPAN distribution IO::Socket::SSL::SelfCertificate version 1.00 is itself the attack artifact: its generate_certificate() routine writes a Python script disguised as a certificate file and executes it, causing base64-obfuscated code to be fetched from a hardcoded HTTP URL and run in memory without ever dropping a script to disk. Anyone who installs the 1.00 tarball and calls that function is exposed - a local, unauthenticated action requiring user interaction (assessed CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H), rather than the remote pre-authentication scenario implied by the CNA's 9.8 network vector - and outbound HTTP egress must be reachable for the payload to be retrieved. The advisory notes there are no test scripts or build hooks, so nothing fires automatically at install time and the payload must be manually triggered; no public exploit code beyond the malicious package itself has been identified at time of analysis, EPSS is negligible at 0.12% (1st percentile), and the nearly identical CVE-2026-95831 covers the sibling Crypt::SelfCertificate module.
RemediationAI
No vendor-released patch or clean successor version is identified in the available data, because version 1.00 is a deliberately malicious upload rather than a flawed release with a fixed update; treat removal as the fix. Confirm whether IO-Socket-SSL-SelfCertificate 1.00 (or any tarball matching the published SHA-256 digests, including the -upload variant and the sample/cert.pem dropper) exists in your CPAN mirror, cartridge, or application lockfiles, and delete or pin away from it immediately; note the trade-off that pinning without deletion leaves the artifact staged for reinstall by cached mirror pulls, so purge the cached tarball as well. If 1.00 was ever installed and generate_certificate() invoked, assume code execution as the invoking user: hunt for Python child processes spawned by the Perl module, review egress logs for outbound HTTP to unexplained hardcoded hosts, rotate credentials and tokens reachable from that account, and rebuild the host rather than attempting to clean it, since the second stage runs in memory and may not persist on disk. As a durable compensating control, block or proxy outbound HTTP/S from build and CI hosts so a base64-obfuscated hardcoded URL cannot be retrieved - the trade-off is that legitimate dependency fetching, CPAN installs, and telemetry will break unless an allowlist is maintained. Cross-check for the sibling Crypt::SelfCertificate issue under CVE-2026-95831 and consult the CPAN testers advisory (https://www.nntp.perl.org/group/perl.cpan.testers.discuss/2026/09/msg4756.html), the oss-security thread (https://seclists.org/oss-sec/2026/q3/925), and the NVD entry (https://nvd.nist.gov/vuln/detail/CVE-2026-97230) for updated removal guidance.
Affected ProductsAI
The single affected artifact identified is the Perl/CPAN distribution IO-Socket-SSL-SelfCertificate version 1.00 (tarball SHA-256 ba24ee8ec3b7f47f65bed62e16fb413ace50653cf44bd8ea90914390922831e0), a malicious upload whose generate_certificate() function executes an embedded Python dropper; a second archive variant, IO-Socket-SSL-SelfCertificate-1.00-upload.tar.gz, carries SHA-256 d483cb7b23b7271cb11cf242bff4a2e1c02df0b9525eb0429abeea8961c399d5, and the dropper file itself hashes to 821d38830e5eb8607738421c25ac25f59fff02a6ab67daa32fbd020429454dac. The closely related module Crypt::SelfCertificate is tracked separately as CVE-2026-95831 and should be treated as equally suspect. No CPE strings were provided, so inventory matching must key off the distribution name, version 1.00, and the digests above; vendor and coordination details appear in the CPAN testers advisory at https://www.nntp.perl.org/group/perl.cpan.testers.discuss/2026/09/msg4756.html, the oss-security post at https://seclists.org/oss-sec/2026/q3/925, the EUVD record https://nvd.nist.gov/vuln/detail/CVE-2026-97230, and the sibling CVE record https://www.cve.org/CVERecord?id=CVE-2026-95831.
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
This is CWE-506 (Embedded Malicious Code), a supply-chain malware upload rather than a memory-safety or injection defect in otherwise legitimate code. The package is a Perl CPAN distribution; its generate_certificate() function is described as running a Python script that has been saved under the guise of a certificate file, with the dropper reported at lib/Crypt/SelfCertificate/sample/cert.pem (the accompanying digest listing shows the same component under lib/IO/Socket/SSL/SelfCertificate/sample/cert.pem). The Python stage reaches out to a hardcoded HTTP URL whose value is obfuscated with base64 encoding, then executes the response body directly, so the second-stage payload lives only in memory and leaves no dropped script for file-based detection. Because exploitation is triggered by the invoking user on the host where the module is installed and invoked, the assessed vector is AV:L with UI:R (PR:N, since the invoked code inherits the caller's privileges with no additional authentication step), which diverges sharply from the CNA's AV:N/AC:L/PR:N/UI:N 9.8 score. No official CPE strings were supplied in the source data; identification should instead rely on distribution name and version plus the published SHA-256 digests, including ba24ee8ec3b7f47f65bed62e16fb413ace50653cf44bd8ea90914390922831e0 for the IO-Socket-SSL-SelfCertificate-1.00.tar.gz archive, 821d38830e5eb8607738421c25ac25f59fff02a6ab67daa32fbd020429454dac for the sample/cert.pem dropper, and d483cb7b23b7271cb11cf242bff4a2e1c02df0b9525eb0429abeea8961c399d5 for IO-Socket-SSL-SelfCertificate-1.00-upload.tar.gz. The absence of test scripts and build hooks, while noted in the description, means the malware depends on a human or automated consumer actually invoking the certificate-generation function after installation.
Know when Python 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:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
No build/test hooks means the victim must install and manually call generate_certificate() (UI:R, effectively local), after which arbitrary code runs as the user (C/I/A:H).
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
3DescriptionCVE.org
IO::Socket::SSL::SelfCertificate versions 1.00 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.
The dropper script is in lib/Crypt/SelfCertificate/sample/cert.pem.
This is similar to CVE-2026-95831 for the module Crypt::SelfCertificate.
The SHA-256 digests of the files are
ba24ee8ec3b7f47f65bed62e16fb413ace50653cf44bd8ea90914390922831e0 IO-Socket-SSL-SelfCertificate-1.00.tar.gz 821d38830e5eb8607738421c25ac25f59fff02a6ab67daa32fbd020429454dac IO-Socket-SSL-SelfCertificate-1.00/lib/IO/Socket/SSL/SelfCertificate/sample/cert.pem
d483cb7b23b7271cb11cf242bff4a2e1c02df0b9525eb0429abeea8961c399d5 IO-Socket-SSL-SelfCertificate-1.00-upload.tar.gz
Articles & Coverage 1
Executive ViewAI
The IO::Socket::SSL::SelfCertificate Perl CPAN distribution version 1.00 is a malicious package whose generate_certificate() routine can execute obfuscated code fetched from an external URL when manually called. Organizations with developer workstations, build systems, or container images that installed this exact version face potential code execution, credential theft, and data compromise, making this a supply-chain exposure that leadership should prioritize. The risk is limited to environments where the package is present and the function is manually triggered with outbound HTTP access; no public exploit identified at time of analysis and no vendor-released patch identified at time of analysis.
No vendor-released patch identified at time of analysis. Remove or block IO::Socket::SSL::SelfCertificate 1.00, prohibit use of generate_certificate(), restrict outbound HTTP egress, enforce CPAN allowlisting/private mirrors, monitor for obfuscated Python execution from Perl processes, and treat affected hosts as compromised until forensically cleared.
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.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-86479
GHSA-559w-6g2v-jh67
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB