View Issue Details

IDProjectCategoryView StatusLast Update
000852910000-006: MappingsSpecpublic2023-10-10 16:53
ReporterZbynek Zahradnik Assigned ToRandy Armstrong  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionreopened 
Product Version1.05.01 
Target Version1.05.03 RC1Fixed in Version1.05.03 RC1 
Summary0008529: Reverse Connect: Denial of Service protection not clear
Description

Part 2 says for Reverse Connect: "... the Client needs to validate that the connection is from an appropriate Server and not a denial of service attack. If the Server does not respond in a timely manner to the open SecureChannel request the Client should close the channel.".

This seems to imply that on every transport connection opened by the Server to the Client, the Client needs to go through the whole initiation sequence in Part 6, 7.1.3 Establishing a connection Figure 17, i.e. Open Connection - Reverse Hello - Hello - Acknowledge - Open Secure Channel Request - Open Secure Channel Response (except for CreateSession maybe).

But, there is also a text "When a SecureChannel is established, the Server shall immediately create a new socket and sends a new ReverseHello to ensure the Client is able to create another SecureChannel if it is needed.".

Why does it say "... if it is needed"?
It seems to me that in order to provide the denial of service attack mitigation described in Part 2, the client immediately has to create another SecureChannel, so that it can verify that the connection is from the appropriate server. It cannot, for example, wait until this second SecureChannelis needed, because that would allow any number of transport connections be opened by an attacker.

TagsErrata Needed to Close
Attached Files
image.png (6,074 bytes)   
image.png (6,074 bytes)   
Commit Version
Fix Due Date2023-09-01

Relationships

related to 0009023 closedPaul Hunkar 10000-002: Security Reverse Connect: Denial of Service protection not clear 

Activities

Matthias Damm

2023-02-28 11:45

developer   ~0018805

I think if a client does not need a connection, it would not listen for new connections and server tcp connects would fail. A server need to retry to see if the client needs a connection.

Needs in this context is that the client want to create a conection to the server or want to reconnect to the server or is doing discovery.
If a client has all "expected connections" working, there is no need to listen for tcp connects on the server side.

The client would start to listen as soon as a reconnect, new connect or discovery is needed.

A server would try tcp connects but would only succeed if the client is waiting for a connect.

Jim Luth

2023-02-28 16:38

administrator   ~0018806

Part 6 needs to state there needs to be a finite number of open unused sockets that get recycled. Also the option of a whitelist of ServerURIs can help with DOS,

Jim Luth

2023-02-28 16:40

administrator   ~0018807

May need to clone to Part 2 once the Part 6 update is made.

Zbynek Zahradnik

2023-03-01 05:26

developer   ~0018821

If the Reverse Connect scenario should support multiple connections & SecureChannels between the same Client and Server, AND if the initiative to opening them should come from the Server, then I think we are missing a flag in the "Reverse Hello" message to distinguish whether

1) The server wants to create a new SecureChannel at this moment,
2) The server is opening a "back-up" connection as implied by the sentence "When a SecureChannel is established, the Server shall immediately create a new socket and sends a new ReverseHello to ensure the Client is able to create another SecureChannel if it is needed.

Without the flag, the Client cannot tell what it should do at that moment.
In the first case, it needs to proceed with "Hello" and the full sequence till SecureChannel handshake (and CreateSession etc.)
In the second case, it just needs to check the "Reverse Hello" request, and then sit idle on that connection until "... it is needed".

Matthias Damm

2023-03-01 08:04

developer   ~0018822

I think there is still a basic missunderstanding.

The server has never the initiative to open a secure channel. And the server does not know the client side requirements.

The server only knows that there is a client with a hostname or IP and port that potentially want to create one or more SecureChannels with the server.
The server tries to offer TCP/IP connections to the client, nothing else.
The client decides if he want to create a SecureChannel and a Session. Never the server.

The only difference between normal connect and reverse connect is the step to create the TCP/IP connection

Zbynek Zahradnik

2023-03-01 09:56

developer   ~0018823

