summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8437.txt
blob: 4d8e135c3a6dfb06799ac143cac22e120a8f1a2a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
Internet Engineering Task Force (IETF)                         C. Newman
Request for Comments: 8437                                        Oracle
Updates: 3501                                                August 2018
Category: Standards Track
ISSN: 2070-1721


           IMAP UNAUTHENTICATE Extension for Connection Reuse

Abstract

   This specification extends the Internet Message Access Protocol
   (IMAP) to allow an administrative client to reuse the same IMAP
   connection on behalf of multiple IMAP user identities.

Status of This Memo

   This is an Internet Standards Track document.

   This document is a product of the Internet Engineering Task Force
   (IETF).  It represents the consensus of the IETF community.  It has
   received public review and has been approved for publication by the
   Internet Engineering Steering Group (IESG).  Further information on
   Internet Standards is available in Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc8437.

Copyright Notice

   Copyright (c) 2018 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.








Newman                       Standards Track                    [Page 1]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Conventions Used in This Document . . . . . . . . . . . . . .   2
   3.  UNAUTHENTICATE Command  . . . . . . . . . . . . . . . . . . .   3
   4.  Interactions  . . . . . . . . . . . . . . . . . . . . . . . .   4
     4.1.  Stateful Extensions . . . . . . . . . . . . . . . . . . .   4
     4.2.  Client Certificates, SASL EXTERNAL, and imaps . . . . . .   5
   5.  Revised State Machine . . . . . . . . . . . . . . . . . . . .   6
   6.  Formal Syntax . . . . . . . . . . . . . . . . . . . . . . . .   7
   7.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   7
   8.  Security Considerations . . . . . . . . . . . . . . . . . . .   7
   9.  Privacy Considerations  . . . . . . . . . . . . . . . . . . .   8
   10. References  . . . . . . . . . . . . . . . . . . . . . . . . .   8
     10.1.  Normative References . . . . . . . . . . . . . . . . . .   8
     10.2.  Informative References . . . . . . . . . . . . . . . . .   9
   Appendix A.  Design Considerations  . . . . . . . . . . . . . . .  11
   Acknowledgements  . . . . . . . . . . . . . . . . . . . . . . . .  11
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  11

1.  Introduction

   Modern IMAP [RFC3501] server deployments often have peer systems with
   administrative privilege that perform actions on behalf of IMAP end
   users.  For example, a voicemail gateway can use IMAP to store a
   user's voicemail and mark that voicemail as \Seen when the user
   listens to it via the phone interface.  These systems can issue the
   IMAP AUTHENTICATE command with administrative credentials to act on
   behalf of other users.  However, with the IMAP base specification,
   these specialized IMAP clients must close the connection and create a
   new connection for each user.  For efficiency reasons, it is
   desirable for these clients to reuse the same connection,
   particularly if SSL has been negotiated.  This specification proposes
   the UNAUTHENTICATE command to achieve this goal.

   The IMAP state machine described in Section 3 of RFC 3501 does not
   have a transition from authenticated or selected state to not
   authenticated state.  The UNAUTHENTICATE command adds this
   transition.

2.  Conventions Used in This Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.




Newman                       Standards Track                    [Page 2]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


3.  UNAUTHENTICATE Command

   Arguments:  None

   Responses:  No specific response for this command

   Result:     OK - Completed, now in not authenticated state
               BAD - Command unknown or arguments invalid

   This command directs the server to reset all connection state except
   for the state of the TLS [RFC8446] layer.  Upon completion, the
   server connection is placed in not authenticated state.  This
   represents Transition 7 in the State Machine Diagram (Section 5).

   If a mailbox was selected, the mailbox ceases to be selected, but no
   expunge event is generated.  If a Simple Authentication and Security
   Layer (SASL) [RFC4422] was active, the server terminates its outgoing
   security layer immediately after sending the CRLF following the OK
   response.  The client's outgoing security layer terminates
   immediately after the CRLF following the UNAUTHENTICATE command.
   Note that a BAD response only occurs if UNAUTHENTICATE is issued in
   an invalid state, is not advertised by the server, or does not follow
   the command syntax in the specification.  A NO response is not
   permitted.  As a result, specification-compliant implementations will
   interoperate across security layer termination.

   After sending this command, the client is free to issue a new
   AUTHENTICATE or LOGIN command as permitted based on the server's
   capabilities.  If no SASL security layer was active, the client is
   permitted to pipeline the UNAUTHENTICATE command with a subsequent
   AUTHENTICATE command.  If the IMAP server also advertises SASL-IR
   [RFC4959], this permits an administrative client to re-authenticate
   in one round trip.  Because of this pipelining optimization, a server
   advertising UNAUTHENTICATE is not permitted to respond to the
   UNAUTHENTICATE command with a NO response if it is unable to reset
   the state associated with the connection.  Servers MAY close the
   connection with an untagged BYE response if this preferably rare
   situation occurs.

   Servers MAY choose to advertise the UNAUTHENTICATE capability only
   after authentication has completed.  As a result, clients may need to
   issue an IMAP CAPABILITY command after authentication in order to
   determine the availability of UNAUTHENTICATE.








