well, tests pass now
This commit is contained in:
787
specifications/rfc8308.txt
Normal file
787
specifications/rfc8308.txt
Normal file
@@ -0,0 +1,787 @@
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Internet Engineering Task Force (IETF) D. Bider
|
||||
Request for Comments: 8308 Bitvise Limited
|
||||
Updates: 4251, 4252, 4253, 4254 March 2018
|
||||
Category: Standards Track
|
||||
ISSN: 2070-1721
|
||||
|
||||
|
||||
Extension Negotiation in the Secure Shell (SSH) Protocol
|
||||
|
||||
Abstract
|
||||
|
||||
This memo updates RFCs 4251, 4252, 4253, and 4254 by defining a
|
||||
mechanism for Secure Shell (SSH) clients and servers to exchange
|
||||
information about supported protocol extensions confidentially after
|
||||
SSH key exchange.
|
||||
|
||||
Status of This Memo
|
||||
|
||||
This is an Internet Standards Track document.
|
||||
|
||||
This document is a product of the Internet Engineering Task Force
|
||||
(IETF). It represents the consensus of the IETF community. It has
|
||||
received public review and has been approved for publication by the
|
||||
Internet Engineering Steering Group (IESG). Further information on
|
||||
Internet Standards is available in Section 2 of RFC 7841.
|
||||
|
||||
Information about the current status of this document, any errata,
|
||||
and how to provide feedback on it may be obtained at
|
||||
https://www.rfc-editor.org/info/rfc8308.
|
||||
|
||||
Copyright Notice
|
||||
|
||||
Copyright (c) 2018 IETF Trust and the persons identified as the
|
||||
document authors. All rights reserved.
|
||||
|
||||
This document is subject to BCP 78 and the IETF Trust's Legal
|
||||
Provisions Relating to IETF Documents
|
||||
(https://trustee.ietf.org/license-info) in effect on the date of
|
||||
publication of this document. Please review these documents
|
||||
carefully, as they describe your rights and restrictions with respect
|
||||
to this document. Code Components extracted from this document must
|
||||
include Simplified BSD License text as described in Section 4.e of
|
||||
the Trust Legal Provisions and are provided without warranty as
|
||||
described in the Simplified BSD License.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 1]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Overview and Rationale ..........................................3
|
||||
1.1. Requirements Terminology ...................................3
|
||||
1.2. Wire Encoding Terminology ..................................3
|
||||
2. Extension Negotiation Mechanism .................................3
|
||||
2.1. Signaling of Extension Negotiation in SSH_MSG_KEXINIT ......3
|
||||
2.2. Enabling Criteria ..........................................4
|
||||
2.3. SSH_MSG_EXT_INFO Message ...................................4
|
||||
2.4. Message Order ..............................................5
|
||||
2.5. Interpretation of Extension Names and Values ...............6
|
||||
3. Initially Defined Extensions ....................................6
|
||||
3.1. "server-sig-algs" ..........................................6
|
||||
3.2. "delay-compression" ........................................7
|
||||
3.2.1. Awkwardly Timed Key Re-Exchange .....................9
|
||||
3.2.2. Subsequent Re-Exchange ..............................9
|
||||
3.2.3. Compatibility Note: OpenSSH up to Version 7.5 .......9
|
||||
3.3. "no-flow-control" .........................................10
|
||||
3.3.1. Prior "No Flow Control" Practice ...................10
|
||||
3.4. "elevation" ...............................................11
|
||||
4. IANA Considerations ............................................12
|
||||
4.1. Additions to Existing Registries ..........................12
|
||||
4.2. New Registry: Extension Names .............................12
|
||||
4.2.1. Future Assignments to Extension Names Registry .....12
|
||||
5. Security Considerations ........................................12
|
||||
6. References .....................................................13
|
||||
6.1. Normative References ......................................13
|
||||
6.2. Informative References ....................................13
|
||||
Acknowledgments ...................................................14
|
||||
Author's Address ..................................................14
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 2]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
1. Overview and Rationale
|
||||
|
||||
Secure Shell (SSH) is a common protocol for secure communication on
|
||||
the Internet. The original design of the SSH transport layer
|
||||
[RFC4253] lacks proper extension negotiation. Meanwhile, diverse
|
||||
implementations take steps to ensure that known message types contain
|
||||
no unrecognized information. This makes it difficult for
|
||||
implementations to signal capabilities and negotiate extensions
|
||||
without risking disconnection. This obstacle has been recognized in
|
||||
the process of updating SSH to support RSA signatures using SHA-256
|
||||
and SHA-512 [RFC8332]. To avoid trial and error as well as
|
||||
authentication penalties, a client must be able to discover public
|
||||
key algorithms a server accepts. This extension mechanism permits
|
||||
this discovery.
|
||||
|
||||
This memo updates RFCs 4251, 4252, 4253, and 4254.
|
||||
|
||||
1.1. Requirements Terminology
|
||||
|
||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
|
||||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
|
||||
"OPTIONAL" in this document are to be interpreted as described in
|
||||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
|
||||
capitals, as shown here.
|
||||
|
||||
1.2. Wire Encoding Terminology
|
||||
|
||||
The wire encoding types in this document -- "byte", "uint32",
|
||||
"string", "boolean", "name-list" -- have meanings as described in
|
||||
[RFC4251].
|
||||
|
||||
2. Extension Negotiation Mechanism
|
||||
|
||||
2.1. Signaling of Extension Negotiation in SSH_MSG_KEXINIT
|
||||
|
||||
Applications implementing this mechanism MUST add one of the
|
||||
following indicator names to the field kex_algorithms in the
|
||||
SSH_MSG_KEXINIT message sent by the application in the first key
|
||||
exchange:
|
||||
|
||||
o When acting as server: "ext-info-s"
|
||||
|
||||
o When acting as client: "ext-info-c"
|
||||
|
||||
The indicator name is added without quotes and MAY be added at any
|
||||
position in the name-list, subject to proper separation from other
|
||||
names as per name-list conventions.
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 3]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
The names are added to the kex_algorithms field because this is one
|
||||
of two name-list fields in SSH_MSG_KEXINIT that do not have a
|
||||
separate copy for each data direction.
|
||||
|
||||
The indicator names inserted by the client and server are different
|
||||
to ensure these names will not produce a match and therefore not
|
||||
affect the algorithm chosen in key exchange algorithm negotiation.
|
||||
|
||||
The inclusion of textual indicator names is intended to provide a
|
||||
clue for implementers to discover this mechanism.
|
||||
|
||||
2.2. Enabling Criteria
|
||||
|
||||
If a client or server offers "ext-info-c" or "ext-info-s"
|
||||
respectively, it MUST be prepared to accept an SSH_MSG_EXT_INFO
|
||||
message from the peer.
|
||||
|
||||
A server only needs to send "ext-info-s" if it intends to process
|
||||
SSH_MSG_EXT_INFO from the client. A client only needs to send
|
||||
"ext-info-c" if it plans to process SSH_MSG_EXT_INFO from the server.
|
||||
|
||||
If a server receives an "ext-info-c", or a client receives an
|
||||
"ext-info-s", it MAY send an SSH_MSG_EXT_INFO message but is not
|
||||
required to do so.
|
||||
|
||||
Neither party needs to wait for the other's SSH_MSG_KEXINIT in order
|
||||
to decide whether to send the appropriate indicator in its own
|
||||
SSH_MSG_KEXINIT.
|
||||
|
||||
Implementations MUST NOT send an incorrect indicator name for their
|
||||
role. Implementations MAY disconnect if the counterparty sends an
|
||||
incorrect indicator. If "ext-info-c" or "ext-info-s" ends up being
|
||||
negotiated as a key exchange method, the parties MUST disconnect.
|
||||
|
||||
2.3. SSH_MSG_EXT_INFO Message
|
||||
|
||||
A party that received the "ext-info-c" or "ext-info-s" indicator MAY
|
||||
send the following message:
|
||||
|
||||
byte SSH_MSG_EXT_INFO (value 7)
|
||||
uint32 nr-extensions
|
||||
repeat the following 2 fields "nr-extensions" times:
|
||||
string extension-name
|
||||
string extension-value (binary)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 4]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
Implementers should pay careful attention to Section 2.5, in
|
||||
particular to the requirement to tolerate any sequence of bytes
|
||||
(including null bytes at any position) in an unknown extension's
|
||||
extension-value.
|
||||
|
||||
2.4. Message Order
|
||||
|
||||
If a client sends SSH_MSG_EXT_INFO, it MUST send it as the next
|
||||
packet following the client's first SSH_MSG_NEWKEYS message to the
|
||||
server.
|
||||
|
||||
If a server sends SSH_MSG_EXT_INFO, it MAY send it at zero, one, or
|
||||
both of the following opportunities:
|
||||
|
||||
o As the next packet following the server's first SSH_MSG_NEWKEYS.
|
||||
|
||||
Where clients need information in the server's SSH_MSG_EXT_INFO to
|
||||
authenticate, it is helpful if the server sends its
|
||||
SSH_MSG_EXT_INFO not only as the next packet after
|
||||
SSH_MSG_NEWKEYS, but without delay.
|
||||
|
||||
Clients cannot rely on this because the server is not required to
|
||||
send the message at this time; if sent, it may be delayed by the
|
||||
network. However, if a timely SSH_MSG_EXT_INFO is received, a
|
||||
client can pipeline an authentication request after its
|
||||
SSH_MSG_SERVICE_REQUEST, even when it needs extension information.
|
||||
|
||||
o Immediately preceding the server's SSH_MSG_USERAUTH_SUCCESS, as
|
||||
defined in [RFC4252].
|
||||
|
||||
The server MAY send SSH_MSG_EXT_INFO at this second opportunity,
|
||||
whether or not it sent it at the first. A client that sent
|
||||
"ext-info-c" MUST accept a server's SSH_MSG_EXT_INFO at both
|
||||
opportunities but MUST NOT require it.
|
||||
|
||||
This allows a server to reveal support for additional extensions
|
||||
that it was unwilling to reveal to an unauthenticated client. If
|
||||
a server sends a second SSH_MSG_EXT_INFO, this replaces any
|
||||
initial one, and both the client and the server re-evaluate
|
||||
extensions in effect. The server's second SSH_MSG_EXT_INFO is
|
||||
matched against the client's original.
|
||||
|
||||
The timing of the second opportunity is chosen for the following
|
||||
reasons. If the message was sent earlier, it would not allow the
|
||||
server to withhold information until the client has authenticated.
|
||||
If it was sent later, a client that needs information from the
|
||||
second SSH_MSG_EXT_INFO immediately after it authenticates would
|
||||
have no way to reliably know whether to expect the message.
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 5]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
2.5. Interpretation of Extension Names and Values
|
||||
|
||||
Each extension is identified by its extension-name and defines the
|
||||
conditions under which the extension is considered to be in effect.
|
||||
Applications MUST ignore unrecognized extension-names.
|
||||
|
||||
When it is specified, an extension MAY dictate that, in order to take
|
||||
effect, both parties must include it in their SSH_MSG_EXT_INFO or
|
||||
that it is sufficient for only one party to include it. However,
|
||||
other rules MAY be specified. The relative order in which extensions
|
||||
appear in an SSH_MSG_EXT_INFO message MUST be ignored.
|
||||
|
||||
Extension-value fields are interpreted as defined by their respective
|
||||
extension. This field MAY be empty if permitted by the extension.
|
||||
Applications that do not implement or recognize an extension MUST
|
||||
ignore its extension-value, regardless of its size or content.
|
||||
Applications MUST tolerate any sequence of bytes -- including null
|
||||
bytes at any position -- in an unknown extension's extension-value.
|
||||
|
||||
The cumulative size of an SSH_MSG_EXT_INFO message is limited only by
|
||||
the maximum packet length that an implementation may apply in
|
||||
accordance with [RFC4253]. Implementations MUST accept well-formed
|
||||
SSH_MSG_EXT_INFO messages up to the maximum packet length they
|
||||
accept.
|
||||
|
||||
3. Initially Defined Extensions
|
||||
|
||||
3.1. "server-sig-algs"
|
||||
|
||||
This extension is sent with the following extension name and value:
|
||||
|
||||
string "server-sig-algs"
|
||||
name-list public-key-algorithms-accepted
|
||||
|
||||
The name-list type is a strict subset of the string type and is thus
|
||||
permissible as an extension-value. See [RFC4251] for more
|
||||
information.
|
||||
|
||||
This extension is sent by the server and contains a list of public
|
||||
key algorithms that the server is able to process as part of a
|
||||
"publickey" authentication request. If a client sends this
|
||||
extension, the server MAY ignore it and MAY disconnect.
|
||||
|
||||
In this extension, a server MUST enumerate all public key algorithms
|
||||
it might accept during user authentication. However, early server
|
||||
implementations that do not enumerate all accepted algorithms do
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 6]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
exist. For this reason, a client MAY send a user authentication
|
||||
request using a public key algorithm not included in "server-sig-
|
||||
algs".
|
||||
|
||||
A client that wishes to proceed with public key authentication MAY
|
||||
wait for the server's SSH_MSG_EXT_INFO so it can send a "publickey"
|
||||
authentication request with an appropriate public key algorithm,
|
||||
rather than resorting to trial and error.
|
||||
|
||||
Servers that implement public key authentication SHOULD implement
|
||||
this extension.
|
||||
|
||||
If a server does not send this extension, a client MUST NOT make any
|
||||
assumptions about the server's public key algorithm support, and MAY
|
||||
proceed with authentication requests using trial and error. Note
|
||||
that implementations are known to exist that apply authentication
|
||||
penalties if the client attempts to use an unexpected public key
|
||||
algorithm.
|
||||
|
||||
Authentication penalties are applied by servers to deter brute-force
|
||||
password guessing, username enumeration, and other types of behavior
|
||||
deemed suspicious by server administrators or implementers.
|
||||
Penalties may include automatic IP address throttling or blocking,
|
||||
and they may trigger email alerts or auditing.
|
||||
|
||||
3.2. "delay-compression"
|
||||
|
||||
This extension MAY be sent by both parties as follows:
|
||||
|
||||
string "delay-compression"
|
||||
string:
|
||||
name-list compression_algorithms_client_to_server
|
||||
name-list compression_algorithms_server_to_client
|
||||
|
||||
The extension-value is a string that encodes two name-lists. The
|
||||
name-lists themselves have the encoding of strings. For example, to
|
||||
indicate a preference for algorithms "foo,bar" in the client-to-
|
||||
server direction and "bar,baz" in the server-to-client direction, a
|
||||
sender encodes the extension-value as follows (including its length):
|
||||
|
||||
00000016 00000007 666f6f2c626172 00000007 6261722c62617a
|
||||
|
||||
This same encoding could be sent by either party -- client or server.
|
||||
|
||||
This extension allows the server and client to renegotiate
|
||||
compression algorithm support without having to conduct a key
|
||||
re-exchange, which puts new algorithms into effect immediately upon
|
||||
successful authentication.
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 7]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
This extension takes effect only if both parties send it. Name-lists
|
||||
MAY include any compression algorithm that could have been negotiated
|
||||
in SSH_MSG_KEXINIT, except algorithms that define their own delayed
|
||||
compression semantics. This means "zlib,none" is a valid algorithm
|
||||
list in this context, but "zlib@openssh.com" is not.
|
||||
|
||||
If both parties send this extension, but the name-lists do not
|
||||
contain a common algorithm in either direction, the parties MUST
|
||||
disconnect in the same way as if negotiation failed as part of
|
||||
SSH_MSG_KEXINIT.
|
||||
|
||||
If this extension takes effect, the renegotiated compression
|
||||
algorithm is activated for the very next SSH message after the
|
||||
trigger message:
|
||||
|
||||
o Sent by the server, the trigger message is
|
||||
SSH_MSG_USERAUTH_SUCCESS.
|
||||
|
||||
o Sent by the client, the trigger message is SSH_MSG_NEWCOMPRESS.
|
||||
|
||||
If this extension takes effect, the client MUST send the following
|
||||
message within a reasonable number of outgoing SSH messages after
|
||||
receiving SSH_MSG_USERAUTH_SUCCESS, but not necessarily as the first
|
||||
such outgoing message:
|
||||
|
||||
byte SSH_MSG_NEWCOMPRESS (value 8)
|
||||
|
||||
The purpose of SSH_MSG_NEWCOMPRESS is to avoid a race condition where
|
||||
the server cannot reliably know whether a message sent by the client
|
||||
was sent before or after receiving the server's
|
||||
SSH_MSG_USERAUTH_SUCCESS. For example, clients may send keep-alive
|
||||
messages during logon processing.
|
||||
|
||||
As is the case for all extensions unless otherwise noted, the server
|
||||
MAY delay including this extension until its secondary
|
||||
SSH_MSG_EXT_INFO, sent before SSH_MSG_USERAUTH_SUCCESS. This allows
|
||||
the server to avoid advertising compression until the client has
|
||||
authenticated.
|
||||
|
||||
If the parties renegotiate compression using this extension in a
|
||||
session where compression is already enabled and the renegotiated
|
||||
algorithm is the same in one or both directions, then the internal
|
||||
compression state MUST be reset for each direction at the time the
|
||||
renegotiated algorithm takes effect.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 8]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
3.2.1. Awkwardly Timed Key Re-Exchange
|
||||
|
||||
A party that has signaled, or intends to signal, support for this
|
||||
extension in an SSH session MUST NOT initiate key re-exchange in that
|
||||
session until either of the following occurs:
|
||||
|
||||
o This extension was negotiated, and the party that's about to start
|
||||
key re-exchange already sent its trigger message for compression.
|
||||
|
||||
o The party has sent (if server) or received (if client) the message
|
||||
SSH_MSG_USERAUTH_SUCCESS, and this extension was not negotiated.
|
||||
|
||||
If a party violates this rule, the other party MAY disconnect.
|
||||
|
||||
In general, parties SHOULD NOT start key re-exchange before
|
||||
successful user authentication but MAY tolerate it if not using this
|
||||
extension.
|
||||
|
||||
3.2.2. Subsequent Re-Exchange
|
||||
|
||||
In subsequent key re-exchanges that unambiguously begin after the
|
||||
compression trigger messages, the compression algorithms negotiated
|
||||
in re-exchange override the algorithms negotiated with this
|
||||
extension.
|
||||
|
||||
3.2.3. Compatibility Note: OpenSSH up to Version 7.5
|
||||
|
||||
This extension uses a binary extension-value encoding. OpenSSH
|
||||
clients up to and including version 7.5 advertise support to receive
|
||||
SSH_MSG_EXT_INFO but disconnect on receipt of an extension-value
|
||||
containing null bytes. This is an error fixed in OpenSSH
|
||||
version 7.6.
|
||||
|
||||
Implementations that wish to interoperate with OpenSSH 7.5 and
|
||||
earlier are advised to check the remote party's SSH version string
|
||||
and omit this extension if an affected version is detected. Affected
|
||||
versions do not implement this extension, so there is no harm in
|
||||
omitting it. The extension SHOULD NOT be omitted if the detected
|
||||
OpenSSH version is 7.6 or higher. This would make it harder for the
|
||||
OpenSSH project to implement this extension in a higher version.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 9]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
3.3. "no-flow-control"
|
||||
|
||||
This extension is sent with the following extension name and value:
|
||||
|
||||
string "no-flow-control"
|
||||
string choice of: "p" for preferred | "s" for supported
|
||||
|
||||
A party SHOULD send "s" if it supports "no-flow-control" but does not
|
||||
prefer to enable it. A party SHOULD send "p" if it prefers to enable
|
||||
the extension if the other party supports it. Parties MAY disconnect
|
||||
if they receive a different extension value.
|
||||
|
||||
For this extension to take effect, the following must occur:
|
||||
|
||||
o This extension MUST be sent by both parties.
|
||||
|
||||
o At least one party MUST have sent the value "p" (preferred).
|
||||
|
||||
If this extension takes effect, the "initial window size" fields in
|
||||
SSH_MSG_CHANNEL_OPEN and SSH_MSG_CHANNEL_OPEN_CONFIRMATION, as
|
||||
defined in [RFC4254], become meaningless. The values of these fields
|
||||
MUST be ignored, and a channel behaves as if all window sizes are
|
||||
infinite. Neither side is required to send any
|
||||
SSH_MSG_CHANNEL_WINDOW_ADJUST messages, and if received, such
|
||||
messages MUST be ignored.
|
||||
|
||||
This extension is intended for, but not limited to, use by file
|
||||
transfer applications that are only going to use one channel and for
|
||||
which the flow control provided by SSH is an impediment, rather than
|
||||
a feature.
|
||||
|
||||
Implementations MUST refuse to open more than one simultaneous
|
||||
channel when this extension is in effect. Nevertheless, server
|
||||
implementations SHOULD support clients opening more than one
|
||||
non-simultaneous channel.
|
||||
|
||||
3.3.1. Prior "No Flow Control" Practice
|
||||
|
||||
Before this extension, some applications would simply not implement
|
||||
SSH flow control, sending an initial channel window size of 2^32 - 1.
|
||||
Applications SHOULD NOT do this for the following reasons:
|
||||
|
||||
o It is plausible to transfer more than 2^32 bytes over a channel.
|
||||
Such a channel will hang if the other party implements SSH flow
|
||||
control according to [RFC4254].
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 10]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
o Implementations that cannot handle large channel window sizes
|
||||
exist, and they can exhibit non-graceful behaviors, including
|
||||
disconnect.
|
||||
|
||||
3.4. "elevation"
|
||||
|
||||
The terms "elevation" and "elevated" refer to an operating system
|
||||
mechanism where an administrator's logon session is associated with
|
||||
two security contexts: one limited and one with administrative
|
||||
rights. To "elevate" such a session is to activate the security
|
||||
context with full administrative rights. For more information about
|
||||
this mechanism on Windows, see [WINADMIN] and [WINTOKEN].
|
||||
|
||||
This extension MAY be sent by the client as follows:
|
||||
|
||||
string "elevation"
|
||||
string choice of: "y" | "n" | "d"
|
||||
|
||||
A client sends "y" to indicate its preference that the session should
|
||||
be elevated; "n" to not be elevated; and "d" for the server to use
|
||||
its default behavior. The server MAY disconnect if it receives a
|
||||
different extension value. If a client does not send the "elevation"
|
||||
extension, the server SHOULD act as if "d" was sent.
|
||||
|
||||
If a client has included this extension, then after authentication, a
|
||||
server that supports this extension SHOULD indicate to the client
|
||||
whether elevation was done by sending the following global request:
|
||||
|
||||
byte SSH_MSG_GLOBAL_REQUEST
|
||||
string "elevation"
|
||||
boolean want reply = false
|
||||
boolean elevation performed
|
||||
|
||||
Clients that implement this extension help reduce attack surface for
|
||||
Windows servers that handle administrative logins. Where clients do
|
||||
not support this extension, servers must elevate sessions to allow
|
||||
full access by administrative users always. Where clients support
|
||||
this extension, sessions can be created without elevation unless
|
||||
requested.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 11]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
4. IANA Considerations
|
||||
|
||||
4.1. Additions to Existing Registries
|
||||
|
||||
IANA has added the following entries to the "Message Numbers"
|
||||
registry [IANA-M] under the "Secure Shell (SSH) Protocol Parameters"
|
||||
registry [RFC4250]:
|
||||
|
||||
Value Message ID Reference
|
||||
-----------------------------------------
|
||||
7 SSH_MSG_EXT_INFO RFC 8308
|
||||
8 SSH_MSG_NEWCOMPRESS RFC 8308
|
||||
|
||||
IANA has also added the following entries to the "Key Exchange Method
|
||||
Names" registry [IANA-KE]:
|
||||
|
||||
Method Name Reference Note
|
||||
------------------------------------------
|
||||
ext-info-s RFC 8308 Section 2
|
||||
ext-info-c RFC 8308 Section 2
|
||||
|
||||
4.2. New Registry: Extension Names
|
||||
|
||||
Also under the "Secure Shell (SSH) Protocol Parameters" registry,
|
||||
IANA has created a new "Extension Names" registry, with the following
|
||||
initial content:
|
||||
|
||||
Extension Name Reference Note
|
||||
------------------------------------------------
|
||||
server-sig-algs RFC 8308 Section 3.1
|
||||
delay-compression RFC 8308 Section 3.2
|
||||
no-flow-control RFC 8308 Section 3.3
|
||||
elevation RFC 8308 Section 3.4
|
||||
|
||||
4.2.1. Future Assignments to Extension Names Registry
|
||||
|
||||
Names in the "Extension Names" registry MUST follow the conventions
|
||||
for names defined in [RFC4250], Section 4.6.1.
|
||||
|
||||
Requests for assignments of new non-local names in the "Extension
|
||||
Names" registry (i.e., names not including the '@' character) MUST be
|
||||
done using the IETF Review policy, as described in [RFC8126].
|
||||
|
||||
5. Security Considerations
|
||||
|
||||
Security considerations are discussed throughout this document. This
|
||||
document updates the SSH protocol as defined in [RFC4251] and related
|
||||
documents. The security considerations of [RFC4251] apply.
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 12]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
6. References
|
||||
|
||||
6.1. Normative References
|
||||
|
||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
|
||||
Requirement Levels", BCP 14, RFC 2119,
|
||||
DOI 10.17487/RFC2119, March 1997,
|
||||
<https://www.rfc-editor.org/info/rfc2119>.
|
||||
|
||||
[RFC4250] Lehtinen, S. and C. Lonvick, Ed., "The Secure Shell (SSH)
|
||||
Protocol Assigned Numbers", RFC 4250,
|
||||
DOI 10.17487/RFC4250, January 2006,
|
||||
<https://www.rfc-editor.org/info/rfc4250>.
|
||||
|
||||
[RFC4251] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
|
||||
Protocol Architecture", RFC 4251, DOI 10.17487/RFC4251,
|
||||
January 2006, <https://www.rfc-editor.org/info/rfc4251>.
|
||||
|
||||
[RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
|
||||
Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252,
|
||||
January 2006, <https://www.rfc-editor.org/info/rfc4252>.
|
||||
|
||||
[RFC4253] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
|
||||
Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253,
|
||||
January 2006, <https://www.rfc-editor.org/info/rfc4253>.
|
||||
|
||||
[RFC4254] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
|
||||
Connection Protocol", RFC 4254, DOI 10.17487/RFC4254,
|
||||
January 2006, <https://www.rfc-editor.org/info/rfc4254>.
|
||||
|
||||
[RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
|
||||
Writing an IANA Considerations Section in RFCs", BCP 26,
|
||||
RFC 8126, DOI 10.17487/RFC8126, June 2017,
|
||||
<https://www.rfc-editor.org/info/rfc8126>.
|
||||
|
||||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
|
||||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
|
||||
May 2017, <https://www.rfc-editor.org/info/rfc8174>.
|
||||
|
||||
6.2. Informative References
|
||||
|
||||
[IANA-KE] IANA, "Key Exchange Method Names",
|
||||
<https://www.iana.org/assignments/ssh-parameters/>.
|
||||
|
||||
[IANA-M] IANA, "Message Numbers",
|
||||
<https://www.iana.org/assignments/ssh-parameters/>.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 13]
|
||||
|
||||
RFC 8308 Extension Negotiation in SSH March 2018
|
||||
|
||||
|
||||
[RFC8332] Bider, D., "Use of RSA Keys with SHA-256 and SHA-512 in
|
||||
the Secure Shell (SSH) Protocol", RFC 8332,
|
||||
DOI 10.17487/RFC8332, March 2018,
|
||||
<https://www.rfc-editor.org/info/rfc8332>.
|
||||
|
||||
[WINADMIN] Microsoft, "How to launch a process as a Full
|
||||
Administrator when UAC is enabled?", March 2013,
|
||||
<https://blogs.msdn.microsoft.com/winsdk/2013/03/22/
|
||||
how-to-launch-a-process-as-a-full-administrator-when-
|
||||
uac-is-enabled/>.
|
||||
|
||||
[WINTOKEN] Microsoft, "TOKEN_ELEVATION_TYPE enumeration",
|
||||
<https://msdn.microsoft.com/en-us/library/windows/desktop/
|
||||
bb530718.aspx>.
|
||||
|
||||
Acknowledgments
|
||||
|
||||
Thanks to Markus Friedl and Damien Miller for comments and initial
|
||||
implementation. Thanks to Peter Gutmann, Roumen Petrov, Mark D.
|
||||
Baushke, Daniel Migault, Eric Rescorla, Matthew A. Miller, Mirja
|
||||
Kuehlewind, Adam Roach, Spencer Dawkins, Alexey Melnikov, and Ben
|
||||
Campbell for reviews and feedback.
|
||||
|
||||
Author's Address
|
||||
|
||||
Denis Bider
|
||||
Bitvise Limited
|
||||
4105 Lombardy Court
|
||||
Colleyville, TX 76034
|
||||
United States of America
|
||||
|
||||
Email: ietf-ssh3@denisbider.com
|
||||
URI: https://www.bitvise.com/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Bider Standards Track [Page 14]
|
||||
|
||||
Reference in New Issue
Block a user