🤖 Redmine absichern: Schwachstellen, Angriffsvektoren, Härtung und Patch-Monitoring

Redmine ist eine quelloffene, auf Ruby on Rails basierende Projektmanagement- und Issue-Tracking-Plattform. Da sie ein umfangreiches Webinterface, REST-APIs, E-Mail-Integration, Quellcode-Browsing und erweiterbare Plugins bietet, weist sie eine beachtliche – aber aktiv gepflegte – Schwachstellenhistorie auf. Dieser Leitfaden fasst Redmines offizielle Sicherheitshinweise, NVD/CVE-Einträge, Ruby-on-Rails-Sicherheitsmeldungen und seriöse Drittquellen zusammen, um Administratoren einen praxisorientierten Überblick zu geben über: die Kategorien von Schwachstellen, die in Redmine aufgetreten sind; die daraus ableitbaren Angriffsvektoren; die architektonischen und konfigurationsseitigen Härtungsmaßnahmen, die das Risiko unbekannter (Zero-Day-)Lücken reduzieren; und die Kanäle, über die man Patches zeitnah einspielen kann.


1. Historische Schwachstellenkategorien und konkrete CVE-Beispiele

1.1 Cross-Site Scripting (XSS) – Die mit Abstand häufigste Klasse

XSS ist der am häufigsten auftretende Fehlertyp. Redmine rendert nutzerkontrollierten Inhalt an vielen Stellen (Textile, Markdown, Wiki-Seiten, Issue-Titel, benutzerdefinierte Felder, Makros, Erwähnungen, Thumbnails, Flash-Meldungen, den back_url-Parameter), und kleine Regressionen bei der Eingabebereinigung führen immer wieder zu gespeicherten oder DOM-basierten XSS-Lücken. Repräsentative Fälle:

  • CVE-2023-47258 / 47259 / 47260 – XSS im Markdown-Formatter, Textile-Formatter und bei Thumbnails (behoben in 5.0.6 / 4.2.11)
  • CVE-2022-44031 – Persistentes XSS über Textile-Blockquote-Zitate
  • CVE-2022-44637 – Gespeichertes XSS, gemeldet von JPCERT/CC
  • CVE-2020-36306 / 36307 – back_url-XSS und persistentes XSS in Textile-Inline-Links
  • CVE-2017-15574 – Gespeichertes XSS über SVG-Anhänge

1.2 SQL-Injection

Direkte SQL-Injection in Redmine selbst ist selten, ist aber vorgekommen. Der bekannteste Fall ist CVE-2019-18890, eine kritische SQL-Injection (CWE-89) in Versionen ≤ 3.3.9, die es einem authentifizierten Nutzer erlaubte, über eine manipulierte Objektabfrage auf geschützte Informationen zuzugreifen. Behoben in 3.3.10.

1.3 Remote Code Execution / Command Injection (insbesondere über SCM-Adapter)

Redmine ruft externe SCM-Binärdateien auf (git, hg, bzr, svn), was historisch die gefährlichste Angriffsfläche darstellt:

  • CVE-2011-4929 – Beliebige Befehlsausführung im SCM-Repository-Controller über einen ungefilterten rev-Parameter; ein Metasploit-Modul existiert noch für Legacy-Installationen
  • CVE-2017-18026 / CVE-2017-17536 – Remote-Code-Ausführung über den Mercurial-Adapter durch Branch-Namen, die mit --config= oder --debugger= beginnen
  • CVE-2022-24724 – RCE im mitgelieferten commonmarker-Gem (cmark-gfm); betraf Redmine 5.0.0/5.0.1
  • CVE-2016-3714 („ImageTragick“) – Kritische RCE durch ImageMagick-Verarbeitung von Anhängen

1.4 Authentifizierungs-, Autorisierungs- und Berechtigungsumgehung

Ein wiederkehrendes Muster: Später hinzugefügte Features (REST-API, Mail-Handler, Anhänge, Beobachter, Zeiteinträge, 2FA) versäumen manchmal die gleiche Autorisierungsprüfung, die das Web-UI durchführt:

  • CVE-2022-44030 – Kritische Zugriffskontrolllücke: attachments#download_all erlaubte Download von Anhängen nicht sichtbarer Issues
  • CVE-2021-30164 – Issues-API umging die Berechtigung add_issue_notes
  • CVE-2021-31864 – Gleiche Umgehung über den eingehenden Mail-Handler
  • CVE-2021-37156 – Benutzersitzungen wurden nach Aktivierung von 2FA nicht zurückgesetzt
  • CVE-2021-31866 – Timing-Angriff auf API-Schlüssel (Zeichenkettenvergleichs-Seitenkanalattacke)

1.5 Informationsoffenlegung

Viele Korrekturen betreffen subtile Datenlecks:

  • CVE-2021-42326 – Benutzernamen wurden über die Aktivitätsansicht preisgegeben
  • CVE-2020-36308 – CSV-Export von Zeiteinträgen gab Titel nicht sichtbarer Issues preis
  • CVE-2017-15572 – Passwort-Reset-Token wurde über den HTTP-Referer-Header geleakt