Newman                       Standards Track                    [Page 3]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


   The IMAP ID [RFC2971] command provides properties about the client
   primarily for use in server log or audit files.  Because IMAP ID is
   not related to application authentication or user identity in any
   way, and caching it for the duration of the client connection can be
   useful, the interaction between IMAP ID and the UNAUTHENTICATE
   command is defined by the implementation.

4.  Interactions

   This section describes interactions between this extension and other
   IMAP extensions or usage models.

4.1.  Stateful Extensions

   The connection state for the following list of IMAP extensions MUST
   be reset if both a) the specified extension is advertised and b) the
   UNAUTHENTICATE command is advertised and used.  This list may not be
   complete; the requirement to reset the connection state applies to
   all current and future extensions except STARTTLS and ID.  Additional
   requirements apply to specific stateful extensions as follows:

   o  Cached identity information, such as group memberships, that are
      used to evaluate access control lists [RFC4314] MUST be reset.

   o  After an UNAUTHENTICATE command is issued, CONDSTORE servers
      [RFC7162] MUST behave as if no CONDSTORE-enabling command was
      issued.

   o  If IMAP COMPRESS [RFC4978] is active, the server terminates its
      outgoing compression layer after it sends the CRLF following the
      OK response.  The client terminates its outgoing compression layer
      after the CRLF following the UNAUTHENTICATE command.  When it
      matters, the compression layer terminates before a SASL layer
      terminates.

   o  Any extensions enabled by the IMAP ENABLE [RFC5161] command cease
      to be enabled when the UNAUTHENTICATE command is issued.  This
      includes, but is not limited to, CONDSTORE [RFC7162], QRESYNC
      [RFC7162], METADATA [RFC5464], METADATA-SERVER [RFC5464], and
      UTF8=ACCEPT [RFC6855].

   o  A server advertising SEARCHRES [RFC5182] discards any saved search
      results so that '$' subsequently represents the empty set.

   o  A server advertising LANGUAGE [RFC5255] will revert to the
      "i-default" language.





Newman                       Standards Track                    [Page 4]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


   o  When a server advertises CONTEXT=SEARCH or CONTEXT=SORT [RFC5267],
      the UNAUTHENTICATE command includes an implicit CANCELUPDATE for
      all server contexts.

   o  When a server advertises NOTIFY [RFC5465], the UNAUTHENTICATE
      command cancels the server state related to the NOTIFY command and
      reverts to default IMAP base-specification behavior for
      notifications.

4.2.  Client Certificates, SASL EXTERNAL, and imaps

   When a TLS [RFC8446] security layer is negotiated using either the
   STARTTLS command or the imaps port [RFC8314], IMAP servers may be
   configured to request a client certificate, and IMAP clients may
   provide one.  Client credentials at the TLS layer do not normally
   impact the application layer; however, they do have an impact when
   the SASL EXTERNAL mechanism [RFC4422] in an IMAP AUTHENTICATE command
   is used to direct the server to use the provided client certificate
   to authenticate as the specified IMAP user.  The UNAUTHENTICATE
   command breaks any application-level binding of the TLS client
   credentials but does not discard the client credentials.  As a
   result, an administrative client may use a client certificate with
   administrative privilege to act on behalf of multiple IMAP users in
   the same connection via the EXTERNAL mechanism and the UNAUTHENTICATE
   command.

   Some server implementations using the imaps port will request and use
   a TLS client certificate to authenticate immediately as the default
   IMAP identity associated with that certificate.  These
   implementations indicate this behavior by using the PREAUTH greeting,
   as indicated by Transition 2 in the State Machine Diagram
   (Section 5).  As a result, TLS client certificates cannot be used for
   administrative proxy authentication with the imaps port unless the
   UNAUTHENTICATE command is also advertised.  In that case, an
   administrative client can respond to the PREAUTH greeting with an
   UNAUTHENTICATE command and then issue an AUTHENTICATE EXTERNAL
   command.














Newman                       Standards Track                    [Page 5]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


