·
36 commits
to master
since this release
Vulnerabilities
- [Low] CVE-2026-0930. Potential read out of bounds case with wolfSSHd on
Windows while handling a terminal resize request. An authenticated user could
trigger the out of bounds read after establishing a connection which would
leak the adjacent stack memory to the pseudo-console output. Thanks to Luigino
Camastra and Pavel Kohout for the report. Fixed in PR 864
New Features
- Added ML-KEM hybrid KEX algorithms
mlkem1024nistp384-sha384and
mlkem768x25519-sha256from draft-ietf-sshm-mlkem-hybrid-kex, with KEX tests
driven by name and a GitHub action testing interop against OpenSSH. (PR 869) - Allowed building wolfSSH against a wolfSSL FIPS build that has HashDRBG
disabled. (PR 833) - Added
lcdandllscommands to the SFTP example client for changing and
listing the local working directory within a session. (PR 909) - Added a public accessor function for retrieving a channel's type. (PR 873)
- Added client-side support for
rsa-sha2-512signatures, separating the
key type from the signature type sossh-rsakeys can be used with
ssh-rsa,rsa-sha2-256, orrsa-sha2-512signatures. (PR 890) - Added new CI workflows: codespell, multi-compiler builds (gcc 11/12/13 and
clang 14/15/17), and sanitizer builds (ASan, UBSan, LeakSan). (PR 884) - Added a GitHub action to run automated Coverity scans. (PR 872)
- Added SFTP contention testing that simulates network latency with
netem
to exercise the non-blocking SFTP server paths. (PR 877) - Added integration tests for client public-key authentication covering
valid RSA, valid ECC, and wrong-key rejection. (PR 913) - Added a unit test for
VerifyMacusing a new internal-only test entry
point that injects packets with corrupted MACs. (PR 912) - Added a Windows wolfsshd to wolfsftp large-transfer test and an additional
large SFTP transfer test with an enlarged SFTP read/write buffer. (PR 874) - Added a forwarding regression test for the echoserver. (PR 874)
Improvements
- Replaced
WMEMCMPinCheckAuthKeysLinewith a constant-time comparison
to avoid leaking authorized-key material through timing. (PR 915) - Switched SFTP
RecvOpento use the sameGetAndCleanPath()helper that
the other SFTP handlers use. (PR 867) - Hardened
wolfSSH_CleanPathused by SCP. (PR 865) - Reworked
wolfSSH_SFTP_RecvOpento allocate the response buffer outside
the success path and added a centralized cleanup phase so failure cases
send a proper SFTP status packet. (PR 905) - Reworked the SFTP example tests to use a table linking each command to
its expected output, cleaned up working directories before each run, and
fixed an argument-parsing underflow when commands receive empty args.
(PR 911) - Hardened
SendUserAuthKeyboardResponseagainst nullsshand missing
userAuthCb, validatedPreparePacket()success, and added a regression
test. (PR 910) - Made SFTP send/read handling more robust around multi-byte passwords and
cleaned up file mode and attribute reporting. (PR 882) - Added rekey support to additional SFTP client commands, switched
wolfsftp.cto useNoticeErrorconsistently, and fixed forwarding and
agent handling in the echoserver. (PR 874) - Validated channel-accept request and reply payloads. (PR 902)
- Hardened
DoKexDhReply()to reject the server's public key when no
PublicKeyCheckcallback is registered, with a regression test added.
(PR 917) - Hardened
DoGlobalRequestFwd()to rejecttcpip-forwardglobal requests
when nofwdCbis registered, and deferredSSH_MSG_REQUEST_SUCCESSuntil
the policy callback approves. (PR 918) - Hardened
DoChannelOpen()to reject channel-open requests when the
required callback is not registered, with a regression test added.
(PR 919) - Added validation of the server's DH group parameters in
DoKexDhGexGroupso the primepis verified to be safe (pprime and
(p-1)/2prime), plus unit tests covering known safe and unsafe primes.
(PR 922) - Added preprocessor guards so the Curve25519 union member used by the
hybrid Curve25519+ML-KEM paths is only required when one of those KEX
modes is enabled. (PR 901) - Reorganized SFTP function placement, prototypes, and build guards, and
fixed mismatched guards aroundSFTP_FreeHandlesin
wolfSSH_SFTP_free. (PR 891) - Cleaned up macOS threading by switching to named POSIX semaphores and
consolidating semaphore use behind a single wrapper API. (PR 895) - Improved
wolfSSH_ProcessBufferto validate the input type, handled
non-WOLFSSH_CERTSbuilds inSendKexDhReply, allowed
DoUserAuthRequestRsa()andDoUserAuthRequestRsaCert()to accept
ssh-rsa,rsa-sha2-256, andrsa-sha2-512, and added the
test_wolfSSH_CTX_UsePrivateKey_buffer_pemAPI test. (PR 906) - Updated the FatFS test to cache the source archive and follow the same
wolfSSL build pattern as the other workflows. (PR 878) - Avoided setting the terminal size to 0x0 when running the echoserver in
echo mode, which left vim and other tools mis-sized after tests. (PR 868) - Fixed an
snprintfformat-truncation warning in the wolfsshd test
harness and usedsizeofto size command buffers. (PR 866) - Misc cleanup: whitespace in the global request functions and split the
echoserver portion of the testsuite into its own function. (PR 873)
Fixes
- Fixed an SFTP server hang on
WS_WANT_WRITEwith non-blocking sockets:
wolfSSH_SFTP_buffer_send()now flushes any pending output buffered from
a previousWS_WANT_WRITEbefore queuing more data. (PR 876) - Fixed a Coverity untrusted-divisor finding by reworking
ato32()to mask
and shift defensively. (PR 870, CID 572837) - Simplified and fixed
AddAssign64whenWOLFSSL_MAX_32BITis not
defined. (PR 894) - Added bounds checks in the FatFS-backed
ff_close,ff_pwrite, and
ff_preadSFTP helpers. (PR 904) - Fixed
wolfSSH_AGENT_Relay()to evaluate the size return rather than the
status code. (PR 903) - Fixed
wolfSSH_DoModes()to update the requested output flags rather
than overwriting the local mode flags. (PR 897) - Added missing
wc_HashFree()calls in the RSA/ECCBuildUserAuthRequest
paths and added Ed25519 key cleanup inFreePubKey()with a
keyAllocatedflag tracked inParseEd25519PubKey(). (PR 896) - Fixed Windows authentication:
SetupUserTokenWin()now uses
DomainName.LengthforDomainName.MaximumLength, and
CheckPasswordWIN()now computesusrWSzas a wide-character length.
(PR 898) - Fixed several smaller findings: foreground-color mask in mode 30, an
error-path guard aroundfindHandle, bounds-checkedGetSkip()use in
ParseRSAPubKey()/ParseECCPubKey(), and a length-validation bug.
(PR 899) - Fixed compilation when
WOLFSSH_NO_NISTP256_MLKEM768_SHA256is defined.
(PR 887) - Fixed a non-constant-time password-hash comparison and added missing
bounds checks inDoIgnore,DoUserAuthRequestPassword,
DoServiceRequest, andPrepareUserAuthRequestEcc, plus an unsigned-vs-
zero comparison. (PR 892) - Static-analysis fixes: uninitialized
modein FatFSff_open, an
operator-precedence bug, missingwc_ecc_init()before ECC key import,
uncheckedwc_InitRsaKeyreturn, missingbreakbetween switch cases,
and missingForceZeroon a plaintext password copy. (PR 883) - Static-analysis fixes: missing null check on a duplicated string, bounds
check on an addition using a peer value, null dereference after a failed
channel lookup, wrong pointer checked for null, and a wrong bitwise
operator when testing an attribute. (PR 881) - Static-analysis fixes: logical operator in public-key type validation,
buffer over-read inwolfSSH_DoModesterminal-mode parsing, two bugs in
PostRemoveIdagent identity removal, digest comparison inFindKeyId,
octal validation loop index inGetScpFileMode, wrong variable checked
in theDoCheckUserauth callback, and a NULL pointer dereference in
wolfSSH_SetTpmDev/wolfSSH_SetTpmKey. (PR 880) - Static-analysis fixes: an
oct2dectypo, a linked-list leak, Nucleus
month and hour handling,DoDisconnectnow signals connection
termination,DoChannelOpenreturns a proper failure response (with a
regression test), and the host-key signature algorithm name is now
validated inDoKexDhReply(). (PR 908) - Fixed
PostSignRequestto pass the correctdigestSzto
SignHashRsa(). (PR 916) - Fixed
DoChannelOpenConf()to updateidxwith the consumed length for
consistency and correctness. (PR 920) - Fixed the server-side
DoKexDhReply()to setexpectMsgIdto
MSGID_NEWKEYSbefore sending its new keys message. (PR 921)