[openssh-commits] [openssh] 02/05: disallow remote addition of FIDO/PKCS11 keys
git+noreply at mindrot.org
git+noreply at mindrot.org
Thu Jul 20 00:31:27 AEST 2023
This is an automated email from the git hooks/post-receive script.
djm pushed a commit to branch V_9_3
in repository openssh.
commit d7790cdce72a1b6982795baa2b4d6f0bdbb0100d
Author: Damien Miller <djm at mindrot.org>
Date: Fri Jul 7 13:30:15 2023 +1000
disallow remote addition of FIDO/PKCS11 keys
Depends on the local client performing the session-bind at openssh.com
operation, so non-OpenSSH local client may circumvent this.
---
ssh-agent.1 | 22 ++++++++++++++++++++--
ssh-agent.c | 21 ++++++++++++++++++++-
2 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/ssh-agent.1 b/ssh-agent.1
index b0bf65da..97f4cab0 100644
--- a/ssh-agent.1
+++ b/ssh-agent.1
@@ -107,9 +107,27 @@ environment variable).
.It Fl O Ar option
Specify an option when starting
.Nm .
-Currently only one option is supported:
+Currently two options are supported:
+.Cm allow-remote-pkcs11
+and
.Cm no-restrict-websafe .
-This instructs
+.Pp
+The
+.Cm allow-remote-pkcs11
+option allows clients of a forwarded
+.Nm
+to load PKCS#11 or FIDO provider libraries.
+By default only local clients may perform this operation.
+Note that signalling that a
+.Nm
+client remote is performed by
+.Xr ssh 1 ,
+and use of other tools to forward access to the agent socket may circumvent
+this restriction.
+.Pp
+The
+.Cm no-restrict-websafe ,
+instructs
.Nm
to permit signatures using FIDO keys that might be web authentication
requests.
diff --git a/ssh-agent.c b/ssh-agent.c
index 618bb198..8ea831f4 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -169,6 +169,12 @@ char socket_dir[PATH_MAX];
/* Pattern-list of allowed PKCS#11/Security key paths */
static char *allowed_providers;
+/*
+ * Allows PKCS11 providers or SK keys that use non-internal providers to
+ * be added over a remote connection (identified by session-bind at openssh.com).
+ */
+static int remote_add_provider;
+
/* locking */
#define LOCK_SIZE 32
#define LOCK_SALT_SIZE 16
@@ -1228,6 +1234,12 @@ process_add_identity(SocketEntry *e)
if (strcasecmp(sk_provider, "internal") == 0) {
debug_f("internal provider");
} else {
+ if (e->nsession_ids != 0 && !remote_add_provider) {
+ verbose("failed add of SK provider \"%.100s\": "
+ "remote addition of providers is disabled",
+ sk_provider);
+ goto out;
+ }
if (realpath(sk_provider, canonical_provider) == NULL) {
verbose("failed provider \"%.100s\": "
"realpath: %s", sk_provider,
@@ -1391,6 +1403,11 @@ process_add_smartcard_key(SocketEntry *e)
error_f("failed to parse constraints");
goto send;
}
+ if (e->nsession_ids != 0 && !remote_add_provider) {
+ verbose("failed PKCS#11 add of \"%.100s\": remote addition of "
+ "providers is disabled", provider);
+ goto send;
+ }
if (realpath(provider, canonical_provider) == NULL) {
verbose("failed PKCS#11 add of \"%.100s\": realpath: %s",
provider, strerror(errno));
@@ -2050,7 +2067,9 @@ main(int ac, char **av)
break;
case 'O':
if (strcmp(optarg, "no-restrict-websafe") == 0)
- restrict_websafe = 0;
+ restrict_websafe = 0;
+ else if (strcmp(optarg, "allow-remote-pkcs11") == 0)
+ remote_add_provider = 1;
else
fatal("Unknown -O option");
break;
--
To stop receiving notification emails like this one, please contact
djm at mindrot.org.
More information about the openssh-commits
mailing list