5.  Revised State Machine

                      +----------------------+
                      |connection established|
                      +----------------------+
                                 ||
                                 \/
               +--------------------------------------+
               |          server greeting             |
               +--------------------------------------+
                         || (1)       || (2)        || (3)
                         \/           ||            ||
               +-----------------+    ||            ||
               |Not Authenticated|<===||=========++ ||
               +-----------------+    ||     (7) || ||
                || (8)   || (4)       ||         || ||
                ||       \/           \/         || ||
                ||     +----------------+        || ||
                ||     |                |========++ ||
                ||     | Authenticated  |<=++    || ||
                ||     +----------------+  ||    || ||
                ||       || (8)   || (5)   ||(6) || ||
                ||       ||       \/       ||    || ||
                ||       ||    +--------+  ||    || ||
                ||       ||    |Selected|==++    || ||
                ||       ||    |        |========++ ||
                ||       ||    +--------+           ||
                ||       ||       || (8)            ||
                \/       \/       \/                \/
               +--------------------------------------+
               |               Logout                 |
               +--------------------------------------+
                                 ||
                                 \/
                   +-------------------------------+
                   |both sides close the connection|
                   +-------------------------------+

   Revised IMAP state machine transitions:

   1.  Connection without pre-authentication (OK greeting)

   2.  Pre-authenticated connection (PREAUTH greeting)

   3.  Rejected connection (BYE greeting)

   4.  Successful LOGIN or AUTHENTICATE command




Newman                       Standards Track                    [Page 6]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


   5.  Successful SELECT or EXAMINE command

   6.  CLOSE, UNSELECT [RFC3691], or failed SELECT or EXAMINE command

   7.  UNAUTHENTICATE command

   8.  LOGOUT command, server shutdown, or connection closed

6.  Formal Syntax

   The following syntax specification uses the Augmented Backus-Naur
   Form (ABNF), as described in [RFC5234].  Amended terms are defined in
   [RFC3501].

     capability     =/ "UNAUTHENTICATE"

     command-auth   =/ "UNAUTHENTICATE"

     command-select =/ "UNAUTHENTICATE"

7.  IANA Considerations

   IANA has added the UNAUTHENTICATE capability to the "IMAP
   Capabilities" registry.

8.  Security Considerations

   The original IMAP state machine was designed to allow a server-
   implementation approach in which each IMAP authentication identity
   matches an operating system identity and the server revokes all
   administrative privilege once authentication completes.  This
   extension is not compatible with that implementation approach.
   However, that approach has significant performance costs on Unix
   systems, and this extension is designed for environments where
   efficiency is a relatively high-priority deployment goal.  This
   extension is therefore appropriate for some deployments but may not
   be appropriate for the most security-sensitive environments.

   IMAP server implementations are complicated and can retain a lot of
   state related to an authenticated user.  Server implementers need to
   take care to reset all server state such that authentication as a
   subsequent user does not inherit any data or privileges from the
   previous user.  State data associated with a user can include cached
   identity information such as group membership used to evaluate access
   control lists [RFC4314], active notifications [RFC5465], access to
   per-user data such as flags, etc.





Newman                       Standards Track                    [Page 7]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


   IMAP server systems are often deployed in a two-tier model where a
   server-side IMAP proxy routes to an IMAP backend that handles all
   connections for a subset of possible users.  Some IMAP proxies enter
   a pass-through mode after authentication.  If enabled, the
   UNAUTHENTICATE command would allow a client, on a subsequent
   authentication, to bypass any security restrictions present in the
   proxy layer but not in the backend server layer.  As a result, IMAP
   server implementations of this extension MUST provide a way to
   disable it when it is not needed.  Use of an IMAP proxy that
   processes the UNAUTHENTICATE command at the proxy layer eliminates
   this concern.  Another option to mitigate this concern is for servers
   to only enable the UNAUTHENTICATE extension if the supplied
   authentication credentials are associated with an administrative
   identity.

9.  Privacy Considerations

   For the most part, this extension will have no impact on the privacy
   considerations already present in an IMAP implementation.  However,
   if this extension were used between data centers, it could improve
   end-user privacy by increasing the difficultly of traffic analysis
   due to connection reuse.

10.  References

10.1.  Normative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC3501]  Crispin, M., "INTERNET MESSAGE ACCESS PROTOCOL - VERSION
              4rev1", RFC 3501, DOI 10.17487/RFC3501, March 2003,
              <https://www.rfc-editor.org/info/rfc3501>.

   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/info/rfc5234>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.







Newman                       Standards Track                    [Page 8]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


