InfraFenceInfraFence

Live Security Operations

Loslegen

CVE-2017-5638: Apache Struts 2 Content-Type-RCE, prüfen und beheben

Zuletzt aktualisiert:

In Apache Struts 2 baut der Jakarta-Multipart-Parser seine Fehlermeldung aus dem Content-Type-Header eines fehlgeschlagenen Uploads und wertet sie als OGNL aus. Ein Angreifer schickt eine Anfrage mit einem OGNL-Ausdruck in diesem Header und führt Befehle auf dem Server aus, ohne Anmeldung.

Sie wurde ab März 2017 in freier Wildbahn ausgenutzt und bei großen Datenlecks verwendet. Alte Struts-Anwendungen laufen noch in vielen Unternehmen, deshalb gehen die Scans weiter.

Auf einen Blick

CVE
CVE-2017-5638
Software
Apache Struts 2
Betroffene Versionen
2.3.5 bis 2.3.31, 2.5 bis 2.5.10
Behoben in
2.3.32, 2.5.10.1
CVSS-Score
9.8 Kritisch (NVD, CVSS 3.1) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CISA Known Exploited Vulnerabilities
Ja, aufgenommen am 3. November 2021
Von der NVD veröffentlicht
11. März 2017
Virtueller Patch von InfraFence
vp-cve-2017-5638 (ModSecurity id 9920007)

Was betroffen ist

Laut Apaches Bulletin S2-045: Struts 2.3.5 bis 2.3.31 und 2.5 bis 2.5.10, mit dem standardmäßigen Jakarta-Multipart-Parser. Struts ist eine Bibliothek in Java-Webanwendungen (struts2-core-*.jar), kein Systempaket.

Prüfen, ob ein Server sie enthält

Suche nach der Bibliothek und nach Anwendungen, die sie mitbringen; die Version steht im Namen:

Jede Linux-Distribution
sudo nice -n 19 ionice -c3 find / -xdev -type f -name 'struts2-core-*.jar' 2>/dev/null
Jede Linux-Distribution (braucht unzip)
sudo nice -n 19 ionice -c3 find / -xdev -type f \( -name '*.war' -o -name '*.ear' \) 2>/dev/null \
  | while read -r f; do
      unzip -l "$f" 2>/dev/null | grep -oE 'struts2-core-[0-9][^/ ]*\.jar' | sed "s|^|$f: |"
    done

Beheben

  1. Aktualisiere Struts mindestens auf 2.3.32 oder 2.5.10.1, die Releases, die sie behoben haben. Beide Linien haben schon lange keinen Support mehr: Plane den Umstieg auf ein unterstütztes Struts-Release, das auch die späteren Schwachstellen schließt.
  2. Baue die Anwendung neu, deploye sie erneut und starte sie dann neu.
  3. Wenn du nicht sofort aktualisieren kannst, nennt Apaches Bulletin zwei Workarounds: einen Servlet-Filter, der Anfragen ablehnt, deren Content-Type kein einfaches multipart/form-data ist, oder den Wechsel zu einem anderen Multipart-Parser.

Achtung: Eine Anwendung, die ein verwundbares Struts im Internet betrieben hat, kann schon vor Jahren kompromittiert worden sein: Suche nach unbekannten Konten, geplanten Aufgaben und Web-Shells.

Wie InfraFence sie blockiert, während du aktualisierst

Der virtuelle Patch für CVE-2017-5638 ist eine ModSecurity-Regel auf dem Request-Header Content-Type: Die Regel blockiert einen Header, der %{ oder ${ enthält, den Anfang eines OGNL-Ausdrucks. Ein echter Content-Type enthält keins von beiden.

Hinweis: Derselbe Fehler ist auch über die Header Content-Disposition und Content-Length eines Uploads erreichbar (CVE-2017-5638 umfasst sie; Apaches S2-046 beschreibt sie). Der Patch prüft nur Content-Type, die in freier Wildbahn ausgenutzte Form. Das Upgrade deckt alle ab.

Wie der Patch angewendet wird

  1. Der Agent notiert, welche SSH-Ports und Websites antworten.
  2. Er schreibt die Regel (ModSecurity-ID 9920007) zwischen seine eigenen Markierungen in seiner ModSecurity-Datei, führt apachectl configtest aus und lädt Apache sanft neu. Schlägt der Test fehl, wird die vorherige Datei zurückgespielt.
  3. Er prüft, ob SSH und die Websites weiterhin antworten, und entfernt den Patch, wenn nicht.
  4. Er prüft mit einer harmlosen lokalen Testanfrage, ob ModSecurity mit der Regel wirklich blockiert. Ein ModSecurity im Modus DetectionOnly protokolliert nur: Der Patch wird dann entfernt und als unwirksam gemeldet, nie als angewendet.

Jede Anfrage, die der Patch blockiert, wird mit CVE-2017-5638 gemeldet (Agent 1.0.37 oder neuer): Du siehst die Versuche in der Aktivität des Servers und auf der Seite Ausnutzung im Dashboard und weißt so, dass die Schwachstelle gegen dich ausprobiert wird.

Achtung: Ein virtueller Patch blockiert die bekannte Form des Angriffs bei den Anfragen, die auf diesem Server über Apache laufen. Er ersetzt das Update nicht: Installiere die behobene Version und entferne den Patch dann unter Aktivität mit Rückgängig, wenn du ihn nicht mehr brauchst.

Virtuelle Patches brauchen Apache mit ModSecurity, die Einstellung Änderungen an der Webserver-Konfiguration erlauben und kein Hosting-Panel oder Konfigurationsmanagement-Tool, das den Webserver verwaltet; sie gehören zum Plan Pro und zu AutoMode. Ein Mensch wendet sie aus der KI-Analyse an, oder AutoMode tut es. Siehe Virtuelle Patches.

Quellen

Die Fakten auf dieser Seite stammen aus diesen Quellen; prüfe sie auf Änderungen.

Kostenlos auf 1 Server testen

Starter ist für einen Server kostenlos, mit vollem Schutz und automatischen Sperren. Ohne Kreditkarte.

Installiere den Agenten als root, mit deinem Token anstelle von <TOKEN>:

curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>

Das Token erstellst du im Dashboard unter Server › Server hinzufügen.