Hi, Here's the summary of the IRC meeting.
--- COMMUNITY MEETING Place: #openvpn-meeting on irc.freenode.net Date: Wed 3rd February 2021 Time: 11:30 CET (10:30 UTC) Planned meeting topics for this meeting were here: <https://community.openvpn.net/openvpn/wiki/Topics-2021-02-03> Your local meeting time is easy to check from services such as <http://www.timeanddate.com/worldclock> SUMMARY cron2, dazo, d12fk, lev, mattock, ordex and plaisthos participated in this meeting. --- Noted that OpenVPN DCO ("Data Channel Offload") is progressing well. UDP server works, including client dicsonnect. Client support is broken, but once that is fixed an official announcement can be made. A lot of the work still needs to be merged into "master", though. On plaisthos' test system (Hyper-V with Ubuntu VMs) he was able to, with iperf, get 550 Mbit for openvpn2 w/o DCO, 11 GBit/s raw, gre tunnel 4,5 GBit/s, 3,2 GBit/s with DCO+aes-gcm, 2,4 GBit/s for DCO+Chachapoly1305. --- Discussed OpenVPN 2.5.1. Noted that there is client-side stuff in (echo msg, windows fixes, and important auth-token improvements) already in. On server-side there are server-side auth-token fixes, which should go into 2.5 at some point. These are all "good and reasonable improvements", but nothing truly critical. It was agreed to make a decision about the 2.5.1 release schedule next week. -- Discussed "possible DoS vector with non-successful auth for the same client cert as for an existing session". This is related to the fact that OpenVPN ties reauth TLS session to the original session only by IP/port, so if a different cert comes in from the same IP+port, and 2.5 would "reauth fail, go away" while master does "reauth fail, unauth all keys, you all go away"? --- Full chatlog attached
(12:30:32) dazo: Meeting time? (12:30:32) ***: Playback Complete. (12:30:33) cron2_: yes (12:30:35) mattock: yes (12:31:08) mattock: who else is present? (12:31:23) d12fk: here (12:31:32) dazo ha scelto come argomento: Agenda https://community.openvpn.net/openvpn/wiki/Topics-2021-02-03 (12:31:50) dazo: d12fk: cool! (12:31:58) cron2_: \o/ (12:32:03) mattock: hi! (12:32:30) dazo: I know plaisthos and lev__ are alive .... (12:32:52) dazo: (and I've pinged them) (12:32:56) cron2_: ordex was complaing about doas yesterday, so yesterday he was alive, too :) (12:33:41) dazo: hehehe (12:33:57) becm [~b...@port-92-196-77-196.dynamic.as20676.net] è entrato nella stanza. (12:33:58) dazo: he might have been up hacking ovpn-dco last night (12:34:03) lev__: hi (12:34:13) mattock: hi! (12:34:14) plaisthos: hehe (12:34:14) dazo: o/ (12:35:01) ordex: here here ! (12:35:06) ordex: sorry (12:35:36) dazo: surfaced from a km long kernel stacktrace ...... :-P (12:35:47) ordex: LOL (12:35:58) ordex: those activities are secret ! (12:36:02) dazo: :-D (12:36:05) dazo: sorry! (12:37:05) mattock: https://community.openvpn.net/openvpn/wiki/Topics-2021-02-03 (12:37:12) mattock: let's get on with it :D (12:37:29) mattock: "Sync up on OpenVPN 2.5 and 2.6" first? (12:37:44) ***plaisthos checks (12:38:01) plaisthos: currently 54 commits ahead of master (12:38:02) plaisthos: :P (12:38:29) mattock: 2.6 I presume (12:38:29) cron2_: working my way through those bits that are on the list already... (and I have some questions about 02/11 v2, will ask later) (12:39:01) cron2_: 2.6 is sort of "what's happening in DCO land", since this is "the!" feature for 2.6, I think... (12:39:17) cron2_: any exciting news you're willing to share? (12:39:29) plaisthos: UDP server works (12:39:34) ***ordex cheers (12:39:45) cron2_: including client disconnect? (12:39:49) plaisthos: yes (12:39:50) ordex: yap (12:39:51) cron2_: cool (12:40:23) plaisthos: it is still work in progress and I want to fix client to work again before we publish it with an announcement on the mailing list (12:40:39) cron2_: ah, so we have a server-only implementation now :) (12:40:42) ordex: :D (12:40:43) cron2_: something for a change (12:40:57) ordex: I am working on the ovpn-dco support (APIs have changed since last release) (12:41:07) ordex: so we can do ovpn3 to ovpn2-server soon :D (12:41:17) plaisthos: but if you checkout the experimental branch of ovpn-dco and the dco branch of my repo you can get a working version (12:41:41) cron2_: exciting news indeed! (12:42:17) ordex: yap yap they are! (12:43:36) cron2_: on my side, I am working my way through the (already-ACKed) patches on the list - sorting what belongs where, if I can add more testing, ... - but progress has been slow. Too many distractions ("MAMA I DO NOT UNDERSTAND THIS HOMEWORK QUESTION?") (12:44:24) mattock: does not help focus for sure (12:44:24) cron2_: gcox is keeping us busy with sample plugin improvements :-) (and they are sort of "small and one-shot" so they are much easier to "just merge and get out of the way" than bigger stuff) (12:45:41) plaisthos: on my hyper-v ubuntu vms and using iperf I get 550 Mbit for openvpn2 w/o DCO, 11 GBit/s raw, gre tunnel 4,5 GBit/s, 3,2 GBit/s with DCO+aes-gcm, 2,4 GBit/s for DCO+Chachapoly1305, wireguard only gets 800 MBit/s in that setup, not sure what is going there (12:47:42) cron2_: impressive :) (12:48:24) plaisthos: It is also on a Zen2 processor so not really lowend ... ;) (12:49:29) ordex: on my side I will review the new version of the FIPS patches (12:49:32) ordex: this week (12:50:58) ordex: anything else for 2.5/2.6 ? (12:51:24) mattock: what is missing from 2.5.1? (12:52:05) cron2_: okay... so, 2.5.1... there is client-side stuff in (echo msg, windows fixes, and important auth-token improvements) (12:52:44) cron2_: on master, we have server-side auth-token fixes, which should go into 2.5 at some point (12:53:00) cron2_: we could do a 2.5.1 now, and merge that stuff to 2.5.2, or delay 2.5.1 a bit more (12:53:27) mattock: I'm all for delaying, if the delay is "a few weeks" and not "a few months" (12:53:33) ordex: yeah (12:53:41) cron2_: this depends on plaisthos' time to unfocus from DCO and look into this TLS handshake area again... (12:53:43) ordex: it doesn't seem like we have critical fixes to get out (12:53:50) mattock: no point releases after a major release in three months is quite an accomplishment imho (12:53:57) mattock: 2.5.0 has been good (12:54:24) cron2_: what we have in tree is all "good and reasonable improvements", but nothing truly critical (12:54:36) ordex: yeah, then postponing a bit seems reasonable (12:54:44) cron2_: (well, auth-token + auth-nocache is broken in everything including 2.5.0, but "so do not use auth-nocache, then") (12:55:11) ordex: yap, that's been longstanding (12:55:15) ordex: not a regression (12:55:21) cron2_: but it is fixed in release/2.5 now :-) (12:56:22) cron2_: anyway, I'll keep it on the agenda :-) (12:56:35) cron2_: which brings us to the other agenda item (12:56:42) cron2_: "possible DoS vector with non-successful auth for the same client cert as for an existing session" (12:57:39) cron2_: what I understood from plaisthos is that the changes in *master* might have opened up our "handle incoming TLS session" handling to a "user A kicks user B" DoS, *if* they use the same TLS cert, but user A does not have valid user+password credentials (12:58:20) plaisthos: yeah but it seems like not a real issue (12:58:20) cron2_: different cert -> no problem, valid user+pass -> korrekt logic ("this is considered a new login of the same user, so the old session is closed") (12:58:38) plaisthos: a different cert will also kill the connection :/ (12:59:02) cron2_: well, a different cert should be sorted towards a different session anyway? Or "different cert with the same common name"? (12:59:21) plaisthos: no if it has the same source ip/port (12:59:36) plaisthos: That is actually a weakness in the OpenVPN protocol (12:59:52) plaisthos: that we tie reauth TLS session to the original session only by IP/port (13:00:54) cron2_: okay, so a different cert comes in from the same IP+port, and 2.5 would "reauth fail, go away" while master does "reauth fail, unauth all keys, you all go away"? (13:01:07) plaisthos: yep (13:01:41) cron2_: two questions - "can we fix this in a nice way" and "do we care enough to fix it?" (13:02:23) cron2_: both scenarios sound like something which is hard to trigger in practice... though the "same IP+port" scenario could be triggered by an attacker on the path by injecting fake packets (13:04:45) mattock2 [~mattock@openvpn/corp/admin/mattock] è entrato nella stanza. (13:04:45) modalità (+o mattock2) da ChanServ (13:06:27) plaisthos: yeah to properly fix this we probably need changes to the protocol (13:06:49) plaisthos: maybe if syzzer surfaces again gets some ideas with him (13:07:35) plaisthos: something like giving out a session token or something on the initial auth and when you reauth you have to have it or something like that (13:09:05) ***cron2_ sends a gallon of fresh coffee to Delft (13:09:13) ordex: :D (13:09:19) cron2_: dunno, maybe it helps :) (13:09:33) ordex: plaisthos: yeah, like a secure cookie (13:09:54) cron2_: plaisthos: so for now, we keep master "as is" and do not merge the server-side reauth-fixes to 2.5? (13:09:58) ordex: or couldn't we store the fingerprint of the cert used for the first session ? (13:10:08) plaisthos: we do :P (13:10:18) plaisthos: and if they mismatch we deauth the session (13:10:53) plaisthos: The biggest problem of all this is that we don't have a proper way to tell a client that TLS reauth session fails (13:11:54) ordex: we can't send an AUTH_FAIL at that point (13:11:54) ordex: ? (13:12:01) ordex: what happens if the cert expire in the meantime? (13:12:06) ordex: between sessions (13:12:10) plaisthos: that disconnects the client completely (13:12:29) ordex: right (13:12:48) ordex: in this case we may just want to ignore the bogus renegotiation attempt (13:12:50) plaisthos: if the cert expires you fail early enough in the TLS session that client does not think that it is authenticated (13:13:07) cron2_: AUTH_FAIL is tied to session state, and if it's not the *same* client failing, you kick off the "real" client with it (13:13:11) cron2_: if I understood that right (13:13:35) ordex: yap (13:13:44) cron2_: so we can either ignore incoming "something is not right with this" reauth (which is what 2.5 does, so "expired token" leads to "unpleasantness for the client") (13:13:46) plaisthos: ordex: problem is that client doesn't know that the reauth failed and will switch to the new keys after the 60s defer timeout (13:13:49) ordex: this is why I more inclined towards "ignore" the malicious reauth (13:13:59) ordex: hm (13:14:11) cron2_: or deauth, which fixes "expired auth-gen-token" cases, but opens us to other deauth attacks (13:14:24) ordex: plaisthos: if it wasn't the client to reauth, why does he need to care if the fake reauth failed? (13:14:51) cron2_: ordex: it could have been the client that failed the reauth, because its auth-gen-token lifetime ran out (13:14:57) cron2_: so a new 2FA login is needed now (13:15:25) cron2_: and if we do not tell it, the result is "stuck connection" (13:15:27) ordex: well, that's another problem now, unrelated to the attack ? (13:16:11) cron2_: yes and no. It's a problem, and the fix for that problem opens the attack (13:16:20) ordex: ah got you (13:16:33) ordex: anyway, this may need a longer and specific discussion I presume? (13:16:43) ordex: hopefully involving syzzer (13:16:44) ordex: :) (13:17:13) cron2_: I agree. I wanted to bring this up, because plaisthos mentioned that there "might be a problem", and it's relevant for the 2.5.x planning (13:17:20) ordex: yap yap (13:17:34) cron2_: but I do not actually want to unfocus the DCO work, so, ignore me (13:18:05) cron2_: (OTOH if we can't fix this in 2.5 easily, we might as well do a 2.5.1 release "soonish", for the client-side goodies) (13:18:36) dazo: agreed (13:18:47) cron2_: shall we just let this settle for a week and decide on a specific plan next week? (13:18:57) ordex: sounds good (13:18:59) dazo: +1 (13:19:04) mattock2: +1 (13:19:08) plaisthos: on the other hand, OpenVPN AS (or rather management) has done it this way forever (13:19:27) plaisthos: if a reauth failed you got kicked off alltogether (13:26:36) mattock2 ha abbandonato la stanza (quit: Quit: IRC for Sailfish 0.9). (13:27:43) cron2_: still sounds like "let it settle for a week" :-) (and it scared mattock away) (13:28:09) cron2_: if there is a mattock instance left - any news on v6 for community? (13:30:36) mattock: yes (13:30:38) mattock: no (13:30:47) mattock: in that order (13:31:18) cron2_: okay.... my time for asking unpleasant question is over (13:33:07) mattock: meeting over I suppose (13:33:10) mattock: 3 minutes overtime (13:34:08) cron2_: yep (13:34:16) cron2_: everone else fell asleep already (13:35:59) d12fk: now you woke me up! =)
_______________________________________________ Openvpn-devel mailing list Openvpn-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openvpn-devel