10.2.  Informative References

   [RFC2971]  Showalter, T., "IMAP4 ID extension", RFC 2971,
              DOI 10.17487/RFC2971, October 2000,
              <https://www.rfc-editor.org/info/rfc2971>.

   [RFC3691]  Melnikov, A., "Internet Message Access Protocol (IMAP)
              UNSELECT command", RFC 3691, DOI 10.17487/RFC3691,
              February 2004, <https://www.rfc-editor.org/info/rfc3691>.

   [RFC4314]  Melnikov, A., "IMAP4 Access Control List (ACL) Extension",
              RFC 4314, DOI 10.17487/RFC4314, December 2005,
              <https://www.rfc-editor.org/info/rfc4314>.

   [RFC4422]  Melnikov, A., Ed. and K. Zeilenga, Ed., "Simple
              Authentication and Security Layer (SASL)", RFC 4422,
              DOI 10.17487/RFC4422, June 2006,
              <https://www.rfc-editor.org/info/rfc4422>.

   [RFC4959]  Siemborski, R. and A. Gulbrandsen, "IMAP Extension for
              Simple Authentication and Security Layer (SASL) Initial
              Client Response", RFC 4959, DOI 10.17487/RFC4959,
              September 2007, <https://www.rfc-editor.org/info/rfc4959>.

   [RFC4978]  Gulbrandsen, A., "The IMAP COMPRESS Extension", RFC 4978,
              DOI 10.17487/RFC4978, August 2007,
              <https://www.rfc-editor.org/info/rfc4978>.

   [RFC5161]  Gulbrandsen, A., Ed. and A. Melnikov, Ed., "The IMAP
              ENABLE Extension", RFC 5161, DOI 10.17487/RFC5161, March
              2008, <https://www.rfc-editor.org/info/rfc5161>.

   [RFC5182]  Melnikov, A., "IMAP Extension for Referencing the Last
              SEARCH Result", RFC 5182, DOI 10.17487/RFC5182, March
              2008, <https://www.rfc-editor.org/info/rfc5182>.

   [RFC5255]  Newman, C., Gulbrandsen, A., and A. Melnikov, "Internet
              Message Access Protocol Internationalization", RFC 5255,
              DOI 10.17487/RFC5255, June 2008,
              <https://www.rfc-editor.org/info/rfc5255>.

   [RFC5267]  Cridland, D. and C. King, "Contexts for IMAP4", RFC 5267,
              DOI 10.17487/RFC5267, July 2008,
              <https://www.rfc-editor.org/info/rfc5267>.







Newman                       Standards Track                    [Page 9]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


   [RFC5464]  Daboo, C., "The IMAP METADATA Extension", RFC 5464,
              DOI 10.17487/RFC5464, February 2009,
              <https://www.rfc-editor.org/info/rfc5464>.

   [RFC5465]  Gulbrandsen, A., King, C., and A. Melnikov, "The IMAP
              NOTIFY Extension", RFC 5465, DOI 10.17487/RFC5465,
              February 2009, <https://www.rfc-editor.org/info/rfc5465>.

   [RFC6855]  Resnick, P., Ed., Newman, C., Ed., and S. Shen, Ed., "IMAP
              Support for UTF-8", RFC 6855, DOI 10.17487/RFC6855, March
              2013, <https://www.rfc-editor.org/info/rfc6855>.

   [RFC7162]  Melnikov, A. and D. Cridland, "IMAP Extensions: Quick Flag
              Changes Resynchronization (CONDSTORE) and Quick Mailbox
              Resynchronization (QRESYNC)", RFC 7162,
              DOI 10.17487/RFC7162, May 2014,
              <https://www.rfc-editor.org/info/rfc7162>.

   [RFC8314]  Moore, K. and C. Newman, "Cleartext Considered Obsolete:
              Use of Transport Layer Security (TLS) for Email Submission
              and Access", RFC 8314, DOI 10.17487/RFC8314, January 2018,
              <https://www.rfc-editor.org/info/rfc8314>.

   [RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
              <https://www.rfc-editor.org/info/rfc8446>.

























Newman                       Standards Track                   [Page 10]
^L
RFC 8437        IMAP UNAUTHENTICATE for Connection Reuse     August 2018


Appendix A.  Design Considerations

   The author deliberately chose to add a separate UNAUTHENTICATE
   command instead of allowing the LOGIN or AUTHENTICATE commands to be
   issued when the connection is in a state other than unauthenticated.
   The primary reason for this choice is that the code that transitions
   from not authenticated state to authenticated state in a server is
   often the most security-sensitive code, because it needs to assume
   and handle unconditionally hostile attackers.  That sensitive code is
   simpler if it only handles a single server state (unauthenticated)
   and the state transition is as simple as possible.  Smaller and
   simpler code is easier to audit and write in a secure way.

   A secondary reason to have a separate command is that it is simpler
   to enable or disable the feature with that design.  See the
   discussion in the Security Considerations section recommending that
   implementations provide a way to disable this extension.

Acknowledgements

   Thanks to Fred Batty for implementing UNAUTHENTICATE and to Cyrus
   Daboo for constructive suggestions to improve this document.

Author's Address

   Chris Newman
   Oracle
   440 E. Huntington Dr., Suite 400
   Arcadia, CA  91006
   United States of America

   Email: chris.newman@oracle.com



















Newman                       Standards Track                   [Page 11]
^L