View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0009023 | 10000-002: Security | Spec | public | 2023-06-21 18:19 | 2023-11-14 16:19 |
Reporter | Jim Luth | Assigned To | Paul Hunkar | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Product Version | 1.05.03 | ||||
Fixed in Version | 1.05.03 | ||||
Summary | 0009023: 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"? | ||||
Tags | No tags attached. | ||||
Attached Files | |||||
Commit Version | 1.05.03 | ||||
Fix Due Date | 2023-09-01 | ||||
related to | 0008529 | closed | Randy Armstrong | 10000-006: Mappings | Reverse Connect: Denial of Service protection not clear |
related to | 0009246 | assigned | Paul Hunkar | Compliance Test Tool (CTT) Unified Architecture | Reverse Connect: Denial of Service protection not clear |
|
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. 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. |
|
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, |
|
May need to clone to Part 2 once the Part 6 update is made. |
|
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, Without the flag, the Client cannot tell what it should do at that moment. |
|
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 only difference between normal connect and reverse connect is the step to create the TCP/IP connection |
|
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. |
|
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. |
|
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. |
|
Agreed to reopen in Web meeting to add addtional text. |
|
Added table describing the handshake agreed to in the meeting. |
|
Agreed to 1.05.03 Draft text, but needs 1.04 Errata to close. |
|
DoS for Reverse connect needs to be updated in Part 2 to match. |
|
What I would like to see clarified in Part 2 is this: "... 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.". After the changes made to Part 6, technically, I think the client is either allowed to verify just the ApplicationUri in ReverseHello message (which can be easily spoofed), and pause ("save the socket") before it needs the SecureChannel. Or, the client can establish the SecureChannel immediately - only which truly verifies that "the connection is from an appropriate Server". Does Part 2 allow the client both of these approaches, or does it mandate that the SecureChannel must be created? Can it be made clearer? |
|
Updated text to point back to part 6 and that the optional checks should be performed |
|
Agreed to changes edited in Web Meeting. |
Date Modified | Username | Field | Change |
---|---|---|---|
2023-06-21 18:19 | Jim Luth | New Issue | |
2023-06-21 18:19 | Jim Luth | Status | new => assigned |
2023-06-21 18:19 | Jim Luth | Assigned To | => Randy Armstrong |
2023-06-21 18:19 | Jim Luth | Issue generated from: 0008529 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019611 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019612 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019613 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019614 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019615 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019616 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019617 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019618 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019619 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019620 | |
2023-06-21 18:19 | Jim Luth | Note Added: 0019621 | |
2023-06-21 18:19 | Jim Luth | Relationship added | related to 0008529 |
2023-06-21 18:19 | Jim Luth | Note Added: 0019622 | |
2023-06-21 18:20 | Jim Luth | Assigned To | Randy Armstrong => Paul Hunkar |
2023-06-21 18:20 | Jim Luth | Product Version | 1.05.01 => 1.05.03 RC1 |
2023-06-21 18:20 | Jim Luth | Project | 10000-006: Mappings => 10000-002: Security |
2023-06-22 06:35 | Zbynek Zahradnik | Note Added: 0019638 | |
2023-07-25 15:58 | Jim Luth | Commit Version | => 1.05.04 RC |
2023-07-25 15:58 | Jim Luth | Fix Due Date | => 2023-09-01 |
2023-07-25 16:03 | Jim Luth | Product Version | 1.05.03 RC1 => 1.05.03 |
2023-07-25 16:03 | Jim Luth | Commit Version | 1.05.04 RC => 1.05.03 |
2023-11-08 04:47 | Paul Hunkar | Issue cloned: 0009246 | |
2023-11-08 04:47 | Paul Hunkar | Relationship added | related to 0009246 |
2023-11-08 04:54 | Paul Hunkar | Status | assigned => resolved |
2023-11-08 04:54 | Paul Hunkar | Resolution | open => fixed |
2023-11-08 04:54 | Paul Hunkar | Fixed in Version | => 1.05.03 RC1 |
2023-11-08 04:54 | Paul Hunkar | Note Added: 0020314 | |
2023-11-14 16:19 | Jim Luth | Status | resolved => closed |
2023-11-14 16:19 | Jim Luth | Fixed in Version | 1.05.03 RC1 => 1.05.03 |
2023-11-14 16:19 | Jim Luth | Note Added: 0020357 |