JFrog entdeckt 7 RCE- und DoS-Schwachstellen in ClickHouse DBMS

Das Forschungsteam von JFrog Security entdeckte kürzlich sieben neue Sicherheitslücken in ClickHouse, einem weit verbreiteten Open-Source-Datenbankmanagementsystem (DBMS), das für die analytische Online-Verarbeitung (OLAP) eingesetzt wird. ClickHouse wurde von Yandex für Yandex.Metrica entwickelt, ein Web-Analyse-Tool, das häufig verwendet wird, um visuelle Berichte und Videoaufzeichnungen von Benutzeraktionen zu erhalten, sowie Website-Traffic zu verfolgen, um die Wirksamkeit von Online- und Offline-Werbung zu bewerten. Das JFrog Security Team hat diese Schwachstellen offengelegt und mit den ClickHouse-Betreibern an der Verifizierung der Korrekturen gearbeitet.

Die Schwachstellen erfordern eine Authentifizierung, können aber von jedem Benutzer mit Leserechten ausgenutzt werden. Das bedeutet, dass der Angreifer das Ziel des ClickHouse-Servers auskundschaften muss, um gültige Anmeldedaten zu erhalten. Jeder beliebige Satz von Anmeldedaten reicht aus, da selbst ein Benutzer mit den niedrigsten Berechtigungen alle Schwachstellen auslösen kann. Durch das Auslösen der Schwachstellen kann ein Angreifer den ClickHouse-Server zum Absturz bringen, Speicherinhalte auslaufen lassen oder sogar Remotecodeausführung (RCE) bewirken.

Im Folgenden sind die sieben Schwachstellen aufgeführt, die das JFrog Security Team entdeckt hat:

  • CVE-2021-43304 und CVE-2021-43305: Heap-Buffer-Overflow-Schwachstellen im LZ4-Kompressionscodec
  • CVE-2021-42387 und CVE-2021-42388: Heap-Out-of-Bounds-Read-Schwachstellen im LZ4-Kompressionscodec
  • CVE-2021-42389: Divide-by-Zero-Schwachstelle im Delta-Komprimierungscodec
  • CVE-2021-42390: Divide-by-Zero-Schwachstelle im Delta-Double-Kompressionscodec
  • CVE-2021-42391: Divide-by-Zero-Schwachstelle im Gorilla-Komprimierung Codec

Technischer Hintergrund

Der ClickHouse-Server ermöglicht es einem Benutzer, seine Abfragen zu komprimieren. Ein Benutzer kann eine komprimierte Abfrage übergeben, indem er den URL-Abfrage-String-Parameter decompress=1 an die Weboberfläche weitergibt, etwa so:

  • cat query.bin | curl -sS –data-binary @- ‚http://serverIP:8123/?user=guest1&password=1234&decompress=1‘

Dabei ist serverIP die IP-Adresse des ClickHouse-Servers, auf dem ein Benutzer „guest1″ mit dem Passwort „1234″ eingerichtet ist. Dieser Benutzer kann auch mit einer „readonly“-Richtlinie konfiguriert werden. Der Client stellt dem Server die gesamte Struktur zur Verfügung und kontrolliert somit ihren gesamten Inhalt. Die komprimierten Daten werden verbraucht, indem eine CompressedReadBuffer-Instanz mit der Struktur als Eingabe konstruiert wird.

CVE-2021-42388 und CVE-2021-42387

Bei diesen beiden Schwachstellen erfolgt ein Kopiervorgang vom Match-Pointer zum Output-Pointer, wobei möglicherweise Speicher außerhalb des Bereichs vor dem „dest“-Speicherpuffer kopiert wird. Der Zugriff auf Speicher außerhalb der Grenzen des Buffers kann sensible Informationen preisgeben oder in bestimmten Fällen zu einem Absturz der Anwendung aufgrund eines Segmentierungsfehlers führen. CVE-2021-42387 ist eine ähnliche Schwachstelle wie CVE-2021-42388, die die oberen Grenzen des komprimierten Buffers (Quelle) als Teil des Kopiervorgangs überschreitet.

CVE-2021-42389, CVE-2021-42390 und CVE-2021-42391

– Divide-by-Zero-Schwachstellen

Hierbei handelt es sich um „Divide-by-Zero“-Schwachstellen in verschiedenen von ClickHouse unterstützten Codecs. Sie beruhen darauf, dass das erste Byte des komprimierten Buffers auf null gesetzt wird. Der Dekomprimierungscode liest das erste Byte des komprimierten Buffers und führt damit eine Modulo-Operation durch, um den Rest zu erhalten. In den meisten Fällen wird die Modulo-Operation in Intel x86-64 durch einen DIV-Befehl ausgeführt, der nicht nur die Zahlen teilt, sondern auch den Rest in einem Register speichert.

Diese Schwachstellen wurden durch „Smart Fuzzing“ des Dekomprimierungsmechanismus gefunden. Smart Fuzzing nutzt die Kenntnis des Eingabeformats, um Eingabedaten zu erzeugen, die sich (relativ) an das erwartete Protokollschema halten, statt völlig zufälliger Daten.

Behebung der Schwachstellen

Die Behebung dieser Probleme bedarf eine Aktualisierung von ClickHouse auf die Version v21.10.2.15-stable oder höher. Wenn ein Upgrade nicht möglich ist, müssen dem Server Firewall-Regeln hinzugefügt werden, die den Zugriff auf den Web-Port (8123) und den TCP-Server-Port (9000) nur auf bestimmte Clients beschränken. JFrog-Produkte sind für dieses Problem nicht anfällig, da sie nicht das ClickHouse DBMS verwenden. Zusätzlich zur Aufdeckung neuer Sicherheitslücken und Bedrohungen bietet JFrog Entwicklern und Sicherheitsteams einen einfachen Zugang zu den neuesten relevanten Informationen für ihre Software – einschließlich der Verwendung von PJSIP Open-Source-Bibliotheksversionen und zugehörigen CVEs – durch automatisches Sicherheitsscannen mit dem JFrog Xray SCA-Werkzeug.