Net::LibSSH versions before 0.004 for Perl authenticate to an unverified server because connect never checks the host key against known_hosts.
connect reports success as soon as ssh_connect returns SSH_OK. libssh leaves the known-hosts check to the application, and this binding never makes it, so the strict_hostkeycheck and knownhosts options are set on the session and then decide nothing.
Password, agent and public-key authentication, channel and SFTP operations all run on a session whose peer was never identified, so an attacker who can redirect the connection receives the password when password authentication is used, and commands and data sent over the session.
Click to expand
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2026-94423",
"assignerOrgId": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"assignerShortName": "CPANSec",
"dateUpdated": "2026-10-21T21:22:48.593Z",
"dateReserved": "2026-09-21T15:32:37.782Z",
"datePublished": "2026-10-21T21:22:48.593Z",
"state": "PUBLISHED"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "9b29abf9-4ab0-4765-b253-1875cd9b441e",
"shortName": "CPANSec",
"dateUpdated": "2026-10-21T21:22:48.593Z"
},
"title": "Net::LibSSH versions before 0.004 for Perl authenticate to an unverified server because connect never checks the host key against known_hosts",
"descriptions": [
{
"lang": "en",
"value": "Net::LibSSH versions before 0.004 for Perl authenticate to an unverified server because connect never checks the host key against known_hosts.\n\nconnect reports success as soon as ssh_connect returns SSH_OK. libssh leaves the known-hosts check to the application, and this binding never makes it, so the strict_hostkeycheck and knownhosts options are set on the session and then decide nothing.\n\nPassword, agent and public-key authentication, channel and SFTP operations all run on a session whose peer was never identified, so an attacker who can redirect the connection receives the password when password authentication is used, and commands and data sent over the session."
}
],
"affected": [
{
"collectionURL": "https://cpan.org/modules",
"packageName": "Net-LibSSH",
"modules": [
"Net::LibSSH"
],
"programFiles": [
"LibSSH.xs"
],
"programRoutines": [
{
"name": "Net::LibSSH::connect"
}
],
"repo": "https://github.com/Getty/p5-net-libssh",
"defaultStatus": "unaffected",
"versions": [
{
"version": "0",
"status": "affected",
"versionType": "custom",
"lessThan": "0.004"
}
]
}
],
"problemTypes": [
{
"descriptions": [
{
"lang": "en",
"description": "CWE-322 Key Exchange without Entity Authentication",
"cweId": "CWE-322",
"type": "CWE"
}
]
}
],
"references": [
{
"url": "https://metacpan.org/release/GETTY/Net-LibSSH-0.004/changes",
"tags": [
"release-notes"
]
},
{
"url": "https://github.com/Getty/p5-net-libssh/commit/29f509aacddb4b282ac9eb716d5ab326686d09a4.patch",
"tags": [
"patch"
]
}
],
"solutions": [
{
"lang": "en",
"value": "Upgrade to Net-LibSSH 0.004 or later."
}
],
"credits": [
{
"lang": "en",
"value": "James Klein",
"type": "finder"
}
]
}
}
}