This is not misunderstanding. I know what the spec says, and I understand your explanation, which is one way the spec can be read. I have intentionally started my note with "If ..." so that we can clarify whether the condition of the "If..." is intended to be true or not. You have confirmed that the "If..." condition is, in fact, meant to be false, and that's fine with me.

It then confirms my concerns about Denial of Service attacks. And we agreed to clarify the handling of additional Reverse Hello requests and when and how "idle" connections will be dropped.

Randy Armstrong

2023-03-31 06:11

administrator   ~0019072

Clients shall monitor the number of unused sockets per peer IP address. The Client shall immediately close unused sockets if the count exceeds the needs of the Client. An administrator may configure the Client with list of IP addresses which are allowed to establish reverse connections. The Client may build its own list of trusted IP addresses from the IP addresses used by active SecureChannels which have been authenticated.

Randy Armstrong

2023-05-11 20:30

administrator   ~0019326

Updated text:

Clients shall monitor the number of unused sockets used to send a ReverseHello but do not have an active SecureChannel per peer IP address. The Client shall immediately close unused these extra sockets if the count exceeds the needs of the Client . An administrator may configure the Client with list of IP addresses which are allowed to establish reverse connections. The Client may build its own list of trusted IP addresses from the IP addresses used by active SecureChannels which have completed the authentication process.

Jim Luth

2023-05-16 16:51

administrator   ~0019389

Agreed to reopen in Web meeting to add addtional text.

Randy Armstrong

2023-06-20 11:49

administrator   ~0019552

Added table describing the handshake agreed to in the meeting.

Jim Luth

2023-06-21 14:43

administrator   ~0019595

Agreed to 1.05.03 Draft text, but needs 1.04 Errata to close.

Randy Armstrong

2023-10-05 09:03

administrator   ~0020093

Added Errata to 1.04.13

Jim Luth

2023-10-10 16:53

administrator   ~0020119

Agreed to 1.04.13 Errata edited in Web Meeting.

Issue History

Date Modified Username Field Change
2022-12-13 13:44 Zbynek Zahradnik New Issue
2022-12-13 13:44 Zbynek Zahradnik File Added: image.png
2023-02-28 11:45 Matthias Damm Note Added: 0018805
2023-02-28 16:38 Jim Luth Note Added: 0018806
2023-02-28 16:40 Jim Luth Note Added: 0018807
2023-02-28 16:40 Jim Luth Assigned To => Randy Armstrong
2023-02-28 16:40 Jim Luth Status new => assigned
2023-03-01 05:26 Zbynek Zahradnik Note Added: 0018821
2023-03-01 08:04 Matthias Damm Note Added: 0018822
2023-03-01 09:56 Zbynek Zahradnik Note Added: 0018823
2023-03-31 06:11 Randy Armstrong Status assigned => resolved
2023-03-31 06:11 Randy Armstrong Resolution open => fixed
2023-03-31 06:11 Randy Armstrong Note Added: 0019072
2023-05-11 20:30 Randy Armstrong Note Added: 0019326
2023-05-16 16:51 Jim Luth Status resolved => feedback
2023-05-16 16:51 Jim Luth Resolution fixed => reopened
2023-05-16 16:51 Jim Luth Note Added: 0019389
2023-05-16 16:51 Jim Luth Status feedback => assigned
2023-06-06 18:09 Jim Luth Target Version 1.05.02 =>
2023-06-20 11:49 Randy Armstrong Status assigned => resolved
2023-06-20 11:49 Randy Armstrong Note Added: 0019552
2023-06-21 14:43 Jim Luth Note Added: 0019595
2023-06-21 14:44 Jim Luth Fixed in Version => 1.05.03 RC1
2023-06-21 14:44 Jim Luth Target Version => 1.05.03 RC1
2023-06-21 18:19 Jim Luth Issue cloned: 0009023
2023-06-21 18:19 Jim Luth Relationship added related to 0009023
2023-08-01 15:56 Jim Luth Fix Due Date => 2023-09-01
2023-08-01 16:51 Jim Luth Tag Attached: Errata Needed to Close
2023-10-05 09:03 Randy Armstrong Note Added: 0020093
2023-10-10 16:53 Jim Luth Status resolved => closed
2023-10-10 16:53 Jim Luth Note Added: 0020119