backup(.pl): Replace OpenVPN DH parameter with ffdhe4096

Message ID c4d400d7-1321-bd08-1019-3732a9e887d1@ipfire.org
State Superseded
Headers
Series backup(.pl): Replace OpenVPN DH parameter with ffdhe4096 |

Commit Message

Peter Müller Dec. 13, 2022, 3:47 p.m. UTC
  This ensures restoring a backup won't silently bring back an insecure
Diffie-Hellman parameter (which could also not be inspected through the
web interface anymore).

Reported-by: Michael Tremer <michael.tremer@ipfire.org>
Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
---
 config/backup/backup.pl | 9 +++++++++
 1 file changed, 9 insertions(+)
  

Comments

Peter Müller Dec. 13, 2022, 3:48 p.m. UTC | #1
Also, backup.pl is actually a shell script, so it should either go as "backup.sh"
or without any file suffix whatsoever. :-)

> This ensures restoring a backup won't silently bring back an insecure
> Diffie-Hellman parameter (which could also not be inspected through the
> web interface anymore).
> 
> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
> ---
>  config/backup/backup.pl | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/config/backup/backup.pl b/config/backup/backup.pl
> index 6fd9e45bb..520d9315d 100644
> --- a/config/backup/backup.pl
> +++ b/config/backup/backup.pl
> @@ -187,6 +187,15 @@ restore_backup() {
>  	# Update OpenVPN CRL
>  	/etc/fcron.daily/openvpn-crl-updater
>  
> +	# Replace previously used OpenVPN Diffie-Hellman parameter by ffdhe4096
> +	if [ -f /var/ipfire/ovpn/server.conf ]; then
> +		sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf
> +	fi
> +
> +	if [ -f "/var/ipfire/ovpn/n2nconf/*/*.conf" ]; then
> +		sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/n2nconf/*/*.conf
> +	fi
> +
>  	return 0
>  }
>
  
Michael Tremer Dec. 14, 2022, 6:02 p.m. UTC | #2
Hello Peter,

> On 13 Dec 2022, at 15:47, Peter Müller <peter.mueller@ipfire.org> wrote:
> 
> This ensures restoring a backup won't silently bring back an insecure
> Diffie-Hellman parameter (which could also not be inspected through the
> web interface anymore).
> 
> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
> ---
> config/backup/backup.pl | 9 +++++++++
> 1 file changed, 9 insertions(+)
> 
> diff --git a/config/backup/backup.pl b/config/backup/backup.pl
> index 6fd9e45bb..520d9315d 100644
> --- a/config/backup/backup.pl
> +++ b/config/backup/backup.pl
> @@ -187,6 +187,15 @@ restore_backup() {
> # Update OpenVPN CRL
> /etc/fcron.daily/openvpn-crl-updater
> 
> + # Replace previously used OpenVPN Diffie-Hellman parameter by ffdhe4096
> + if [ -f /var/ipfire/ovpn/server.conf ]; then
> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf
> + fi
> +
> + if [ -f "/var/ipfire/ovpn/n2nconf/*/*.conf" ]; then
> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/n2nconf/*/*.conf
> + fi

The second command will never be executed because "/var/ipfire/ovpn/n2nconf/*/*.conf” will never exist.

Because the string is quoted, the shell won’t conduct any path expansion.

What could work is running the sed command on all files simultaneously and if there is nothing to change, it won’t do anything. Passing server.conf and n2nconfig/*/*.conf will never fail if there is no N2N configuration. server.conf should always exist.

Best,
-Michael

> +
> return 0
> }
> 
> -- 
> 2.35.3
  
Michael Tremer Dec. 14, 2022, 6:03 p.m. UTC | #3
Alternatively we could just not change anything and add a smiling from the old path to the new one.

> On 14 Dec 2022, at 18:02, Michael Tremer <michael.tremer@ipfire.org> wrote:
> 
> Hello Peter,
> 
>> On 13 Dec 2022, at 15:47, Peter Müller <peter.mueller@ipfire.org> wrote:
>> 
>> This ensures restoring a backup won't silently bring back an insecure
>> Diffie-Hellman parameter (which could also not be inspected through the
>> web interface anymore).
>> 
>> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
>> ---
>> config/backup/backup.pl | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>> 
>> diff --git a/config/backup/backup.pl b/config/backup/backup.pl
>> index 6fd9e45bb..520d9315d 100644
>> --- a/config/backup/backup.pl
>> +++ b/config/backup/backup.pl
>> @@ -187,6 +187,15 @@ restore_backup() {
>> # Update OpenVPN CRL
>> /etc/fcron.daily/openvpn-crl-updater
>> 
>> + # Replace previously used OpenVPN Diffie-Hellman parameter by ffdhe4096
>> + if [ -f /var/ipfire/ovpn/server.conf ]; then
>> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf
>> + fi
>> +
>> + if [ -f "/var/ipfire/ovpn/n2nconf/*/*.conf" ]; then
>> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/n2nconf/*/*.conf
>> + fi
> 
> The second command will never be executed because "/var/ipfire/ovpn/n2nconf/*/*.conf” will never exist.
> 
> Because the string is quoted, the shell won’t conduct any path expansion.
> 
> What could work is running the sed command on all files simultaneously and if there is nothing to change, it won’t do anything. Passing server.conf and n2nconfig/*/*.conf will never fail if there is no N2N configuration. server.conf should always exist.
> 
> Best,
> -Michael
> 
>> +
>> return 0
>> }
>> 
>> -- 
>> 2.35.3
  
Michael Tremer Dec. 14, 2022, 6:03 p.m. UTC | #4
This used to be a Perl script, but got rewritten.

And it would have been a pain to change it since it is located in /var/ipfire and so on. So I left the extension.

> On 13 Dec 2022, at 15:48, Peter Müller <peter.mueller@ipfire.org> wrote:
> 
> Also, backup.pl is actually a shell script, so it should either go as "backup.sh"
> or without any file suffix whatsoever. :-)
> 
>> This ensures restoring a backup won't silently bring back an insecure
>> Diffie-Hellman parameter (which could also not be inspected through the
>> web interface anymore).
>> 
>> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
>> ---
>> config/backup/backup.pl | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>> 
>> diff --git a/config/backup/backup.pl b/config/backup/backup.pl
>> index 6fd9e45bb..520d9315d 100644
>> --- a/config/backup/backup.pl
>> +++ b/config/backup/backup.pl
>> @@ -187,6 +187,15 @@ restore_backup() {
>> # Update OpenVPN CRL
>> /etc/fcron.daily/openvpn-crl-updater
>> 
>> + # Replace previously used OpenVPN Diffie-Hellman parameter by ffdhe4096
>> + if [ -f /var/ipfire/ovpn/server.conf ]; then
>> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf
>> + fi
>> +
>> + if [ -f "/var/ipfire/ovpn/n2nconf/*/*.conf" ]; then
>> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/n2nconf/*/*.conf
>> + fi
>> +
>> return 0
>> }
>>
  
Peter Müller Dec. 17, 2022, 2:44 p.m. UTC | #5
Hello Michael,

thanks for your reply, and apologies for the belated one of mine.

> Hello Peter,
> 
>> On 13 Dec 2022, at 15:47, Peter Müller <peter.mueller@ipfire.org> wrote:
>>
>> This ensures restoring a backup won't silently bring back an insecure
>> Diffie-Hellman parameter (which could also not be inspected through the
>> web interface anymore).
>>
>> Reported-by: Michael Tremer <michael.tremer@ipfire.org>
>> Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
>> ---
>> config/backup/backup.pl | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>>
>> diff --git a/config/backup/backup.pl b/config/backup/backup.pl
>> index 6fd9e45bb..520d9315d 100644
>> --- a/config/backup/backup.pl
>> +++ b/config/backup/backup.pl
>> @@ -187,6 +187,15 @@ restore_backup() {
>> # Update OpenVPN CRL
>> /etc/fcron.daily/openvpn-crl-updater
>>
>> + # Replace previously used OpenVPN Diffie-Hellman parameter by ffdhe4096
>> + if [ -f /var/ipfire/ovpn/server.conf ]; then
>> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf
>> + fi
>> +
>> + if [ -f "/var/ipfire/ovpn/n2nconf/*/*.conf" ]; then
>> + sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/n2nconf/*/*.conf
>> + fi
> 
> The second command will never be executed because "/var/ipfire/ovpn/n2nconf/*/*.conf” will never exist.
> 
> Because the string is quoted, the shell won’t conduct any path expansion.

Indeed, and even with the string not quoted, it won't work either, at least according
to https://www.shellcheck.net/wiki/SC2144. Glad you caught that, this error made it into
the update.sh script of Core Update 172 as well. :-/

> What could work is running the sed command on all files simultaneously and if there is nothing to change, it won’t do anything. Passing server.conf and n2nconfig/*/*.conf will never fail if there is no N2N configuration. server.conf should always exist.

Thanks. I can confirm that

sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf /var/ipfire/ovpn/n2nconf/*/*.conf

conducts this task properly. I will update the update.sh script and take the liberty
to amend this change to backup.pl straight away. I'll get back to you bilaterally for
the rest of C172.

Thanks, and best regards,
Peter Müller

> 
> Best,
> -Michael
> 
>> +
>> return 0
>> }
>>
>> -- 
>> 2.35.3
>
  

Patch

diff --git a/config/backup/backup.pl b/config/backup/backup.pl
index 6fd9e45bb..520d9315d 100644
--- a/config/backup/backup.pl
+++ b/config/backup/backup.pl
@@ -187,6 +187,15 @@  restore_backup() {
 	# Update OpenVPN CRL
 	/etc/fcron.daily/openvpn-crl-updater
 
+	# Replace previously used OpenVPN Diffie-Hellman parameter by ffdhe4096
+	if [ -f /var/ipfire/ovpn/server.conf ]; then
+		sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/server.conf
+	fi
+
+	if [ -f "/var/ipfire/ovpn/n2nconf/*/*.conf" ]; then
+		sed -i 's|/var/ipfire/ovpn/ca/dh1024.pem|/etc/ssl/ffdhe4096.pem|' /var/ipfire/ovpn/n2nconf/*/*.conf
+	fi
+
 	return 0
 }