1.6 Pfadtraversal und Datei-Upload-Probleme

  • CVE-2021-31863 – Beliebiges Dateilesen im Git-Adapter
  • Defect #43690 (2026) – Verzeichnisüberquerung über Backslash-getrennte Pfade im Dateisystem-SCM-Adapter
  • Defect #43451 (2025) – PostScript-Dateien, die als PDF getarnt waren, lösten während der Thumbnail-Generierung beliebige Dateioperationen aus

1.7 LDAP-Injection

Defect #43692 (2026) – LDAP-Injection durch nicht maskierte Eingabe im LDAP-Suchfilter; behoben in 6.1.2 / 6.0.9 / 5.1.12.

1.8 Geerbte Rails/Gem-Schwachstellen

Ein großer Anteil der Redmine-Advisories sind schlicht Updates für Rails und Gems, deren Fehler die Anwendung betreffen: Rails CVE-2013-0156 (YAML/XML-Parameter-Parsing-RCE), Nokogiri CVE-2024-56171, jQuery UI CVE-2021-41182–41184, commonmarker CVE-2022-39209, ImageMagick CVE-2016-3714.


2. Angriffsvektoren, die Administratoren erwarten sollten

Text-Formatter und Wiki-/Issue-Inhalte: Die Textile- und Markdown-Rendering-Pipelines sind die am häufigsten fehleranfällige Komponente – jedes Feld mit Rich-Text-Eingabe ist als dauerhaftes XSS-Ziel zu betrachten.

REST-API und Atom-Feeds: API-Endpunkte haben historisch schwächere Autorisierungsprüfungen als das Web-UI. APIs und Feeds sollten als separate Autorisierungsdomäne behandelt werden.

Eingehende E-Mail (MailHandler): Dieser nicht authentifizierte Einstiegspunkt hat Umgehungen und Timing-Angriffe produziert. Wenn nicht benötigt: deaktivieren.

Repository-Browser / SCM-Adapter: Die schwerwiegendsten kritischen Lücken in Redmine sitzen hier. Jedes Feature, das git, hg, svn oder bzr mit halbwegs kontrollierten Argumenten aufruft, ist hochriskant.

Datei-Uploads, Anhänge und Thumbnails: Erweiterungsumgehungen, Berechtigungslücken bei download_all, PostScript-als-PDF-Thumbnail-RCE und SVG-basiertes gespeichertes XSS machen dies zu einer dauerhaften Angriffsfläche. ImageMagick-/libvips-Verarbeitung fügt nativem Code Risiko hinzu.

Authentifizierungs- und Session-Schicht: Kein nativer Schutz gegen Brute-Force-Logins. Achten Sie auf: Brute-Force-Login, 2FA-Randfälle, Token-Leaks via Referer und Timing-Leaks bei API-Schlüsseln.

Plugins und Themes: Großes, wenig kuratiertes Ökosystem mit direktem Datenbank-/Dateisystem-/View-Zugriff. Plugins gelten als die größte unabgedeckte Angriffsfläche von Redmine.

LDAP/AD-Authentifizierungspfad: LDAP-Injection und überprivilegierte Bind-Konten machen AD-Integration zu einem relevanten Vektor.


3. Schutz vor Zero-Day-Schwachstellen

3.1 Stack im verkürzten Zyklus aktuell halten

Redmine, Rails, Ruby, Bundler und gebündelte Gems mindestens monatlich aktualisieren – bei Sicherheitsreleases innerhalb von 24–72 Stunden. bundle audit und Brakeman in CI/CD gegen das eingesetzte Gemfile.lock laufen lassen. Nur die Serien 5.1, 6.0 und 6.1 erhalten aktuell Sicherheitskorrekturen – keine EOL-Versionen betreiben.

3.2 Architektonische Isolation

  • Als unprivilegierter OS-Nutzer in einem Container mit NoNewPrivileges=yes und schreibgeschütztem Root-Dateisystem betreiben
  • Einen Reverse-Proxy (nginx oder Apache + ModSecurity mit OWASP CRS) vorschalten – fängt generische XSS-, SQLi-, Pfadtraversal- und LFI-Muster ab
  • Ausgehenden Netzwerkverkehr filtern; der Redmine-Prozess braucht selten beliebigen ausgehenden HTTP-Zugriff
  • Dedizierten Datenbanknutzer nur mit Rechten auf das Redmine-Schema einsetzen
  • Repository-Verzeichnisse schreibgeschützt auf einem separaten Volume einbinden
  • WAF mit Regeln einsetzen, die auf back_url, --config= und \-Pfadmuster abzielen

