[PATCH] allow indefinite ForwardX11Timeout by setting it to 0

table at inventati.org table at inventati.org
Fri Jun 8 01:34:30 AEST 2018


On 2018-05-28 22:12, table at inventati.org wrote:
> On 2018-04-27 16:21, table at inventati.org wrote:
>> This change allows use of untrusted X11 forwarding (which is more
>> secure) without
>> requiring users to choose a finite timeout after which to refuse new
>> connections.
>> 
>> This matches the semantics of the X11 security extension itself, which
>> also treat a
>> validity timeout of 0 on an authentication cookie as indefinite.
>> 
>> Signed-off-by: Trixie Able <table at inventati.org>
>> ---
>>  clientloop.c | 12 +++++++++---
>>  ssh_config.5 |  1 +
>>  2 files changed, 10 insertions(+), 3 deletions(-)
>> 
>> diff --git a/clientloop.c b/clientloop.c
>> index 7bcf22e3..99dcec89 100644
>> --- a/clientloop.c
>> +++ b/clientloop.c
>> @@ -342,11 +342,17 @@ client_x11_get_proto(struct ssh *ssh, const char 
>> *display,
>>                  rmdir(xauthdir);
>>                  return -1;
>>              }
>> -
>> -            if (timeout >= UINT_MAX - X11_TIMEOUT_SLACK)
>> +            /* add (at most) X11_TIMEOUT_SLACK to timeout to get
>> +             * x11_timeout_real, but do not adjust a timeout of 0 or
>> +             * overflow integers.
>> +             */
>> +            if (timeout == 0)
>> +                x11_timeout_real = 0;
>> +            else if (timeout >= UINT_MAX - X11_TIMEOUT_SLACK)
>>                  x11_timeout_real = UINT_MAX;
>>              else
>>                  x11_timeout_real = timeout + X11_TIMEOUT_SLACK;
>> +
>>              if ((r = snprintf(cmd, sizeof(cmd),
>>                  "%s -f %s generate %s " SSH_X11_PROTO
>>                  " untrusted timeout %u 2>" _PATH_DEVNULL,
>> @@ -355,7 +361,7 @@ client_x11_get_proto(struct ssh *ssh, const char 
>> *display,
>>                  (size_t)r >= sizeof(cmd))
>>                  fatal("%s: cmd too long", __func__);
>>              debug2("%s: %s", __func__, cmd);
>> -            if (x11_refuse_time == 0) {
>> +            if (timeout != 0) {
>>                  now = monotime() + 1;
>>                  if (UINT_MAX - timeout < now)
>>                      x11_refuse_time = UINT_MAX;
>> diff --git a/ssh_config.5 b/ssh_config.5
>> index 71705cab..cdc407ed 100644
>> --- a/ssh_config.5
>> +++ b/ssh_config.5
>> @@ -683,6 +683,7 @@ X11 connections received by
>>  after this time will be refused.
>>  The default is to disable untrusted X11 forwarding after twenty 
>> minutes has
>>  elapsed.
>> +A timeout of zero allows untrusted X11 forwarding indefinitely.
>>  .It Cm ForwardX11Trusted
>>  If this option is set to
>>  .Cm yes ,
> 
> r?
> _______________________________________________
> openssh-unix-dev mailing list
> openssh-unix-dev at mindrot.org
> https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev

Bump, ccing djm at openbsd.org as annotate indicates they committed most of 
the code near these changes.

If bumping patches is discouraged please let me know--I don't mean to be 
rude but would like to have an r+ or r- for this small changeset.


More information about the openssh-unix-dev mailing list