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.