Hi,

On Thu, Jul 19, 2018 at 10:48 AM, Jonathan K. Bullard
<jkbull...@gmail.com> wrote:
> Thank you very much, Selva.
>
> On Wed, Jul 18, 2018 at 10:48 PM, Selva Nair <selva.n...@gmail.com> wrote:
> <snip>
>> There are two messages involved:
>>
>> 1. First comes the fake auth failure message which contains the
>> challenge string. The format of this is as you have quoted above. The
>> single quoted string between the square brackets is what is actually
>> sent by the server. This should be parsed as
>>
>> CRV1:flags:state_id:base64_username:challenge
>> (note that there is no colon at the end)
>>
>> So in the above example
>> flags = R,E
>> state_id = Om01u7Fh4LrGBS7uh0SWmzwabUiGiW6I
>> base64_username = Y3Ixh
>> challenge = Please enter token PIN:
>>
>> In this case the last colon is a part of the challenge as its not a
>> part of the protocol.
>>
>> As the daemon thinks auth failed, this will trigger a restart. On
>> restart the client openvpn daemon will prompt for username password as
>> usual. So
>>
>> 2. The usual auth prompt comes as
>>
>>>PASSWORD:Need 'Auth' username
>>>PASSWORD:Need 'Auth' password
>>
>> The GUI should remember that this prompt follows the
>> verification-failure message that contained a CRV1 challenge and be
>> ready to respond accordingly. And should be responded to in the same
>> format as usual user-auth response but this time with the decoded
>> username as username and the specially formatted challenge response
>> (see below) as the password.
>
> I  _completely_  misunderstood how this works! I apologize for being so dense.
>
> Can you confirm that the following is correct?
>
>  1. When the GUI gets a ">PASSWORD:Verification Failed: 'Auth'
> ['CRV1:…" message, it just stores the info.
>
>  2. Each time after 1., when the GUI gets a ">PASSWORD:Need 'Auth'
> username" request, it responds with the decoded username from the
> stored info.
>
>  3. Each time after 1., when the GUI gets a ">PASSWORD:Need 'Auth'
> password" request, it asks the user for a password (using the prompt
> from the info) and sends that back with the "state_id" from the stored
> info and formatted as described.
>

Yes, yes and partially yes :) -- instead of each time, make it the "first time".
(see below)

>  4. Any later ">PASSWORD:Verification Failed: 'Auth' ['CRV1:…"
> messages overwrite the old info the GUI stored.
>

Yes.

> Or do 2. and 3. only happen once, and after that responses to
> ">PASSWORD:Need 'Auth' username" and ">PASSWORD:Need 'Auth' password"
> should revert back to the normal behavior until another
> ">PASSWORD:Verification Failed: 'Auth' ['CRV1:…" message is received?

One should revert back to the usual auth-user-pass state after
responding to the challenge. So, save the challenge and associated
info on receiving it and clear it on using it. Then the logic would
be: if a saved challenge is present use it to "construct" the response
for 'Auth' requests, else use the usual auth-user-pass procedure.

Selva

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to