Log4Jshell Ansible Fix for IBM Spectrum Protect Opscenter
Stichworte: CVE-2021-44228, CVE-2021-45046, CVE-2021-45105 , IBM Spectrum Protect Operations Center Version 8.1.0.000-8.1.13.000, 7.1.0.000-7.1.14.000
Log4Shell ist eine schwere kritische Sicherheitslücke, die viele Versionen der Apache Log4j Anwendung betrifft. Die Schwachstelle ermöglicht die unauthentifizierte Remotecodeausführung. Angreifer können sie ausnutzen, indem sie den User-Agent-String ihres Browsers im Format ${jndi:ldap://[attacker_URL]}
ändern.
Auch das IBM Spectrum Protect Opscenter verwendet diese vulnerable Java Klassenbibliothek. Siehe auch IBM Security Bulletin.
Ansible Playbook zur Fehlerbehebung
Folgendes Ansible Playbook kann zur Fehlerbehebung angewendet werden.
Leider hat die Apache Org das Letsencrypt SSL Zertifikat noch nicht aktualisiert und auch die sha512sum nicht im üblichen Format abgelegt. Daher wird in dem Ansible Playbook nicht - wie grundsätzlich empfohlen - alle Ansible Builtin Module verwendet, sondern auf Shell Equivalente ausgewichen, und leider auch eine Zertifikatsvalidierung vermieden.
---
- hosts: tsm_servers
environment:
LANG: en_US.UTF8
LC_ALL: en_US.UTF8
become: yes
gather_facts: no
# parallelization
serial: 12
vars:
LOG4J: 2.17.0
pre_tasks:
- setup:
gather_subset: "!hardware,!network,!virtual"
tags: always
tasks:
- name: Download file with checksum url (sha512)
vars:
dl_path: "https://downloads.apache.org/logging/log4j/{{LOG4J}}/apache-log4j-{{LOG4J}}-bin.tar.gz"
get_url:
url: "{{dl_path}}"
dest: "/tmp/apache-log4j-{{LOG4J}}-bin.tar.gz"
#checksum: "sha512:https://www.apache.org/dist/logging/log4j/{{LOG4J}}/apache-log4j-{{LOG4J}}-bin.tar.gz.sha512"
validate_certs: false
register: out
- debug:
var: out
verbosity: 1
# - name: uncompress
# vars:
# ua_files: "apache-log4j-{{LOG4J}}-bin/log4j-core-{{LOG4J}}.jar apache-log4j-{{LOG4J}}-bin/log4j-api-{{LOG4J}}.jar apache-log4j-{{LOG4J}}-bin/log4j-1.2-api-{{LOG4J}}.jar apache-log4j-{{LOG4J}}-bin/log4j-slf4j18-impl-{{LOG4J}}.jar"
# unarchive:
# src: "/tmp/apache-log4j-{{LOG4J}}-bin.tar.gz"
# remote_src: true
# dest: /tmp/
# extra_opts:
# - '--strip-components=1'
# - "{{ua_files}}"
# register: out
- name: stop opscenter process
systemd:
name: "opscenter"
state: stopped
- name: remove vulnerable files
shell: "rm -vf /opt/tivoli/tsm/ui/Liberty/usr/servers/guiServer/apps/TSM_HELP.war/WEB-INF/lib/{log4j-core-,log4j-api-,log4j-1.2-api-,log4j-slf4j18-impl-}*.jar"
register: out
- debug:
var: out
verbosity: 1
- name: uncompress
vars:
ua_files: "apache-log4j-{{LOG4J}}-bin/log4j-core-{{LOG4J}}.jar apache-log4j-{{LOG4J}}-bin/log4j-api-{{LOG4J}}.jar apache-log4j-{{LOG4J}}-bin/log4j-1.2-api-{{LOG4J}}.jar apache-log4j-{{LOG4J}}-bin/log4j-slf4j18-impl-{{LOG4J}}.jar"
sh_cmd: "tar xzf /tmp/apache-log4j-{{LOG4J}}-bin.tar.gz --strip-components=1 {{ua_files}}"
shell: "{{sh_cmd}}"
args:
chdir: /opt/tivoli/tsm/ui/Liberty/usr/servers/guiServer/apps/TSM_HELP.war/WEB-INF/lib/
register: out
- name:
debug:
var: out
verbosity: 1
- name: start opscenter process
systemd:
name: "opscenter"
state: started
Beispielaufruf/Anwendung
cd /ansible/
/usr/bin/ansible-playbook -i /ansible/inventories/ -i /ansible/inventories/hosts.ini /ansible/playbooks/log4j_fix.yml --vault-password-file ~/.ansible_vault_pw