Software afetado

AXESS versões 4.x e 5.0. 0 são afectadas por uma potencial vulnerabilidade de desvio do esquema de autenticação
. (Outros produtos Axiros não são afectados).

Data de deteção: 18 de março de 2024 (créditos a nsideattacklogic)
Contacto:
[email protected]

Descrição

As versões mencionadas do site AXESS são vulneráveis à violação do esquema de autenticação  

Embora o Axiros não possa fazer declarações gerais sobre o impacto das vulnerabilidades mencionadas nos sistemas implementados, o Axiros recomenda a aplicação da correção descrita o mais rapidamente possível. As futuras versões do AXESS incluirão uma correção para esta vulnerabilidade.

Mitigação e correção

Para corrigir a vulnerabilidade, é necessário substituir um ficheiro no AXUserManager e adicionar uma nova permissão na configuração RBAC.

Processo de atualização Ansible

Leia os procedimentos de patch do Ansible antes de aplicar o patch.
https://docs.axiros.com/axess-documentation/install/latest/ansible_playbook_reference/utilities/distribute_patches/index.html
Observe que este procedimento deve ser repetido em todos os ambientes (por exemplo, laboratório, preparação, produção)


Descarregar o ficheiro de correção de acordo com a versão AXESS

4.0.0 AXESS_4_0_0__LegacyAXUserManager.py /opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager/LegacyAXUserManager.py

4.1.0 AXESS_4_1_0__AXUserManager.py /opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager/AXUserManager.py

4.2.0 AXESS_4_2_0__AXUserManager.py /opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager/AXUserManager.py

4.3.0 + 4.3.1 AXESS_4_3_0__AXUserManager.py /opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager/AXUserManager.py

5.0.0 AXESS_5_0_0__AXUserManager.py /opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager/AXUserManager.py


Coloque o ficheiro dentro da máquina de controlo Ansible 

Por favor, copie o ficheiro de correção de cima para dentro do chroot da sua máquina de controlo Ansible.

Tenha em atenção que poderá ter de criar a estrutura de pastas dentro do diretório de correcções (por predefinição, está vazio). Remova o prefixo da versão do ficheiro antes de o colocar na pasta de correcções (por exemplo, AXESS_5_0_0__AXUserManager.py renomear para AXUserManager.py

admin@ip-172-31-8-138:~$ sudo chroot /opt/axess-ansible
axess-ansible root@ip-172-31-8-138:/# cd /opt/axess-ansible/contrib-project/patches/
axess-ansible root@ip-172-31-8-138:/opt/axess-ansible/contrib-project/patches# ls -l
total 8.0K
drwxr-xr-x 2 root root 4.0K 2022-11-23 09:07 .
drwxr-xr-x 16 root root 4.0K 2022-07-06 16:11 ...
-rw-r--r-- 1 root root 0 2022-11-22 19:00 .gitkeep
 
# Nesta configuração, a pasta patches está vazia. Agora criamos a estrutura de pastas para o patch
axess-ansible root@ip-172-31-8-138:/opt/axess-ansible/contrib-project/patches# mkdir -p axess/base/Products/AXUserManager/
axess-ansible root@ip-172-31-8-138:/opt/axess-ansible/contrib-project/patches# cd axess/base/Products/AXUserManager/
axess-ansible root@ip-172-31-8-138:/opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager# ls
total 8.0K
drwxr-xr-x 2 root root 4.0K 2024-03-18 16:04 .
drwxr-xr-x 3 root root 4.0K 2024-03-18 16:04 ...
# A estrutura de pastas foi criada, por favor coloque o ficheiro de correção descarregado nessa diretoria para que tenha o seguinte aspeto
axess-ansible root@ip-172-31-8-138:/opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager# ls -l
total 24K
drwxr-xr-x 2 root root 4.0K 2024-03-18 16:06 .
drwxr-xr-x 3 root root 4.0K 2024-03-18 16:04 ...
-rw-r--r-- 1 root root 15K 2024-03-18 16:06 AXUserManager.py

 Criar a estrutura de pastas necessária 


Distribuir o patch através de manuais Ansible

Agora queremos implantar o patch em todos os nós do cluster. O playbook pode ser executado como qualquer outro playbook - certifique-se de selecionar o arquivo de inventário correto.

ansible-playbook --ask-vault-pass -i inventory/lab.py util_axess_patch_files.yml

Exemplo de saída

TASK [Create missing destination directories] *****************************************************************************************************************************
ok: [axess] => (item=diretório base)
skipping: [axess] => (item=arquivo a saltar)
ok: [axess] => (item=diretório base/Produtos)
ok: [axess] => (item=diretório base/Produtos/AXUserManager)
ignorando: [axess] => (item=pular ficheiro)
 
TASK [Copiar ficheiros corrigidos para os nós geridos] ****************************************************************************************************************************
skipping: [axess] => (item=diretório de exceção)
ignorando: [axess] => (item=/opt/axess-ansible/contrib-project/patches/axess/.gitkeep)
pulando: [axess] => (item=diretório de saltos)
saltando: [axess] => (item=diretório pulado)
alterado: [axess] => (item=/opt/axess-ansible/contrib-project/patches/axess/base/Products/AXUserManager/AXUserManager.py)
 
PLAY [Distribuir patches para os nós do tr069controller] ************************************************************************************************************************
 
TASK [Patches directory query] ********************************************************************************************************************************************
ok: [axess -> localhost]
 
TASK [Create missing destination directories] *****************************************************************************************************************************
a saltar: [axess] => (item=skipping file)
 
TASK [Copiar ficheiros corrigidos para os nós geridos] ****************************************************************************************************************************
skipping: [axess] => (item=/opt/axess-ansible/contrib-project/patches/tr069controller/.gitkeep)
 
PLAY [Distribuir correcções aos nós do configcontroller] ***********************************************************************************************************************
 
TASK [Patches directory query] ********************************************************************************************************************************************
ok: [axess -> localhost]
 
TASK [Create missing destination directories] *****************************************************************************************************************************
a saltar: [axess] => (item=skipping file)
 
TASK [Copiar ficheiros corrigidos para os nós geridos] ****************************************************************************************************************************
skipping: [axess] => (item=/opt/axess-ansible/contrib-project/patches/configcontroller/.gitkeep)
 
PLAY RECAP ****************************************************************************************************************************************************************
axess                     : ok=17 changed=1 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0

Reiniciar AXESS Processos do Norte

Após a implementação da correção, é necessário reiniciar todos os processos de ligação norte do AXESS

ansible-playbook --ask-vault-pass -i inventory/lab.py node-axess-northbound-uwsgi_restart.yml

Criar uma nova permissão em AXESS.GUI

O AXCustomerSupportPortal está a utilizar um URL de saída de sessão que é agora restrito para funções de utilizador que não sejam "Manager" após a aplicação do patch.
Crie uma nova permissão e atribua-a à função de utilizador "Authenticated". Dessa forma, todas as outras funções herdarão essa permissão. 

Este passo só é obrigatório se estiver a utilizar o AXCustomerSupportPortal ou uma página de logout HTML personalizada

Inicie sessão em AXESS.GUI e navegue até à página Controlo de Acesso Baseado em Funções.

Criar a nova permissão

Criar uma nova permissão com as seguintes definições

Nome: support_portal_logout
Operações, RPCs e Facetas: *
Path: */acl_users/logout.html*

Atribuir à função autenticada existente

Seleccione a nova permissão no menu pendente e clique no botão Guardar.
A nova permissão fica ativa depois de a cache ser renovada (predefinição: 60 segundos). Não é necessário terminar a sessão dos utilizadores existentes.