CWE-300: Channel Accessible by Non-Endpoint

Learn about CWE-300 (Channel Accessible by Non-Endpoint), its security impact, exploitation methods, and prevention guidelines.

What is Channel Accessible by Non-Endpoint?

• Overview: This vulnerability occurs when a communication channel between two parties does not properly verify the identity of each party or ensure the channel's integrity, allowing unauthorized actors to access or interfere with the communication.

• Exploitation Methods:

  • Attackers can exploit this vulnerability by interposing themselves between the two communicating parties, effectively performing a man-in-the-middle (MitM) attack.
  • Common attack patterns include eavesdropping on the communication to gather sensitive information or modifying the data being transmitted to cause harm or gain unauthorized access.

• Security Impact:

  • Direct consequences include unauthorized access to sensitive information and potential data modification.
  • Potential cascading effects include loss of data integrity, violation of privacy, and damage to system trustworthiness.
  • Business impact can range from financial loss due to data breaches to reputational damage and legal liabilities.

• Prevention Guidelines:

  • Implement strong authentication mechanisms to verify identities at both ends of a communication channel.
  • Use encryption protocols such as TLS/SSL to ensure channel integrity and confidentiality.
  • Follow security best practices, such as regular security audits and updates to cryptographic libraries.
  • Recommended tools and frameworks include OpenSSL for implementing secure connections and using identity management tools to enforce strong authentication policies.
Corgea can automatically detect and fix Channel Accessible by Non-Endpoint in your codebase. [Try Corgea free today](https://corgea.app).

Technical Details

Likelihood of Exploit: Not specified

Affected Languages: Not Language-Specific

Affected Technologies: Not specified

Vulnerable Code Example

import socket

def start_unsecured_server():
    # Create a socket object
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('0.0.0.0', 12345))  # Bind to all interfaces
    server_socket.listen(5)
    
    print("Server listening on port 12345")

    while True:
        client_socket, addr = server_socket.accept()
        print(f"Connection from {addr} has been established.")
        client_socket.send(b"Welcome to the unsecured server!")  # No encryption of data
        client_socket.close()

Explanation

In this example, the server is bound to all network interfaces (0.0.0.0), which makes it accessible from any network. This is a security risk because it may allow unauthorized entities to intercept or tamper with the communication. Additionally, the server sends data without encryption, making it susceptible to eavesdropping and man-in-the-middle attacks.

How to fix Channel Accessible by Non-Endpoint?

To fix this issue, we need to:

  1. Restrict Network Access: Limit the server to listen on a specific interface (e.g., 127.0.0.1 for local access) whenever possible to minimize exposure.
  2. Use Secure Protocols: Implement TLS/SSL to encrypt the data transmitted over the network, ensuring that only authorized entities can read or modify the data.
  3. Client Authentication: Ensure the server verifies the identity of clients before establishing a connection, using client certificates or other authentication methods.

Fixed Code Example

import socket
import ssl

def start_secure_server():
    # Create a socket object
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1', 12345))  # Bind to localhost
    server_socket.listen(5)
    
    # Wrap the socket with SSL
    secure_socket = ssl.wrap_socket(server_socket, 
                                    server_side=True, 
                                    certfile="server.crt", 
                                    keyfile="server.key",
                                    ssl_version=ssl.PROTOCOL_TLS)  # Enable TLS/SSL
    
    print("Secure server listening on port 12345")

    while True:
        client_socket, addr = secure_socket.accept()
        print(f"Secure connection from {addr} has been established.")
        client_socket.send(b"Welcome to the secure server!")  # Data is encrypted
        client_socket.close()

Explanation

In the fixed version, the server is bound to 127.0.0.1, restricting access to local connections only. This minimizes the exposure of the server to potential attackers. We also wrap the server socket with SSL using the ssl.wrap_socket() method, which requires a certificate (server.crt) and a private key (server.key). By enabling TLS/SSL, the communication is encrypted, protecting the data from being intercepted or tampered with. The server can also be configured to require client certificates for mutual authentication, ensuring that only authorized users can establish a secure connection with the server.

Corgea Logo

Find this vulnerability and fix it with Corgea

Scan your codebase for CWE-300: Channel Accessible by Non-Endpoint and get remediation guidance

Start for free and no credit card needed.