Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/crypto/external/bsd/openssh/dist Import OpenSSH 9.3 + the fi...
details: https://anonhg.NetBSD.org/src/rev/7874bd408ec7
branches: trunk
changeset: 378207:7874bd408ec7
user: christos <christos%NetBSD.org@localhost>
date: Wed Jul 26 17:31:29 2023 +0000
description:
Import OpenSSH 9.3 + the fix from p2 for the PKCS#11 remote provider
The previous version was OpenSSH 9.1
OpenSSH 9.3p2 (2023-07-19)
OpenSSH 9.3p2 was released on 2023-07-19. It is available from the
mirrors listed at https://www.openssh.com/.
OpenSSH is a 100% complete SSH protocol 2.0 implementation and
includes sftp client and server support.
Once again, we would like to thank the OpenSSH community for their
continued support of the project, especially those who contributed
code or patches, reported bugs, tested snapshots or donated to the
project. More information on donations may be found at:
https://www.openssh.com/donations.html
Changes since OpenSSH 9.3
=========================
This release fixes a security bug.
Security
========
Fix CVE-2023-38408 - a condition where specific libaries loaded via
ssh-agent(1)'s PKCS#11 support could be abused to achieve remote
code execution via a forwarded agent socket if the following
conditions are met:
* Exploitation requires the presence of specific libraries on
the victim system.
* Remote exploitation requires that the agent was forwarded
to an attacker-controlled system.
Exploitation can also be prevented by starting ssh-agent(1) with an
empty PKCS#11/FIDO allowlist (ssh-agent -P '') or by configuring
an allowlist that contains only specific provider libraries.
This vulnerability was discovered and demonstrated to be exploitable
by the Qualys Security Advisory team.
In addition to removing the main precondition for exploitation,
this release removes the ability for remote ssh-agent(1) clients
to load PKCS#11 modules by default (see below).
Potentially-incompatible changes
--------------------------------
* ssh-agent(8): the agent will now refuse requests to load PKCS#11
modules issued by remote clients by default. A flag has been added
to restore the previous behaviour "-Oallow-remote-pkcs11".
Note that ssh-agent(8) depends on the SSH client to identify
requests that are remote. The OpenSSH >=8.9 ssh(1) client does
this, but forwarding access to an agent socket using other tools
may circumvent this restriction.
Checksums:
==========
- SHA1 (openssh-9.3p2.tar.gz) = 219cf700c317f400bb20b001c0406056f7188ea4
- SHA256 (openssh-9.3p2.tar.gz) = IA6+FH9ss/EB/QzfngJEKvfdyimN/9n0VoeOfMrGdug=
Please note that the SHA256 signatures are base64 encoded and not
hexadecimal (which is the default for most checksum tools). The PGP
key used to sign the releases is available from the mirror sites:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc
Reporting Bugs:
===============
- Please read https://www.openssh.com/report.html
Security bugs should be reported directly to openssh%openssh.com@localhost
OpenSSH 9.3/9.3p1 (2023-03-15)
OpenSSH 9.3 was released on 2023-03-15. It is available from the
mirrors listed at https://www.openssh.com/.
OpenSSH is a 100% complete SSH protocol 2.0 implementation and
includes sftp client and server support.
Once again, we would like to thank the OpenSSH community for their
continued support of the project, especially those who contributed
code or patches, reported bugs, tested snapshots or donated to the
project. More information on donations may be found at:
https://www.openssh.com/donations.html
Changes since OpenSSH 9.2
=========================
This release fixes a number of security bugs.
Security
========
This release contains fixes for a security problem and a memory
safety problem. The memory safety problem is not believed to be
exploitable, but we report most network-reachable memory faults as
security bugs.
* ssh-add(1): when adding smartcard keys to ssh-agent(1) with the
per-hop destination constraints (ssh-add -h ...) added in OpenSSH
8.9, a logic error prevented the constraints from being
communicated to the agent. This resulted in the keys being added
without constraints. The common cases of non-smartcard keys and
keys without destination constraints are unaffected. This problem
was reported by Luci Stanescu.
* ssh(1): Portable OpenSSH provides an implementation of the
getrrsetbyname(3) function if the standard library does not
provide it, for use by the VerifyHostKeyDNS feature. A
specifically crafted DNS response could cause this function to
perform an out-of-bounds read of adjacent stack data, but this
condition does not appear to be exploitable beyond denial-of-
service to the ssh(1) client.
The getrrsetbyname(3) replacement is only included if the system's
standard library lacks this function and portable OpenSSH was not
compiled with the ldns library (--with-ldns). getrrsetbyname(3) is
only invoked if using VerifyHostKeyDNS to fetch SSHFP records. This
problem was found by the Coverity static analyzer.
New features
------------
* ssh-keygen(1), ssh-keyscan(1): accept -Ohashalg=sha1|sha256 when
outputting SSHFP fingerprints to allow algorithm selection. bz3493
* sshd(8): add a `sshd -G` option that parses and prints the
effective configuration without attempting to load private keys
and perform other checks. This allows usage of the option before
keys have been generated and for configuration evaluation and
verification by unprivileged users.
Bugfixes
--------
* scp(1), sftp(1): fix progressmeter corruption on wide displays;
bz3534
* ssh-add(1), ssh-keygen(1): use RSA/SHA256 when testing usability
of private keys as some systems are starting to disable RSA/SHA1
in libcrypto.
* sftp-server(8): fix a memory leak. GHPR363
* ssh(1), sshd(8), ssh-keyscan(1): remove vestigal protocol
compatibility code and simplify what's left.
* Fix a number of low-impact Coverity static analysis findings.
These include several reported via bz2687
* ssh_config(5), sshd_config(5): mention that some options are not
first-match-wins.
* Rework logging for the regression tests. Regression tests will now
capture separate logs for each ssh and sshd invocation in a test.
* ssh(1): make `ssh -Q CASignatureAlgorithms` work as the manpage
says it should; bz3532.
* ssh(1): ensure that there is a terminating newline when adding a
new entry to known_hosts; bz3529
Portability
-----------
* sshd(8): harden Linux seccomp sandbox. Move to an allowlist of
mmap(2), madvise(2) and futex(2) flags, removing some concerning
kernel attack surface.
* sshd(8): improve Linux seccomp-bpf sandbox for older systems;
bz3537
Checksums:
==========
- SHA1 (openssh-9.3.tar.gz) = 5f9d2f73ddfe94f3f0a78bdf46704b6ad7b66ec7
- SHA256 (openssh-9.3.tar.gz) = eRcXkFZByz70DUBUcyIdvU0pVxP2X280FrmV8pyUdrk=
- SHA1 (openssh-9.3p1.tar.gz) = 610959871bf8d6baafc3525811948f85b5dd84ab
- SHA256 (openssh-9.3p1.tar.gz) = 6bq6dwGnalHz2Fpiw4OjydzZf6kAuFm8fbEUwYaK+Kg=
Please note that the SHA256 signatures are base64 encoded and not
hexadecimal (which is the default for most checksum tools). The PGP
key used to sign the releases is available from the mirror sites:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc
Reporting Bugs:
===============
- Please read https://www.openssh.com/report.html
Security bugs should be reported directly to openssh%openssh.com@localhost
OpenSSH 9.2/9.2p1 (2023-02-02)
OpenSSH 9.2 was released on 2023-02-02. It is available from the
mirrors listed at https://www.openssh.com/.
OpenSSH is a 100% complete SSH protocol 2.0 implementation and
includes sftp client and server support.
Once again, we would like to thank the OpenSSH community for their
continued support of the project, especially those who contributed
code or patches, reported bugs, tested snapshots or donated to the
project. More information on donations may be found at:
https://www.openssh.com/donations.html
Changes since OpenSSH 9.1
=========================
This release fixes a number of security bugs.
Security
========
This release contains fixes for two security problems and a memory
safety problem. The memory safety problem is not believed to be
exploitable, but we report most network-reachable memory faults as
security bugs.
* sshd(8): fix a pre-authentication double-free memory fault
introduced in OpenSSH 9.1. This is not believed to be exploitable,
and it occurs in the unprivileged pre-auth process that is
subject to chroot(2) and is further sandboxed on most major
platforms.
* ssh(8): in OpenSSH releases after 8.7, the PermitRemoteOpen option
would ignore its first argument unless it was one of the special
keywords "any" or "none", causing the permission list to fail open
if only one permission was specified. bz3515
* ssh(1): if the CanonicalizeHostname and CanonicalizePermittedCNAMEs
options were enabled, and the system/libc resolver did not check
that names in DNS responses were valid, then use of these options
could allow an attacker with control of DNS to include invalid
characters (possibly including wildcards) in names added to
known_hosts files when they were updated. These names would still
have to match the CanonicalizePermittedCNAMEs allow-list, so
practical exploitation appears unlikely.
Potentially-incompatible changes
--------------------------------
* ssh(1): add a new EnableEscapeCommandline ssh_config(5) option that
controls whether the client-side ~C escape sequence that provides a
command-line is available. Among other things, the ~C command-line
could be used to add additional port-forwards at runtime.
This option defaults to "no", disabling the ~C command-line that
was previously enabled by default. Turning off the command-line
allows platforms that support sandboxing of the ssh(1) client
(currently only OpenBSD) to use a stricter default sandbox policy.
New features
------------
* sshd(8): add support for channel inactivity timeouts via a new
sshd_config(5) ChannelTimeout directive. This allows channels that
have not seen traffic in a configurable interval to be
automatically closed. Different timeouts may be applied to session,
X11, agent and TCP forwarding channels.
* sshd(8): add a sshd_config UnusedConnectionTimeout option to
terminate client connections that have no open channels for a
length of time. This complements the ChannelTimeout option above.
* sshd(8): add a -V (version) option to sshd like the ssh client has.
* ssh(1): add a "Host" line to the output of ssh -G showing the
original hostname argument. bz3343
* scp(1), sftp(1): add a -X option to both scp(1) and sftp(1) to
allow control over some SFTP protocol parameters: the copy buffer
length and the number of in-flight requests, both of which are used
during upload/download. Previously these could be controlled in
sftp(1) only. This makes them available in both SFTP protocol
clients using the same option character sequence.
* ssh-keyscan(1): allow scanning of complete CIDR address ranges,
e.g. "ssh-keyscan 192.168.0.0/24". If a CIDR range is passed, then
it will be expanded to all possible addresses in the range
including the all-0s and all-1s addresses. bz#976
* ssh(1): support dynamic remote port forwarding in escape
command-line's -R processing. bz#3499
Bugfixes
--------
* ssh(1): when restoring non-blocking mode to stdio fds, restore
exactly the flags that ssh started with and don't just clobber them
with zero, as this could also remove the append flag from the set.
bz3523
* ssh(1): avoid printf("%s", NULL) if using UserKnownHostsFile=none
and a hostkey in one of the system known hosts file changes.
* scp(1): switch scp from using pipes to a socket-pair for
communication with its ssh sub-processes, matching how sftp(1)
operates.
* sshd(8): clear signal mask early in main(); sshd may have been
started with one or more signals masked (sigprocmask(2) is not
cleared on fork/exec) and this could interfere with various things,
e.g. the login grace timer. Execution environments that fail to
clear the signal mask before running sshd are clearly broken, but
apparently they do exist.
* ssh(1): warn if no host keys for hostbased auth can be loaded.
* sshd(8): Add server debugging for hostbased auth that is queued and
sent to the client after successful authentication, but also logged
to assist in diagnosis of HostbasedAuthentication problems. bz3507
* ssh(1): document use of the IdentityFile option as being usable to
list public keys as well as private keys. GHPR352
* sshd(8): check for and disallow MaxStartups values less than or
equal to zero during config parsing, rather than failing later at
runtime. bz3489
* ssh-keygen(1): fix parsing of hex cert expiry times specified on
the command-line when acting as a CA.
* scp(1): when scp(1) is using the SFTP protocol for transport (the
default), better match scp/rcp's handling of globs that don't match
the globbed characters but do match literally (e.g. trying to
transfer a file named "foo.[1]"). Previously scp(1) in SFTP mode
would not match these pathnames but legacy scp/rcp mode would.
bz3488
* ssh-agent(1): document the "-O no-restrict-websafe" command-line
option.
* ssh(1): honour user's umask(2) if it is more restrictive then the
ssh default (022).
Portability
-----------
* sshd(8): allow writev(2) in the Linux seccomp sandbox. This seems
to be used by recent glibcs at least in some configurations during
error conditions. bz3512.
* sshd(8): simply handling of SSH_CONNECTION PAM env var, removing
global variable and checking the return value from pam_putenv.
bz3508
* sshd(8): disable SANDBOX_SECCOMP_FILTER_DEBUG that was mistakenly
enabled during the OpenSSH 9.1 release cycle.
* misc: update autotools and regenerate the config files using the
latest autotools
* all: use -fzero-call-used-regs=used on clang 15 instead of
-fzero-call-used-reg=all, as some versions of clang 15 have
miscompile code when it was enabled. bz3475
* sshd(8): defer PRNG seeding until after the initial closefrom(2)
call. PRNG seeding will initialize OpenSSL, and some engine
providers (e.g. Intel's QAT) will open descriptors for their own
use that closefrom(2) could clobber. bz3483
* misc: in the poll(2)/ppoll(2) compatibility code, avoid assuming
the layout of fd_set.
* sftp-server(8), ssh-agent(1): fix ptrace(2) disabling on older
FreeBSD kernels. Some versions do not support using id 0 to refer
to the current PID for procctl, so try again with getpid()
explicitly before failing.
* configure.ac: fix -Wstrict-prototypes in configure test code.
Clang 16 now warns on this and legacy prototypes will be removed
in C23. GHPR355
* configure.ac: fix setres*id checks to work with clang-16. glibc
has the prototypes for setresuid behind _GNU_SOURCE, and clang 16
will error out on implicit function definitions. bz3497
Checksums:
==========
- SHA1 (openssh-9.2.tar.gz) = e4b806b7c81b87d6c90afe97b3d016ba6cf3ba1c
- SHA256 (openssh-9.2.tar.gz) = yYe9uaaWSeetXGXOxuaaEiIsLnvITmGW+l5dgMZb9QU=
- SHA1 (openssh-9.2p1.tar.gz) = 3b172b8e971773a7018bbf3231f6589ae539ca4b
- SHA256 (openssh-9.2p1.tar.gz) = P2bb8WVftF9Q4cVtpiqwEhjCKIB7ITONY068351xz0Y=
Please note that the SHA256 signatures are base64 encoded and not
hexadecimal (which is the default for most checksum tools). The PGP
key used to sign the releases is available from the mirror sites:
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc
Reporting Bugs:
===============
- Please read https://www.openssh.com/report.html
Security bugs should be reported directly to openssh%openssh.com@localhost
diffstat:
crypto/external/bsd/openssh/dist/addr.h | 4 +
crypto/external/bsd/openssh/dist/ed25519.sh | 119 ++++++++++++++++++++++++++
crypto/external/bsd/openssh/dist/sntrup761.sh | 5 +-
3 files changed, 126 insertions(+), 2 deletions(-)
diffs (167 lines):
diff -r 0f4830eea4fd -r 7874bd408ec7 crypto/external/bsd/openssh/dist/addr.h
--- a/crypto/external/bsd/openssh/dist/addr.h Wed Jul 26 10:46:01 2023 +0000
+++ b/crypto/external/bsd/openssh/dist/addr.h Wed Jul 26 17:31:29 2023 +0000
@@ -52,9 +52,13 @@ int addr_sa_pton(const char *h, const ch
int addr_pton_cidr(const char *p, struct xaddr *n, u_int *l);
int addr_ntop(const struct xaddr *n, char *p, size_t len);
int addr_and(struct xaddr *dst, const struct xaddr *a, const struct xaddr *b);
+int addr_or(struct xaddr *dst, const struct xaddr *a, const struct xaddr *b);
int addr_cmp(const struct xaddr *a, const struct xaddr *b);
int addr_is_all0s(const struct xaddr *n);
int addr_host_is_all0s(const struct xaddr *n, u_int masklen);
+int addr_host_to_all0s(struct xaddr *a, u_int masklen);
+int addr_host_to_all1s(struct xaddr *a, u_int masklen);
int addr_netmatch(const struct xaddr *host, const struct xaddr *net,
u_int masklen);
+void addr_increment(struct xaddr *a);
#endif /* _ADDR_H */
diff -r 0f4830eea4fd -r 7874bd408ec7 crypto/external/bsd/openssh/dist/ed25519.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crypto/external/bsd/openssh/dist/ed25519.sh Wed Jul 26 17:31:29 2023 +0000
@@ -0,0 +1,119 @@
+#!/bin/sh
+# $OpenBSD: ed25519.sh,v 1.1 2023/01/15 23:05:32 djm Exp $
+# Placed in the Public Domain.
+#
+AUTHOR="supercop-20221122/crypto_sign/ed25519/ref/implementors"
+FILES="
+ supercop-20221122/crypto_verify/32/ref/verify.c
+ supercop-20221122/crypto_sign/ed25519/ref/fe25519.h
+ supercop-20221122/crypto_sign/ed25519/ref/fe25519.c
+ supercop-20221122/crypto_sign/ed25519/ref/sc25519.h
+ supercop-20221122/crypto_sign/ed25519/ref/sc25519.c
+ supercop-20221122/crypto_sign/ed25519/ref/ge25519.h
+ supercop-20221122/crypto_sign/ed25519/ref/ge25519.c
+ supercop-20221122/crypto_sign/ed25519/ref/keypair.c
+ supercop-20221122/crypto_sign/ed25519/ref/sign.c
+ supercop-20221122/crypto_sign/ed25519/ref/open.c
+"
+###
+
+DATA="supercop-20221122/crypto_sign/ed25519/ref/ge25519_base.data"
+
+set -e
+cd $1
+echo -n '/* $'
+echo 'OpenBSD: $ */'
+echo
+echo '/*'
+echo ' * Public Domain, Authors:'
+sed -e '/Alphabetical order:/d' -e 's/^/ * - /' < $AUTHOR
+echo ' */'
+echo
+echo '#include <string.h>'
+echo
+echo '#include "crypto_api.h"'
+echo
+# Map the types used in this code to the ones in crypto_api.h. We use #define
+# instead of typedef since some systems have existing intXX types and do not
+# permit multiple typedefs even if they do not conflict.
+for t in int8 uint8 int16 uint16 int32 uint32 int64 uint64; do
+ echo "#define $t crypto_${t}"
+done
+echo
+for i in $FILES; do
+ echo "/* from $i */"
+ # Changes to all files:
+ # - inline ge25519_base.data where it is included
+ # - expand CRYPTO_NAMESPACE() namespacing define
+ # - remove all includes, we inline everything required.
+ # - make functions not required elsewhere static.
+ # - rename the functions we do use.
+ sed \
+ -e "/#include \"ge25519_base.data\"/r $DATA" \
+ -e "/#include/d" \
+ -e "s/^void /static void /g" \
+ -e 's/CRYPTO_NAMESPACE[(]\([a-zA-Z0-9_]*\)[)]/crypto_sign_ed25519_ref_\1/g' \
+ $i | \
+ case "$i" in
+ */crypto_verify/32/ref/verify.c)
+ # rename crypto_verify() to the name that the ed25519 code expects.
+ sed -e "/^#include.*/d" \
+ -e "s/crypto_verify/crypto_verify_32/g" \
+ -e "s/^int /static int /g"
+ ;;
+ */crypto_sign/ed25519/ref/sign.c)
+ # rename signing function to the name OpenSSH expects
+ sed -e "s/crypto_sign/crypto_sign_ed25519/g"
+ ;;
+ */crypto_sign/ed25519/ref/keypair.c)
+ # rename key generation function to the name OpenSSH expects
+ sed -e "s/crypto_sign_keypair/crypto_sign_ed25519_keypair/g"
+ ;;
+ */crypto_sign/ed25519/ref/open.c)
+ # rename verification function to the name OpenSSH expects
+ sed -e "s/crypto_sign_open/crypto_sign_ed25519_open/g"
+ ;;
+ */crypto_sign/ed25519/ref/fe25519.*)
+ # avoid a couple of name collions with other files
+ sed -e "s/reduce_add_sub/fe25519_reduce_add_sub/g" \
+ -e "s/ equal[(]/ fe25519_equal(/g" \
+ -e "s/^int /static int /g"
+ ;;
+ */crypto_sign/ed25519/ref/sc25519.h)
+ # Lots of unused prototypes to remove
+ sed -e "s/^int /static int /g" \
+ -e '/shortsc25519_from16bytes/d' \
+ -e '/sc25519_iszero_vartime/d' \
+ -e '/sc25519_isshort_vartime/d' \
+ -e '/sc25519_lt_vartime/d' \
+ -e '/sc25519_sub_nored/d' \
+ -e '/sc25519_mul_shortsc/d' \
+ -e '/sc25519_from_shortsc/d' \
+ -e '/sc25519_window5/d'
+ ;;
+ */crypto_sign/ed25519/ref/sc25519.c)
+ # Lots of unused code to remove, some name collisions to avoid
+ sed -e "s/reduce_add_sub/sc25519_reduce_add_sub/g" \
+ -e "s/ equal[(]/ sc25519_equal(/g" \
+ -e "s/^int /static int /g" \
+ -e "s/m[[]/sc25519_m[/g" \
+ -e "s/mu[[]/sc25519_mu[/g" \
+ -e '/shortsc25519_from16bytes/,/^}$/d' \
+ -e '/sc25519_iszero_vartime/,/^}$/d' \
+ -e '/sc25519_isshort_vartime/,/^}$/d' \
+ -e '/sc25519_lt_vartime/,/^}$/d' \
+ -e '/sc25519_sub_nored/,/^}$/d' \
+ -e '/sc25519_mul_shortsc/,/^}$/d' \
+ -e '/sc25519_from_shortsc/,/^}$/d' \
+ -e '/sc25519_window5/,/^}$/d'
+ ;;
+ */crypto_sign/ed25519/ref//ge25519.*)
+ sed -e "s/^int /static int /g"
+ ;;
+ # Default: pass through.
+ *)
+ cat
+ ;;
+ esac | \
+ sed -e 's/[ ]*$//'
+done
diff -r 0f4830eea4fd -r 7874bd408ec7 crypto/external/bsd/openssh/dist/sntrup761.sh
--- a/crypto/external/bsd/openssh/dist/sntrup761.sh Wed Jul 26 10:46:01 2023 +0000
+++ b/crypto/external/bsd/openssh/dist/sntrup761.sh Wed Jul 26 17:31:29 2023 +0000
@@ -1,5 +1,5 @@
#!/bin/sh
-# $OpenBSD: sntrup761.sh,v 1.5 2021/01/08 02:33:13 dtucker Exp $
+# $OpenBSD: sntrup761.sh,v 1.7 2023/01/11 02:13:52 djm Exp $
# Placed in the Public Domain.
#
AUTHOR="supercop-20201130/crypto_kem/sntrup761/ref/implementors"
@@ -45,7 +45,7 @@ for i in $FILES; do
# - remove all includes, we inline everything required.
# - make functions not required elsewhere static.
# - rename the functions we do use.
- # - remove unneccesary defines and externs.
+ # - remove unnecessary defines and externs.
sed -e "/#include/d" \
-e "s/crypto_kem_/crypto_kem_sntrup761_/g" \
-e "s/^void /static void /g" \
@@ -54,6 +54,7 @@ for i in $FILES; do
-e "/^extern /d" \
-e '/CRYPTO_NAMESPACE/d' \
-e "/^#define int32 crypto_int32/d" \
+ -e 's/[ ]*$//' \
$i | \
case "$i" in
# Use int64_t for intermediate values in int32_MINMAX to prevent signed
Home |
Main Index |
Thread Index |
Old Index