Eine neue Sicherheitslücke, CVE-2024-29973, wurde in Zyxel NAS-Geräten entdeckt, die diese anfällig für Angriffe eines Mirai-ähnlichen Botnets macht. Diese Schwachstelle, ein Python-Code-Injektionsfehler, hat bei Cybersicherheitsexperten und Nutzern erhebliche Bedenken hervorgerufen.
Laut dem Blog von Outpost24 resultiert die Schwachstelle aus einem Fehler im simZysh-Endpunkt des Webservers der Zyxel NAS-Geräte. Dieser Endpunkt, der bei einem Patch für eine frühere Schwachstelle (CVE-2023-27992) eingeführt wurde, replizierte unabsichtlich dieselben Sicherheitsfehler. Das Kernproblem liegt in der Verwendung der eval()-Funktion, die dafür bekannt ist, beliebigen Code auszuführen, wenn sie nicht ordnungsgemäß bereinigt wird.
Ein aktueller Tweet von der Shadowserver Foundation teilte mit, dass die NAS-Geräte von Zyxel von einem Botnet, das CVE-2024-29973 ausnutzt, angegriffen werden.
Details zur Schwachstelle CVE-2024-29973
Die simZysh-Funktion im Python-Webserver der Zyxel NAS-Geräte soll die Ausgabe von zyshcgi simulieren. Die Implementierung dieser Funktion weist jedoch mehrere kritische Fehler auf:
class mainApplication(object):
def simZysh(self, *url_args, **request_args):
"""Simulate zyshcgi's output. GUI's broker shall set command as the following format:
'controller_name action_name {"arg1": value, "arg2": value, ...}'
"""
for i in url_args:
if not check_str_format(i, 'url'):
return tools_cherrypy.ARG_ERROR
for key, value in request_args.items():
if not check_str_format(key, 'request'):
if not check_list(key):
return tools_cherrypy.ARG_ERROR
if not check_str_format(value, 'request'):
if not check_list(value):
return tools_cherrypy.ARG_ERROR
r_value = {}
c_index = 0
while True:
c_key = 'c%d' % c_index
if request_args.has_key(c_key):
controller_n, action_n, args = request_args[c_key].split(' ', 2)
try:
controller = __import__('controllers.%s' % controller_n)
tmp_result = eval('controller.%s.%s(cherrypy=%s, arguments=%s)' % (
controller_n, action_n, 'cherrypy', args))
if not tmp_result:
raise ValueError
r_type = type(tmp_result)
if r_type == list:
r_value['zyshdata%d' % c_index] = tmp_result
else:
r_value['zyshdata%d' % c_index] = [
tmp_result]
r_value['errno%d' % c_index] = 0
r_value['errmsg%d' % c_index] = _('OK')
except:
r_value['zyshdata%d' % c_index] = []
r_value['errno%d' % c_index] = -99999
r_value['errmsg%d' % c_index] = _('Execute Error')
else:
break
c_index += 1
return r_value
simZysh.exposed = True
Ausnutzung und Auswirkungen
Die Schwachstelle ermöglicht es Angreifern, beliebigen Python-Code durch sorgfältig gestaltete Anfragen zu injizieren. Angreifer können Befehle auf dem Gerät ausführen, indem sie das mod_auth_zyxel-Modul umgehen und Python-Filter vermeiden. Ein bösartiger Payload könnte beispielsweise so aussehen:
POST /cmd,/simZysh/register_main/setCookie
c0='storage_ext_cgi CGIGetExtStoInfo None) and False or __import__("subprocess").check_output("makekey", shell=True)#'
Dieser Payload nutzt die eval()-Funktion aus, um den makekey-Befehl auszuführen und möglicherweise eine Hintertür auf dem Gerät zu öffnen.
Maßnahmen und Empfehlungen
Zyxel wurde über die Schwachstelle informiert und hat Patches veröffentlicht. In der Zwischenzeit wird Benutzern empfohlen:
- Remotezugriff deaktivieren: Den Remotezugriff auf die NAS-Geräte einschränken, um eine Ausnutzung zu verhindern.
- Netzwerksegmentierung anwenden: NAS-Geräte vom restlichen Netzwerk isolieren, um potenziellen Schaden zu begrenzen.
- Netzwerkverkehr überwachen: Ungewöhnlichen Netzwerkverkehr überwachen, der auf einen laufenden Angriff hinweisen könnte.
Die Entdeckung von CVE-2024-29973 unterstreicht die fortwährenden Herausforderungen bei der Sicherung von IoT-Geräten. Da Angreifer weiterhin solche Schwachstellen ausnutzen, ist es entscheidend, dass Hersteller robuste Sicherheitsmaßnahmen implementieren und Nutzer wachsam bleiben.