Beiden Schwachstellen liegt dieselbe Ursache zugrunde: ein Widerspruch zwischen der Autorisierungslogik der Sicherheits-Middleware und dem Routing-Verhalten von Express.js. „Beide Schwachstellen entstehen aus einer Diskrepanz zwischen den Annahmen der Sicherheits-Middleware und dem Verhalten des Frameworks“, erklären die Forscher von Snyk. Die Authentifizierungsschicht sei davon ausgegangen, dass bestimmte URL-Muster stets auf eine bestimmte Weise behandelt würden, während Express.js sie anders verarbeitet habe.
Aufgefallen ist die Angriffswelle zuerst Qinglong-Nutzern selbst. Sie meldeten einen versteckten, bösartigen Prozess namens „.fullgc“, der zwischen 85 und 100 Prozent der CPU-Leistung beanspruchte. Der Name ahmt bewusst „Full GC“ nach – einen harmlosen, aber rechenintensiven Vorgang – um einer Entdeckung zu entgehen.
Nach Angaben von Snyk veränderten die Angreifer Qinglongs Datei config.sh und schleusten Shell-Befehle ein, die einen Miner nach „/ql/data/db/.fullgc“ herunterluden und im Hintergrund ausführten. Die Remote-Ressource unter „file.551911.xyz“ stellte mehrere Varianten der Binärdatei bereit, darunter für Linux x86_64, ARM64 und macOS.
Die Angriffe setzten sich mit mehreren bestätigten Infektionen über unterschiedliche Konfigurationen hinweg fort, auch hinter Nginx und SSL. Die Qinglong-Maintainer reagierten erst am 1. März auf die Lage: Sie bestätigten die Schwachstelle und forderten die Nutzer auf, das neueste Update einzuspielen.
Die zunächst über Pull Request #2924 bereitgestellte Gegenmaßnahme zielte allerdings nur darauf, Muster für Command Injection zu blockieren – das war laut Snyk nicht ausreichend. Die wirksame Korrektur kam demnach erst mit PR #2941, der die Umgehung der Authentifizierung in der Middleware behob.
