<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-vance-socks-v4-08" category="historic" submissionType="independent" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title abbrev="SOCKS4">SOCKS Protocol Version 4</title>
    <seriesInfo name="Internet-Draft" value="draft-vance-socks-v4-08"/>
    <author fullname="Daniel James Vance">
      <organization>Independent</organization>
      <address>
        <email>djvanc@outlook.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="11"/>
    <abstract>
      <?line 54?>

<t>This document describes SOCKS version 4, a protocol designed to facilitate TCP proxy services across a network firewall. SOCKS operates at the session layer, providing application users with transparent access to network services on the other side of the firewall. It is application-protocol independent, allowing it to support a wide range of services, including those utilizing encryption, while maintaining minimum processing overhead by simply relaying data after initial access control checks. The protocol defines two primary operations: CONNECT for establishing outbound connections to an application server, and BIND for preparing for and accepting inbound connections initiated by an application server.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/4socks/socks4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 59?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The SOCKS protocol, Version 4 (SOCKSv4), <bcp14>SHALL</bcp14> be used to relay TCP sessions between an application client and an an application server via a SOCKS server, often positioned at a firewall host. The protocol <bcp14>MUST</bcp14> provide transparent access across the firewall for application users.</t>
      <t>The protocol <bcp14>MUST</bcp14> be application-protocol independent, allowing it to be used for various services, including, but not limited to, telnet, ftp, finger, whois, gopher, and WWW (World Wide Web).</t>
      <t>The SOCKS server <bcp14>MUST</bcp14> apply access control mechanisms at the beginning of each TCP session. Following successful establishment, the SOCKS server <bcp14>MUST</bcp14> simply relay data between the client and the application server, incurring minimum processing overhead. The protocol inherently supports applications utilizing encryption, as the SOCKS server is not required to interpret the application protocol's payload.</t>
      <t>Two primary operations are defined: CONNECT and BIND.</t>
    </section>
    <section anchor="conventions-and-terminology">
      <name>Conventions and Terminology</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>This specification uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>Client (Application Client): The program requesting a connection to an application server through the SOCKS server.</t>
        </li>
        <li>
          <t>SOCKS Server: The host, typically at a firewall, that intermediates the connection between the Client and the Application Server.</t>
        </li>
        <li>
          <t>Application Server: The host to which the Client ultimately wishes to connect (e.g., a Telnet daemon, an HTTP server).</t>
        </li>
        <li>
          <t>TCP Session: A connection established using the Transmission Control Protocol (TCP). SOCKSv4 only supports TCP sessions.</t>
        </li>
        <li>
          <t>DSTIP (Destination IP): The IP address of the Application Server, as specified in the SOCKS request.</t>
        </li>
        <li>
          <t>DSTPORT (Destination Port): The port number of the Application Server, as specified in the SOCKS request.</t>
        </li>
        <li>
          <t>USERID: A variable-length, NULL-terminated string identifying the client's user on the local system.</t>
        </li>
        <li>
          <t>NULL: A byte of all zero bits, used to terminate the USERID field.</t>
        </li>
        <li>
          <t>IDENT: A protocol (as described in <xref target="RFC1413"/>) used by the SOCKS server to verify the user identity of the client.</t>
        </li>
      </ul>
    </section>
    <section anchor="connect-operation">
      <name>CONNECT Operation</name>
      <t>The client <bcp14>MUST</bcp14> initiate a CONNECT request when it desires to establish an outbound TCP connection to an application server.</t>
      <section anchor="connect-request-packet-format">
        <name>CONNECT Request Packet Format</name>
        <t>The client <bcp14>MUST</bcp14> send a request packet with the following structure:</t>
        <table>
          <name>CONNECT Request Packet Format</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
              <th align="center">Size (bytes)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">VN</td>
              <td align="left">Version Number</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">CD</td>
              <td align="left">Command Code</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">DSTPORT</td>
              <td align="left">Destination Port</td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="left">DSTIP</td>
              <td align="left">Destination IP Address</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="left">USERID</td>
              <td align="left">User ID</td>
              <td align="center">variable</td>
            </tr>
            <tr>
              <td align="left">NULL</td>
              <td align="left">Null Terminator</td>
              <td align="center">1</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>VN (Version Number): <bcp14>MUST</bcp14> be 4, representing the SOCKS protocol version.</t>
          </li>
          <li>
            <t>CD (Command Code): <bcp14>MUST</bcp14> be 1, indicating a CONNECT request.</t>
          </li>
          <li>
            <t>DSTPORT (Destination Port): The port number of the application server (network byte order).</t>
          </li>
          <li>
            <t>DSTIP (Destination IP): The IP address of the application server (network byte order).</t>
          </li>
          <li>
            <t>USERID (User Identifier): A string of characters representing the client's user ID.</t>
          </li>
          <li>
            <t>NULL: A single byte with a value of all zero bits, terminating the USERID field.</t>
          </li>
        </ul>
      </section>
      <section anchor="connect-processing-and-reply">
        <name>CONNECT Processing and Reply</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> determine whether to grant the request based on criteria such as the source IP address, DSTIP, DSTPORT, USERID, and information obtained via IDENT (cf. <xref target="RFC1413"/>).</t>
        <t>If the request is granted, the SOCKS server <bcp14>MUST</bcp14> attempt to establish a TCP connection to the specified DSTPORT on the DSTIP.</t>
        <t>A reply packet <bcp14>MUST</bcp14> be sent to the client upon the establishment of the connection, rejection of the request, or operational failure.</t>
        <section anchor="interpretation-of-special-dstip-values">
          <name>Interpretation of Special DSTIP Values</name>
          <t>To ensure compatibility with widespread protocol extensions (notably SOCKSv4a), implementations <bcp14>MUST</bcp14> adhere to the following logic regarding the DSTIP field:</t>
          <ul spacing="normal">
            <li>
              <t>If the first three octets of the DSTIP are zero and the fourth octet is non-zero (the range 0.0.0.x), the SOCKS server <bcp14>MUST NOT</bcp14> attempt to establish a TCP connection to this literal IP address.</t>
            </li>
            <li>
              <t>A SOCKSv4 server without SOCKSv4a support <bcp14>MUST</bcp14> treat such a DSTIP as an unreachable destination and return a reply with CD = 91. An implementation conforming to this protocol <bcp14>MUST NOT</bcp14> process any octets encountered after the initial NULL octet that terminates the USERID field.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="connect-reply-packet-format">
        <name>CONNECT Reply Packet Format</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> send a reply packet with the following structure:</t>
        <table>
          <name>CONNECT Reply Packet Format</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
              <th align="center">Size (bytes)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">VN</td>
              <td align="left">Version Number</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">CD</td>
              <td align="left">Command Code</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">DSTPORT</td>
              <td align="left">Destination Port</td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="left">DSTIP</td>
              <td align="left">Destination IP Address</td>
              <td align="center">4</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>VN: <bcp14>MUST</bcp14> be 0, representing the reply version code.</t>
          </li>
          <li>
            <t>CD (Result Code): The SOCKS server <bcp14>MUST</bcp14> use one of the following values:</t>
          </li>
        </ul>
        <table anchor="socks-version-4-reply-codes">
          <name>Result Codes</name>
          <thead>
            <tr>
              <th align="left">Reply Code</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">90</td>
              <td align="left">Request granted (Connection successful).</td>
            </tr>
            <tr>
              <td align="left">91</td>
              <td align="left">Request rejected or failed.</td>
            </tr>
            <tr>
              <td align="left">92</td>
              <td align="left">Request rejected due to inability to connect to <tt>identd</tt> on the client.</td>
            </tr>
            <tr>
              <td align="left">93</td>
              <td align="left">Request rejected because the client program and <tt>identd</tt> report different user-IDs.</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>DSTPORT and DSTIP: These fields <bcp14>MUST</bcp14> be ignored by the client in a CONNECT reply.</t>
          </li>
        </ul>
        <t>If the request is rejected or failed (CD != 90), the SOCKS server <bcp14>MUST</bcp14> close its connection to the client immediately after sending the reply.</t>
        <t>If the request is successful (CD = 90), the SOCKS server <bcp14>MUST</bcp14> immediately begin relaying traffic in both directions between the client connection and the established application server connection. The client <bcp14>MUST</bcp14> then treat its connection to the SOCKS server as if it were a direct connection to the application server.</t>
      </section>
    </section>
    <section anchor="bind-operation">
      <name>BIND Operation</name>
      <t>The client <bcp14>MUST</bcp14> initiate a BIND request when it requires the SOCKS server to prepare for an inbound connection from an application server. This operation is typically used for protocols that involve a secondary data connection originating from the server (e.g., FTP's active mode). A BIND request <bcp14>SHOULD</bcp14> only be sent after a primary connection to the application server has been successfully established using a CONNECT request.</t>
      <section anchor="bind-request-packet-format">
        <name>BIND Request Packet Format</name>
        <t>The client <bcp14>MUST</bcp14> send a request packet identical in format to the CONNECT request:</t>
        <table anchor="socks-version-4-request-format">
          <name>BIND Request Packet Format</name>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Description</th>
              <th align="center">Size (bytes)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">VN</td>
              <td align="left">Version Number (must be 4)</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">CD</td>
              <td align="left">Command Code (1 for CONNECT, 2 for BIND)</td>
              <td align="center">1</td>
            </tr>
            <tr>
              <td align="left">DSTPORT</td>
              <td align="left">Destination Port (Network Byte Order)</td>
              <td align="center">2</td>
            </tr>
            <tr>
              <td align="left">DSTIP</td>
              <td align="left">Destination IP Address</td>
              <td align="center">4</td>
            </tr>
            <tr>
              <td align="left">USERID</td>
              <td align="left">User ID (String of Octets)</td>
              <td align="center">variable</td>
            </tr>
            <tr>
              <td align="left">NULL</td>
              <td align="left">Null Terminator (0x00)</td>
              <td align="center">1</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>VN: <bcp14>MUST</bcp14> be 4.</t>
          </li>
          <li>
            <t>CD: <bcp14>MUST</bcp14> be 2, indicating a BIND request.</t>
          </li>
          <li>
            <t>DSTPORT: The port number of the primary connection to the application server.</t>
          </li>
          <li>
            <t>DSTIP: The IP address of the application server.</t>
          </li>
          <li>
            <t>USERID and NULL: As defined for the CONNECT request.</t>
          </li>
        </ul>
      </section>
      <section anchor="bind-first-reply">
        <name>BIND First Reply</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> first decide whether to grant the BIND request. The reply format <bcp14>MUST</bcp14> be the same as the CONNECT reply format.</t>
        <t>If the request is rejected (CD != 90), the SOCKS server <bcp14>MUST</bcp14> close its connection to the client immediately.</t>
        <t>If the request is granted (CD = 90):</t>
        <ul spacing="normal">
          <li>
            <t>The SOCKS server <bcp14>MUST</bcp14> obtain a local socket and begin listening for an incoming connection.</t>
          </li>
          <li>
            <t>The SOCKS server <bcp14>MUST</bcp14> send a first reply packet in which the DSTPORT and DSTIP fields are meaningful: DSTPORT <bcp14>MUST</bcp14> contain, in network byte order, the port number of the newly listening socket, and DSTIP <bcp14>MUST</bcp14> contain, in network byte order, the IP address of the SOCKS server's listening interface.</t>
          </li>
          <li>
            <t>If the SOCKS server returns a DSTIP of 0 (the value of constant 'INADDR_ANY'), the client <bcp14>MUST</bcp14> replace this value with the IP address of the SOCKS server to which the client is currently connected.</t>
          </li>
          <li>
            <t>The client <bcp14>MUST</bcp14> use this IP address and port to inform the application server via the primary connection, enabling the application server to initiate the anticipated inbound connection to the SOCKS server.</t>
          </li>
        </ul>
      </section>
      <section anchor="bind-second-reply">
        <name>BIND Second Reply</name>
        <t>The SOCKS server <bcp14>MUST</bcp14> send a second reply packet to the client once the anticipated inbound connection from the application server is established. The reply format <bcp14>MUST</bcp14> be the same as the first reply.</t>
        <t>The SOCKS server <bcp14>MUST</bcp14> check the IP address of the newly connected application server host against the DSTIP value specified in the client's original BIND request.</t>
        <ul spacing="normal">
          <li>
            <t>If the IP addresses match: The CD field in the second reply <bcp14>MUST</bcp14> be set to 90. The SOCKS server <bcp14>MUST</bcp14> then prepare to relay traffic between the client connection and the new application server connection.</t>
          </li>
          <li>
            <t>If a mismatch is found: The CD field in the second reply <bcp14>MUST</bcp14> be set to 91. The SOCKS server <bcp14>MUST</bcp14> immediately close both the client connection and the connection from the application server.</t>
          </li>
        </ul>
        <t>Upon a successful second reply, the client <bcp14>MUST</bcp14> perform I/O on its connection to the SOCKS server as if it were directly connected to the application server.</t>
      </section>
    </section>
    <section anchor="timeout-mechanism">
      <name>Timeout Mechanism</name>
      <t>For both CONNECT and BIND operations, the SOCKS server <bcp14>MUST</bcp14> employ a time limit for the establishment of its connection with the application server (e.g., 2 minutes). If the connection is not established before the time limit expires, the SOCKS server <bcp14>MUST</bcp14> close its connection to the client and abort the operation.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>See <xref target="security-analysis"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>No IANA actions required.</t>
      <t>See <xref target="existing-values"/> for the existing values used within the protocol.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC1413">
          <front>
            <title>Identification Protocol</title>
            <author fullname="M. St. Johns" initials="M." surname="St. Johns"/>
            <date month="February" year="1993"/>
            <abstract>
              <t>The Identification Protocol was formerly called the Authentication Server Protocol. It has been renamed to better reflect its function. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1413"/>
          <seriesInfo name="DOI" value="10.17487/RFC1413"/>
        </reference>
        <reference anchor="SOCKS4" target="https://www.openssh.org/txt/socks4.protocol">
          <front>
            <title>SOCKS: A protocol for TCP proxy across firewalls</title>
            <author initials="Y.-D." surname="Lee" fullname="Ying-Da Lee">
              <organization>NEC Systems Laboratory, CSTC</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SOCKS">
          <front>
            <title>SOCKS</title>
            <author initials="D." surname="Koblas" fullname="David Koblas">
              <organization>Netskope</organization>
            </author>
            <date year="1992"/>
          </front>
          <seriesInfo name="1992 Usenix Security Symposium" value=""/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC768">
          <front>
            <title>User Datagram Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="August" year="1980"/>
          </front>
          <seriesInfo name="STD" value="6"/>
          <seriesInfo name="RFC" value="768"/>
          <seriesInfo name="DOI" value="10.17487/RFC0768"/>
        </reference>
        <reference anchor="RFC791">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
        <reference anchor="RFC9293">
          <front>
            <title>Transmission Control Protocol (TCP)</title>
            <author fullname="W. Eddy" initials="W." role="editor" surname="Eddy"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document specifies the Transmission Control Protocol (TCP). TCP is an important transport-layer protocol in the Internet protocol stack, and it has continuously evolved over decades of use and growth of the Internet. Over this time, a number of changes have been made to TCP as it was specified in RFC 793, though these have only been documented in a piecemeal fashion. This document collects and brings those changes together with the protocol specification from RFC 793. This document obsoletes RFC 793, as well as RFCs 879, 2873, 6093, 6429, 6528, and 6691 that updated parts of RFC 793. It updates RFCs 1011 and 1122, and it should be considered as a replacement for the portions of those documents dealing with TCP requirements. It also updates RFC 5961 by adding a small clarification in reset handling while in the SYN-RECEIVED state. The TCP header control bits from RFC 793 have also been updated based on RFC 3168.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="7"/>
          <seriesInfo name="RFC" value="9293"/>
          <seriesInfo name="DOI" value="10.17487/RFC9293"/>
        </reference>
        <reference anchor="RFC1928">
          <front>
            <title>SOCKS Protocol Version 5</title>
            <author fullname="M. Leech" initials="M." surname="Leech"/>
            <author fullname="M. Ganis" initials="M." surname="Ganis"/>
            <author fullname="Y. Lee" initials="Y." surname="Lee"/>
            <author fullname="R. Kuris" initials="R." surname="Kuris"/>
            <author fullname="D. Koblas" initials="D." surname="Koblas"/>
            <author fullname="L. Jones" initials="L." surname="Jones"/>
            <date month="March" year="1996"/>
            <abstract>
              <t>This memo describes a protocol that is an evolution of the previous version of the protocol, version 4 [1]. This new protocol stems from active discussions and prototype implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1928"/>
          <seriesInfo name="DOI" value="10.17487/RFC1928"/>
        </reference>
        <reference anchor="RFC1948">
          <front>
            <title>Defending Against Sequence Number Attacks</title>
            <author fullname="S. Bellovin" initials="S." surname="Bellovin"/>
            <date month="May" year="1996"/>
            <abstract>
              <t>IP spoofing attacks based on sequence number spoofing have become a serious threat on the Internet (CERT Advisory CA-95:01). While ubiquitous crypgraphic authentication is the right answer, we propose a simple modification to TCP implementations that should be a very substantial block to the current wave of attacks. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1948"/>
          <seriesInfo name="DOI" value="10.17487/RFC1948"/>
        </reference>
        <reference anchor="RFC1929">
          <front>
            <title>Username/Password Authentication for SOCKS V5</title>
            <author fullname="M. Leech" initials="M." surname="Leech"/>
            <date month="March" year="1996"/>
            <abstract>
              <t>The protocol specification for SOCKS Version 5 specifies a generalized framework for the use of arbitrary authentication protocols in the initial socks connection setup. This document describes one of those protocols, as it fits into the SOCKS Version 5 authentication "subnegotiation". [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1929"/>
          <seriesInfo name="DOI" value="10.17487/RFC1929"/>
        </reference>
        <reference anchor="RFC3552">
          <front>
            <title>Guidelines for Writing RFC Text on Security Considerations</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <author fullname="B. Korver" initials="B." surname="Korver"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>All RFCs are required to have a Security Considerations section. Historically, such sections have been relatively weak. This document provides guidelines to RFC authors on how to write a good Security Considerations section. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="72"/>
          <seriesInfo name="RFC" value="3552"/>
          <seriesInfo name="DOI" value="10.17487/RFC3552"/>
        </reference>
        <reference anchor="RFC3365">
          <front>
            <title>Strong Security Requirements for Internet Engineering Task Force Standard Protocols</title>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <date month="August" year="2002"/>
          </front>
          <seriesInfo name="BCP" value="61"/>
          <seriesInfo name="RFC" value="3365"/>
          <seriesInfo name="DOI" value="10.17487/RFC3365"/>
        </reference>
        <reference anchor="RFC4301">
          <front>
            <title>Security Architecture for the Internet Protocol</title>
            <author fullname="S. Kent" initials="S." surname="Kent"/>
            <author fullname="K. Seo" initials="K." surname="Seo"/>
            <date month="December" year="2005"/>
            <abstract>
              <t>This document describes an updated version of the "Security Architecture for IP", which is designed to provide security services for traffic at the IP layer. This document obsoletes RFC 2401 (November 1998). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4301"/>
          <seriesInfo name="DOI" value="10.17487/RFC4301"/>
        </reference>
        <reference anchor="RFC4732">
          <front>
            <title>Internet Denial-of-Service Considerations</title>
            <author fullname="M. Handley" initials="M." role="editor" surname="Handley"/>
            <author fullname="E. Rescorla" initials="E." role="editor" surname="Rescorla"/>
            <author>
              <organization abbrev="IAB">Internet Architecture Board</organization>
            </author>
            <date month="December" year="2006"/>
            <abstract>
              <t>This document provides an overview of possible avenues for denial-of-service (DoS) attack on Internet systems. The aim is to encourage protocol designers and network engineers towards designs that are more robust. We discuss partial solutions that reduce the effectiveness of attacks, and how some solutions might inadvertently open up alternative vulnerabilities. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4732"/>
          <seriesInfo name="DOI" value="10.17487/RFC4732"/>
        </reference>
        <reference anchor="RFC4953">
          <front>
            <title>Defending TCP Against Spoofing Attacks</title>
            <author fullname="J. Touch" initials="J." surname="Touch"/>
            <date month="July" year="2007"/>
            <abstract>
              <t>Recent analysis of potential attacks on core Internet infrastructure indicates an increased vulnerability of TCP connections to spurious resets (RSTs), sent with forged IP source addresses (spoofing). TCP has always been susceptible to such RST spoofing attacks, which were indirectly protected by checking that the RST sequence number was inside the current receive window, as well as via the obfuscation of TCP endpoint and port numbers. For pairs of well-known endpoints often over predictable port pairs, such as BGP or between web servers and well-known large-scale caches, increases in the path bandwidth-delay product of a connection have sufficiently increased the receive window space that off-path third parties can brute-force generate a viable RST sequence number. The susceptibility to attack increases with the square of the bandwidth, and thus presents a significant vulnerability for recent high-speed networks. This document addresses this vulnerability, discussing proposed solutions at the transport level and their inherent challenges, as well as existing network level solutions and the feasibility of their deployment. This document focuses on vulnerabilities due to spoofed TCP segments, and includes a discussion of related ICMP spoofing attacks on TCP connections. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4953"/>
          <seriesInfo name="DOI" value="10.17487/RFC4953"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="SOCKS4a" target="https://www.openssh.org/txt/socks4a.protocol">
          <front>
            <title>SOCKS 4A: A  Simple Extension to SOCKS 4 Protocol</title>
            <author initials="Y.-D." surname="Lee" fullname="Ying-Da Lee">
              <organization>NEC Systems Laboratory, CSTC</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 237?>

<section anchor="common-operational-extensions">
      <name>Common Operational Extensions</name>
      <t>The content of this appendix is Informative, not Normative. It describes extensions and interpretations of the SOCKSv4 protocol that have been widely adopted in practical deployments and client implementations to enhance functionality and compatibility.</t>
      <section anchor="socks-protocol-version-4a">
        <name>SOCKS Protocol Version 4A</name>
        <t>The SOCKSv4 protocol originally required the client to resolve the target domain name before sending the request. As this is impractical in many environments, the SOCKSv4a protocol was widely adopted to allow the SOCKS server to perform domain name resolution.</t>
        <t>SOCKSv4a, though share a same version number with SOCKSv4, is treated as a complete independent protocol here. The specification will be published elsewhere. The content below is just a simple summary of SOCKSv4a, and it should never be treated as a Normative standard.</t>
        <t>Clients using this protocol must follow these rules:</t>
        <section anchor="socksv4a-request-format">
          <name>SOCKSv4a Request Format</name>
          <t>When a client wishes to connect using a domain name instead of an IP address, the request format follows the CONNECT/BIND format, but with modifications to DSTIP and the end of the request:</t>
          <table>
            <name>SOCKSv4a Request Format</name>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Description</th>
                <th align="left">Size (bytes)</th>
                <th align="left">SOCKSv4a Usage</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">VN</td>
                <td align="left">Version Number (4)</td>
                <td align="left">1</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">CD</td>
                <td align="left">Command Code (1 or 2)</td>
                <td align="left">1</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">DSTPORT</td>
                <td align="left">Destination Port</td>
                <td align="left">2</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">DSTIP</td>
                <td align="left">Destination IP Address</td>
                <td align="left">4</td>
                <td align="left">
                  <bcp14>MUST</bcp14> be set to 0.0.0.1 (0x00000001).</td>
              </tr>
              <tr>
                <td align="left">USERID</td>
                <td align="left">User ID</td>
                <td align="left">variable</td>
                <td align="left">Unchanged.</td>
              </tr>
              <tr>
                <td align="left">NULL</td>
                <td align="left">Null Terminator (0x00)</td>
                <td align="left">1</td>
                <td align="left">Terminates USERID.</td>
              </tr>
              <tr>
                <td align="left">DOMAIN</td>
                <td align="left">Target Domain Name</td>
                <td align="left">variable</td>
                <td align="left">New field: Null-terminated string.</td>
              </tr>
              <tr>
                <td align="left">NULL</td>
                <td align="left">Final Null Terminator</td>
                <td align="left">1</td>
                <td align="left">New field: Terminates DOMAIN.</td>
              </tr>
            </tbody>
          </table>
          <t>A SOCKSv4a client, when sending a request, must append the target domain name string after the NULL terminator of USERID, and terminate the entire request with a second NULL byte.</t>
        </section>
        <section anchor="socksv4a-server-processing">
          <name>SOCKSv4a Server Processing</name>
          <t>When a SOCKSv4a server receives a request where the DSTIP field is 0.0.0.1, it <bcp14>MUST</bcp14> perform the following actions:</t>
          <ol spacing="normal" type="1"><li>
              <t>Treat 0.0.0.1 as a special signal and <bcp14>MUST NOT</bcp14> attempt to connect to this IP address.</t>
            </li>
            <li>
              <t>Start reading data after the USERID's NULL terminator, interpreting it as the target domain name string (DOMAIN), until the next NULL terminator is encountered.</t>
            </li>
            <li>
              <t>The server <bcp14>MUST</bcp14> attempt to resolve this domain name.</t>
            </li>
            <li>
              <t>If resolution is successful, the server attempts to connect to the obtained IP address. If the connection succeeds, it replies 90. If the connection fails, it replies 91.</t>
            </li>
            <li>
              <t>If resolution fails, the server <bcp14>MUST</bcp14> reply 91 and close the connection.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="use-of-dstipdstport-in-bind-requests-for-access-control">
        <name>Use of DSTIP/DSTPORT in BIND Requests for Access Control</name>
        <t>Although DSTIP and DSTPORT in the BIND request are intended to identify the application server, many SOCKS server and firewall implementations use them as an Access Control List (ACL) for the inbound connection.</t>
        <ul spacing="normal">
          <li>
            <t>DSTIP as Source Address Restriction: The server strictly requires the IP address of the inbound connection to <bcp14>MUST</bcp14> match the DSTIP specified in the BIND request.</t>
          </li>
          <li>
            <t>DSTPORT as Source Port Restriction (less common): Some implementations may attempt to verify that the source port of the inbound connection matches the DSTPORT in the BIND request. Since the source port of an application server is usually randomly allocated by the operating system, this usage is generally considered unreliable or misleading and is ignored in most implementations.</t>
          </li>
        </ul>
        <t>When initiating a BIND request, a client <bcp14>SHOULD</bcp14> ensure that DSTIP is the address of the application server it expects to receive the connection from, to improve compatibility.</t>
      </section>
      <section anchor="common-implementations-of-timeout-mechanism">
        <name>Common Implementations of Timeout Mechanism</name>
        <t>As mandated by <xref target="timeout-mechanism"/>, the SOCKS server <bcp14>MUST</bcp14> employ time limits. In common implementations, timeouts usually trigger under the following circumstances:</t>
        <ul spacing="normal">
          <li>
            <t>CONNECT Timeout: The server is unable to establish a connection with DSTIP:DSTPORT within the specified time.</t>
          </li>
          <li>
            <t>Timeout after the first BIND reply: After the SOCKS server successfully binds the listening socket (sent the first 90 reply), but fails to receive an inbound connection from the application server within the specified time.</t>
          </li>
        </ul>
        <t>When a timeout occurs, the server <bcp14>MUST</bcp14> immediately close the connection with the client and abort all pending network operations.</t>
      </section>
    </section>
    <section anchor="security-analysis">
      <name>Security Analysis</name>
      <t>The SOCKS Version 4 (SOCKSv4) protocol was designed as a pragmatic mechanism for TCP proxying across firewalls in an era when the Internet threat model was significantly less hostile than at present. By contemporary standards, as established in <xref target="RFC3552"/> and <xref target="RFC3365"/> (BCP 61), SOCKSv4 is considered fundamentally insecure. It fails to meet the "strong security" requirements mandated for Internet protocols because it lacks native mechanisms for mutual authentication, data confidentiality, and integrity protection.</t>
      <section anchor="weaknesses-in-identification-and-authentication">
        <name>Weaknesses in Identification and Authentication</name>
        <t>The primary mechanism for client identification in SOCKSv4 is the USERID field, typically leveraged in conjunction with the Identification Protocol (IDENT) as defined in <xref target="RFC1413"/>. As noted in the security considerations of <xref target="RFC1413"/>, the information returned by an IDENT server is only as trustworthy as the client host and the network path. In a modern decentralized network, a malicious actor can easily spoof IDENT responses or disable the service entirely, rendering the USERID field unsuitable for any meaningful authorization decisions. Furthermore, SOCKSv4 provides no facility for server-to-client authentication, leaving the client vulnerable to "rogue proxy" attacks where an adversary intercepts the connection and masquerades as the intended SOCKS server. This lack of cryptographic authentication deviates from the best practices for session-layer protocols outlined in <xref target="RFC1928"/>.</t>
      </section>
      <section anchor="absence-of-confidentiality-and-integrity">
        <name>Absence of Confidentiality and Integrity</name>
        <t>SOCKSv4 operates strictly as a plaintext relay. It does not incorporate any cryptographic transforms to protect the application data stream. Consequently, all traffic traversing a SOCKSv4 proxy is susceptible to passive eavesdropping and active injection or modification by any entity with access to the network path. Under the criteria defined in BCP 61 <xref target="RFC3365"/>, protocols that fail to implement strong encryption are insufficient for use over the public Internet. While SOCKSv4 is confined to proxying TCP connections as defined in <xref target="RFC9293"/>, its inability to handle UDP traffic (defined in <xref target="RFC768"/>) or provide per-packet integrity checks means that even the protocol’s control plane—such as the BIND and CONNECT requests—can be manipulated by an on-path attacker.</t>
      </section>
      <section anchor="vulnerabilities-in-the-bind-operation">
        <name>Vulnerabilities in the BIND Operation</name>
        <t>The BIND command, intended to support protocols requiring secondary inbound connections, presents a significant attack surface. The protocol’s reliance on a rudimentary source IP address check to validate the incoming "callback" connection is inherently flawed. As documented in <xref target="RFC1948"/> and <xref target="RFC4953"/>, IP address-based authentication is easily subverted through IP spoofing. Additionally, the prevalence of Network Address Translation (NAT) and middleboxes in modern architectures frequently masks the true source IP of the remote host, making the SOCKSv4 BIND verification either operationally brittle or entirely ineffective. An attacker can exploit this weakness to hijack the inbound socket, potentially gaining unauthorized access to the client’s internal network environment.</t>
      </section>
      <section anchor="susceptibility-to-resource-exhaustion">
        <name>Susceptibility to Resource Exhaustion</name>
        <t>SOCKSv4 lacks robust flow control and state management for its control plane, making it a viable vector for Denial of Service (DoS) attacks. Every request, particularly the BIND operation which requires the server to listen for an indeterminate period, consumes finite system resources including memory, file descriptors, and kernel state. While the protocol suggests a two-minute timeout for connection establishment, this fixed value is not an adequate defense against coordinated resource exhaustion attacks. Without the modern rate-limiting and state-tracking mechanisms discussed in <xref target="RFC4732"/>, a SOCKSv4 server can be easily overwhelmed by a relatively small number of malicious clients.</t>
      </section>
      <section anchor="deployment-limitations-and-mitigation">
        <name>Deployment Limitations and Mitigation</name>
        <t>Given the deficiencies detailed above, SOCKSv4 is classified as a "Historic" protocol and its use is strongly discouraged. In scenarios where legacy requirements necessitate its deployment, it <bcp14>MUST</bcp14> be encapsulated within a secure transport layer, such as Transport Layer Security (TLS) defined in <xref target="RFC8446"/> or an IPsec tunnel as defined in <xref target="RFC4301"/>, to provide the requisite security properties. Operators are urged to migrate to SOCKS Version 5 <xref target="RFC1928"/>, which supports extensible authentication (GSS-API, etc.) and UDP proxying, or to modern proxying solutions that satisfy the security requirements of the IETF "Danvers Doctrine" as memorialized in <xref target="RFC3365"/>.</t>
      </section>
    </section>
    <section anchor="existing-values">
      <name>Existing Values</name>
      <t>The existing values used within the protocol are summarized below:</t>
      <section anchor="socks-protocol-version-number">
        <name>SOCKS Protocol Version Number</name>
        <ul spacing="normal">
          <li>
            <t>The SOCKS protocol version number <tt>VN</tt> in requests is 4 (0x04).</t>
          </li>
          <li>
            <t>The SOCKS protocol version number <tt>VN</tt> in replies is 0 (0x00).</t>
          </li>
        </ul>
      </section>
      <section anchor="socks-command-code">
        <name>SOCKS Command Code</name>
        <t>The SOCKS command code <tt>CD</tt> in requests defines two values:</t>
        <ul spacing="normal">
          <li>
            <t>1 (0x01): CONNECT</t>
          </li>
          <li>
            <t>2 (0x02): BIND</t>
          </li>
        </ul>
      </section>
      <section anchor="socks-reply-code">
        <name>SOCKS Reply Code</name>
        <t>The SOCKS reply code <tt>CD</tt> in replies defines four values:</t>
        <ul spacing="normal">
          <li>
            <t>90 (0x5A): Request granted</t>
          </li>
          <li>
            <t>91 (0x5B): Request rejected or failed</t>
          </li>
          <li>
            <t>92 (0x5C): Request rejected because SOCKS server cannot connect to <tt>identd</tt> on the client</t>
          </li>
          <li>
            <t>93 (0x5D): Request rejected because the client program and <tt>identd</tt> report different user-ids</t>
          </li>
        </ul>
      </section>
      <section anchor="port-number">
        <name>Port Number</name>
        <t>The SOCKS protocol is conventionally known to use TCP port 1080 for its service. This port number has already been registered in the IANA Service Name and Transport Protocol Port Number Registry for the <tt>socks</tt> service.</t>
      </section>
    </section>
    <section numbered="false" anchor="original-author">
      <name>Original Author</name>
      <artwork><![CDATA[
      Ying-Da Lee
      Principal Member Technical Staff
      NEC Systems Laboratory, CSTC
      ylee@syl.dl.nec.com

      David Koblas
      Netskope
]]></artwork>
      <t>We sincerely apologize that, due to the document's long history and the passage of time, many early contributors may not have been formally included in this list. We extend our deepest gratitude to all who have contributed to this work. If you believe your name should be added to the acknowledgments, please contact the draft maintainers.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
Fs/zXhRDxbNoAV0xdZCNEbHbKub4FKfFYtmGR2q1o10MMCb2GC/FrRzb5IEb
scOBNt/GbDh8PLnHMjHWdijVN7449P95UB/E+QTEl91EKk8N74AYOSfG/x1b
2btvK2E0I96DI5eH1/55ggd+vKE0ZRSGV+Eqt20PUDvr+OmjcwqYvziQkTCm
I3QPxzFXaa4pj/bKdbsMBkBHQoPNhougM+M+/6vzVVYi9AT6ghpx445HIVuZ
2o3deSPbVzWQ+GKf+lsawsoTJ+jBALYNJQwBZhqzi2IHK9K3K4q9fgWI4Mat
GdtlXPR0YZL6btZjEAqgyZJsMLjUWn34YOzP4wj6uzapubvjx06nZ9OtR85K
uR7ZKNq12EzcaPo25R6DseSJ7u5acttfbAZJQj+isVUXFwHaNs8ZrK801OQ5
tnseJMZ976qxoRGcu0+2SyMkJRluiQGnbZPuiLlx5r5y22TbNBqkwaVWEabb
u971+qDNrHK0uoyutcR+lGCnVEdSrsQx4E6iFaGxRJMskrDJFB7/dRPslJcu
ltQ1ruZNEcueiX38TJjTFx93XyP8NPAQ4YqdqeYGL9cg1UoSW0/DwTdLKTfr
qqSk9k5u/3Uy3E3kWLA9NcIC+n/ebh2P5pRy1sV1WpUF02AUEjTo0L2JzCYZ
qRJN+cf+5IQ1UeESeQeN1QA3BU3IDS1mGXGOhV2rS5BaWMlKb58Yca6CMjjc
AMVtM8SsWof9hO3KuW2JzXq3f+cmReQI279qnBnQmdE37e1OgGeaNolJf6Zo
OpI+PIzW5NKINlftXlhIa2qYauByCk3UIMgQLtfLuiKkmUQV6ak0wxjfnxLW
CTiKl1wv0RpWp2oyzvZ+5SSNeOXCV5efeEvuN3IStN1b4xIfIYsIYFAdigqe
RaeEGMY/FhDJkjph2iPXkYvfpTWTWZeXiSc8r8FWW1w+r0g2ym6fnQtpt//G
RAtJDVBORPX/c1+ixCVI1JuCPNzCJbN7syUwnfv33P+pgkTP/Z/Mj2yiFCmn
7Umqg//s2fz8g+0Nm1N/RgLFX4fgyNh21eevpqdExiuxQyciQWckQZ0pz4De
pMbI82x3DXWW8oKxam/zRThSsChZyKRTwTmIKMezkd+5R0kouTNtRUhUZSTp
V2dJfUZvJIoofuw+M2ybENqSHe+tbrcDOQ+r793OJkoVVq2e2R4ECwZ5JJL7
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

-->

</rfc>
