RFC 1929 PROPOSED STANDARD SOCKS · AUTHENTICATION

SOCKS5 Username/Password: Username/Password Authentication for SOCKS V5

A username-and-password method for the SOCKS version 5 authentication exchange.

On rfc-editor.org ↗
PUBLISHED
March 1996
AUTHORS
M. Leech
STREAM
IETF
SUBNEGOTIATION VERSION
X'01'
USERNAME AND PASSWORD LENGTHS
1 to 255 octets each
SUCCESS STATUS
X'00'
DOI
10.17487/RFC1929

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Network Working Group                                           M. Leech
Request for Comments: 1929                    Bell-Northern Research Ltd
Category: Standards Track                                     March 1996


             Username/Password Authentication for SOCKS V5

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.  Introduction

   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".

Note:

   Unless otherwise noted, the decimal numbers appearing in packet-
   format diagrams represent the length of the corresponding field, in
   octets.  Where a given octet must take on a specific value, the
   syntax X'hh' is used to denote the value of the single octet in that
   field. When the word 'Variable' is used, it indicates that the
   corresponding field has a variable length defined either by an
   associated (one or two octet) length field, or by a data type field.

2.  Initial negotiation

   Once the SOCKS V5 server has started, and the client has selected the
   Username/Password Authentication protocol, the Username/Password
   subnegotiation begins.  This begins with the client producing a
   Username/Password request:

           +----+------+----------+------+----------+
           |VER | ULEN |  UNAME   | PLEN |  PASSWD  |
           +----+------+----------+------+----------+
           | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
           +----+------+----------+------+----------+

   The VER field contains the current version of the subnegotiation,
   which is X'01'. The ULEN field contains the length of the UNAME field
   that follows. The UNAME field contains the username as known to the
   source operating system. The PLEN field contains the length of the
   PASSWD field that follows. The PASSWD field contains the password
   association with the given UNAME.

   The server verifies the supplied UNAME and PASSWD, and sends the
   following response:

                        +----+--------+
                        |VER | STATUS |
                        +----+--------+
                        | 1  |   1    |
                        +----+--------+

   A STATUS field of X'00' indicates success. If the server returns a
   `failure' (STATUS value other than X'00') status, it MUST close the
   connection.

3.  Security Considerations

   This document describes a subnegotiation that provides authentication
   services to the SOCKS protocol. Since the request carries the
   password in cleartext, this subnegotiation is not recommended for
   environments where "sniffing" is possible and practical.

4.  Author's Address

   Marcus Leech
   Bell-Northern Research Ltd
   P.O. Box 3511, Station C
   Ottawa, ON
   CANADA K1Y 4H7

   Phone: +1 613 763 9145
   EMail: mleech@bnr.ca

ISO Plain Language

On this page
PROBLEMSOCKS version 5 allows authentication methods during connection setup and needs concrete methods that fit its subnegotiation.
MECHANISMThe client sends a version, username length and value, and password length and value; the server returns a status byte.
THE CATCHA nonzero failure status requires the server to close the connection, and the password is sent in cleartext.

§1Where the Method Fits

SOCKS version 5 provides a framework for arbitrary authentication methods during the initial connection setup. This RFC specifies one such method: a username-and-password subnegotiation that begins after the client selects it.

The packet diagrams give field lengths in octets. A field marked with a specific hexadecimal value must contain that value.

SOCKS version 5 can use different ways to check a user's identity. This document defines one way based on a username and password.

§2Request and Server Response

The client request contains VER, ULEN, UNAME, PLEN, and PASSWD. The version is X'01'; the username and password each have a one-octet length field and a value from 1 to 255 octets.

The server verifies the values and replies with a version and a one-octet status. X'00' means success. Any other status means failure, and the server MUST close the connection.

The client sends the username and password with their lengths. The server answers with a success or failure code and closes the connection after a failure.

§3Cleartext Password Warning

The username/password request carries the password in cleartext. The RFC says this subnegotiation is not recommended in environments where sniffing is possible and practical.

The document describes the authentication exchange but does not define a way to encrypt the password within the exchange.

The password is readable in the data sent over the connection. Someone able to monitor that traffic could see it.