3.3 Konfigurationshärtung innerhalb von Redmine

  • HTTPS durchgängig erzwingen; HSTS aktivieren; Secure– und HttpOnly-Session-Cookies setzen
  • Selbstregistrierung deaktivieren; Administratorgenehmigung für neue Konten erfordern
  • login_required = yes setzen, um jeden anonymen Zugriff zu unterbinden
  • Nicht verwendete SCM-Typen unter Administration → Einstellungen → Repositories deaktivieren
  • Erlaubte Anhang-Erweiterungen einschränken; SVG, HTML, JS und ausführbare Dateien sperren; Uploads mit ClamAV scannen
  • Strikte Content Security Policy (default-src 'self'; object-src 'none') am Reverse-Proxy konfigurieren – verwandelt die meisten gespeicherten XSS-Lücken in harmlose kosmetische Probleme
  • X-Frame-Options: DENY, X-Content-Type-Options: nosniff und Referrer-Policy-Header setzen
  • Zwei-Faktor-Authentifizierung für alle Administratoren verpflichtend machen
  • Zugriff auf MailHandler-/Sys-Controller auf bekannte IP-Bereiche beschränken
  • rack-attack oder das Plugin redmine_stronger einsetzen, um Login-Versuche zu drosseln
  • ImageMagicks policy.xml so konfigurieren, dass PS, EPS, PDF, MVG, MSL und URL-Codierer abgelehnt werden
  • secret_key_base aus der Versionsverwaltung heraushalten; bei vermutetem Kompromiss rotieren

3.4 Plugin-Disziplin

Nur wirklich benötigte Plugins installieren. Plugin-Versionen pinnen, deren Issue-Tracker beobachten, aufgegebene Plugins entfernen und neue Plugins vor dem Einsatz mit Brakeman prüfen.

3.5 Betriebliche Telemetrie und Backups

Logs zentralisieren mit Anomalie-Alarmen bei Auth-Fehlern, 500-Fehlern aus dem SCM-Controller und ungewöhnlichen Anhang-Download-Aktivitäten. Regelmäßige verschlüsselte Off-Host-Backups von files/, Datenbank und config/ erstellen. Den kostenlosen Planio Redmine Security Scanner (plan.io/redmine-security-scanner/) regelmäßig gegen den öffentlichen Endpunkt ausführen.


4. Wo man aktuell bleibt

Offizielle Redmine-Kanäle

  • Security Advisories Wiki: redmine.org/projects/redmine/wiki/Security_Advisories – kanonische, chronologische Liste aller behobenen Probleme mit Schweregrad, behobener Version und CVE-Referenzen
  • Redmine-News-Feed (RSS): redmine.org/news – Sicherheits- und Wartungsreleases werden hier zuerst angekündigt

Ruby und Rails Upstream

  • Rails Security Discourse: discuss.rubyonrails.org (Kategorie „Security Announcements“)
  • Ruby-Sicherheit: ruby-lang.org/en/security/
  • GitHub Advisory Database: github.com/advisories (Filter: rubygems-Ökosystem)
  • bundler-audit in CI gegen das Gemfile.lock ausführen

CVE-/Schwachstellen-Datenbanken

  • NVD: nvd.nist.gov (Suche nach Vendor: redmine)
  • CVE Details: cvedetails.com/vendor/8599/Redmine.html
  • OpenCVE / Vulmon: kostenlose E-Mail-Benachrichtigungen bei neuen Redmine-CVEs
  • JVN (Japan Vulnerability Notes): jvn.jp/en/ – viele JPCERT/CC-koordinierte Advisories erscheinen hier zuerst

Empfohlener Monitoring-Workflow

  1. RSS-Abonnement für redmine.org/news und den GitHub Security Advisories Feed
  2. Rails Security Discourse und ruby-security-ann-Mailingliste abonnieren
  3. bundler-audit und Brakeman in CI integrieren; Build bei HIGH/CRITICAL-Befunden abbrechen lassen
  4. Planios Redmine Security Scanner wöchentlich gegen den öffentlichen Hostnamen ausführen
  5. Dokumentierten Patch-SLA pflegen: KRITISCH innerhalb von 24 Std., HOCH innerhalb von 72 Std., MITTEL innerhalb von 7 Tagen, NIEDRIG innerhalb eines Monats

Zusammenfassung

Redmines Schwachstellenhistorie wird von XSS in seinen Rich-Text-Formatierern und Autorisierungslücken in API-/E-Mail-/Anhangspfaden dominiert, mit periodisch kritischen Problemen in SCM-Adaptern, Bildverarbeitung und gebündelten Gems. Die wichtigste Einzelmaßnahme ist das zeitnahe Einspielen von Patches für Redmine und den gesamten Ruby/Rails/Gem-Stack, überwacht über das offizielle Security Advisories Wiki, den Rails Security Discourse, NVD und bundler-audit. Darüber hinaus neutralisiert Defense-in-Depth – TLS überall, WAF/ModSecurity, strikte CSP, gehärtete ImageMagick-Richtlinien, verpflichtende 2FA für Administratoren und diszipliniertes Plugin-Management – den Großteil der historisch aufgetretenen Redmine-Fehlerklassen, einschließlich noch unbekannter.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert