Enforce NPF-SEC-00009

This commit is contained in:
Orsiris de Jong 2024-05-15 13:22:11 +02:00
parent 01ba031d25
commit aa0f77f401
5 changed files with 22 additions and 17 deletions

View file

@ -47,7 +47,7 @@ Using `--show-config` should hide sensible data, and manager password.
# NPF-SEC-00009: Option to show sensible data # NPF-SEC-00009: Option to show sensible data
When using `--show-config` or right click `show unecrypted`, we should only show unencrypted config if password is set. When using `--show-config` or right click `show unecrypted`, we should only show unencrypted config if password is set.
Envivironmnt variable `NPBACKUP_MANAGER_PASSWORD` will be read to verify access. Environment variable `NPBACKUP_MANAGER_PASSWORD` will be read to verify access, or GUI may ask for password.
Also, when wrong password is entered, we should wait in order to reduce brute force attacks. Also, when wrong password is entered, we should wait in order to reduce brute force attacks.
# NPF-SEC-00010: Date attacks # NPF-SEC-00010: Date attacks

View file

@ -119,8 +119,8 @@ ENCRYPTED_OPTIONS = [
"repo_uri", "repo_uri",
"repo_opts.repo_password", "repo_opts.repo_password",
"repo_opts.repo_password_command", "repo_opts.repo_password_command",
"prometheus.http_username", "global_prometheus.http_username",
"prometheus.http_password", "global_prometheus.http_password",
"env.encrypted_env_variables", "env.encrypted_env_variables",
"global_options.auto_upgrade_server_username", "global_options.auto_upgrade_server_username",
"global_options.auto_upgrade_server_password", "global_options.auto_upgrade_server_password",

View file

@ -212,15 +212,6 @@ def config_gui(full_config: dict, config_file: str):
nonlocal env_variables_tree nonlocal env_variables_tree
nonlocal encrypted_env_variables_tree nonlocal encrypted_env_variables_tree
if key in ("repo_uri", "repo_group"):
if object_type == "group":
window[key].Disabled = True
else:
window[key].Disabled = False
# Update the combo group selector
window[key].Update(value=value)
return
try: try:
# Don't bother to update repo name # Don't bother to update repo name
# Also permissions / manager_password are in a separate gui # Also permissions / manager_password are in a separate gui
@ -239,6 +230,8 @@ def config_gui(full_config: dict, config_file: str):
"prometheus.http_password", "prometheus.http_password",
) or key.startswith("prometheus.additional_labels"): ) or key.startswith("prometheus.additional_labels"):
return return
# NPF-SEC-00009
# Don't show sensible info unless unencrypted requested # Don't show sensible info unless unencrypted requested
if not unencrypted: if not unencrypted:
# Use last part of key only # Use last part of key only
@ -254,6 +247,15 @@ def config_gui(full_config: dict, config_file: str):
except (KeyError, TypeError): except (KeyError, TypeError):
pass pass
if key in ("repo_uri", "repo_group"):
if object_type == "group":
window[key].Disabled = True
else:
window[key].Disabled = False
# Update the combo group selector
window[key].Update(value=value)
return
# Update tree objects # Update tree objects
if key == "backup_opts.paths": if key == "backup_opts.paths":
if value: if value:
@ -1174,7 +1176,7 @@ def config_gui(full_config: dict, config_file: str):
sg.Input(key="repo_opts.repo_password", size=(95, 1)), sg.Input(key="repo_opts.repo_password", size=(95, 1)),
], ],
[ [
sg.Text(_t("config_gui.backup_repo_password_command"), size=(40, 1)), sg.Text(_t("config_gui.backup_repo_password_command"), size=(95, 1)),
], ],
[ [
sg.Image( sg.Image(
@ -1846,7 +1848,7 @@ def config_gui(full_config: dict, config_file: str):
manager_password = configuration.get_manager_password( manager_password = configuration.get_manager_password(
full_config, object_name full_config, object_name
) )
if ask_manager_password(manager_password): if not manager_password or ask_manager_password(manager_password):
full_config = set_permissions(full_config, values["-OBJECT-SELECT-"]) full_config = set_permissions(full_config, values["-OBJECT-SELECT-"])
continue continue
if event in ( if event in (
@ -1986,6 +1988,9 @@ def config_gui(full_config: dict, config_file: str):
) )
# NPF-SEC-00009 # NPF-SEC-00009
env_manager_password = os.environ.get("NPBACKUP_MANAGER_PASSWORD", None) env_manager_password = os.environ.get("NPBACKUP_MANAGER_PASSWORD", None)
if not manager_password:
sg.PopupError(_t("config_gui.no_manager_password_defined"))
continue
if ( if (
env_manager_password and env_manager_password == manager_password env_manager_password and env_manager_password == manager_password
) or ask_manager_password(manager_password): ) or ask_manager_password(manager_password):

View file

@ -89,7 +89,7 @@ en:
machine_group: Machine group machine_group: Machine group
show_decrypted: Show decrypted show_decrypted: Show decrypted
no_manager_password_set: No managert password set, cannot show unencrypted no_manager_password_defined: No manager password defined, cannot show unencrypted
# compression # compression
auto: Automatic auto: Automatic

View file

@ -34,7 +34,7 @@ fr:
minimum_backup_age: Délai minimal entre deux sauvegardes minimum_backup_age: Délai minimal entre deux sauvegardes
backup_repo_uri: URI / chemin local dépot de sauvegarde backup_repo_uri: URI / chemin local dépot de sauvegarde
backup_repo_password: Mot de passe (chiffrement) dépot de sauvegarde backup_repo_password: Mot de passe (chiffrement) dépot de sauvegarde
backup_repo_password_command: Commande qui retourne le mot de passe chiffrement dépot backup_repo_password_command: Commande qui retourne le mot de passe de chiffrement dépot
upload_speed: Vitesse limite de téléversement (KB/s) upload_speed: Vitesse limite de téléversement (KB/s)
download_speed: Vitesse limite de téléchargement (KB/s) download_speed: Vitesse limite de téléchargement (KB/s)
backend_connections: Connexions simultanées au dépot backend_connections: Connexions simultanées au dépot
@ -90,7 +90,7 @@ fr:
machine_group: Groupe machine machine_group: Groupe machine
show_decrypted: Voir déchiffré show_decrypted: Voir déchiffré
no_manager_password_set: Mot de passe gestionnaire non initialisé, ne peut montrer la version déchiffrée no_manager_password_defined: Mot de passe gestionnaire non initialisé, ne peut montrer la version déchiffrée
# compression # compression
auto: Automatique auto: Automatique