Confluence Server Webwork OGNL Injection
Mea culpa, mea maxima culpa! Wenn man zur Prokrastination bezüglich unangenehmer Dinge neigt, dann kann sich dies rächen. Ich hoste für einen meiner Kunden einen Linux-Container (LXC) unter Proxmox mit Jira Software und Confluence.
Mit Spätherbst dieses Jahres ist mir aufgefallen, dass Confluence-Prozesse 100% CPU-Rechenleistung beanspruchten. Auf den ersten Blick konnte ich aber keine Ursache für dieses Verhalten finden und in Absprache mit dem Kunden wurde ein Update von Jira und Confluence ins Auge gefasst.
Spät, aber doch habe ich mich dieser Aufgabe gestellt. Als Erstes wurden die Dienste Jira und Confluence beendet. Aber trotzdem sind zwei Confluence-Prozesse mit 100% CPU-Auslastung weitergelaufen.
In der ersten Einschätzung habe ich das Problem mit einem unsauberen Shutdown des Confluence-Services in Verbindung gebracht. Aber ein
killall java
konnte keine laufenden Java-Prozesse finden und ein
kill -9 pid
endete in einer Endlosschleife - kaum war einer dieser Prozesse gekillt, wurde ein neuer gestartet. Als mir dämmerte, dass die Java-Runtime dieser angeblichen Java-Prozesse nicht existent war - Jira und Confluence bringen ihre eigene Java-Runtime mit -, wurde mir langsam klar, dass Feuer am Dach war.
Eine kurze Suche im Internet hat dann recht schnell zutage gebracht, dass über die Schwachstelle CVE-2021-26084 ein versteckter Crypto Miner auf dieser Instanz installiert wurde. Als nächster Schritt wurde der Linux-Container beendet und unter proxmox mit
pct mount VMID
# mounted CT VMID in '/var/lib/lxc/VMID/rootfs'
gemountet. VMID steht für die numerische ID des Linux-Containers.
Im Internet findet sich der Hinweis, dass der Crypto Miner als cron-Job gestartet wird.
cat /var/lib/lxc/VMID/rootfs/var/spool/cron/crontabs/confluence
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Tue Dec 28 18:03:25 2021)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
*/2 * * * * /opt/atlassian/confluence/logs/emdps/dizqkqmohq
Es wurden sowohl der Cron-Job, als auch der Crypto Miner in der VM gelöscht.
rm /var/lib/lxc/VMID/rootfs/var/spool/cron/crontabs/confluence
rm /var/lib/lxc/VMID/rootfs/opt/atlassian/confluence/logs/emdps/dizqkqmohq
pct unmount VMID
Mit dem Malware- and Rootkits-Scanner lynis in der neuesten Version konnten keine weiteren verdächtigen Modifikationen gefunden werden .
cd /opt/
wget https://downloads.cisofy.com/lynis/lynis-3.0.6.tar.gz
tar xvzf lynis-2.6.6.tar.gz
cd lynis
lynis audit system
Als letzter Schritt wurden sowohl Jira als auch Confluence auf den neuesten Stand gebracht.
Als Abschluss ist etwas interne Manöverkritik angebracht. Man hängt zwar solche Sicherheitsprobleme nicht unbedingt an die große Glocke, aber aus Fehlern sollte man für sich lernen. Als Erstes sollte man so auffällige Probleme wie eine ungewöhnlich hohe CPU-Last nicht auf die lange Bank schieben und sich für die installierte Software in einer VM, auch wenn man nur indirekt für diese verantwortlich ist, bezüglich Sicherheitsproblemen, wenn möglich, automatisch benachrichtigen zu lassen. Im Falle von Jira und Confluence wurde einfach die Notifikation per E-Mail für allfällige Probleme im Atlassian-Konto aktiviert.