Docs

CVE-Status und Sicherheitskorrekturen

Gepflegt von der BW-Tech GmbH. Stand: 28. Oktober 2026, owncloud.online 11.0.25.

Die Tabellen nennen die Schwachstellen mit CVE-Kennung, die owncloud.online behoben hat, und die Version, ab der die Korrektur enthalten ist. Sie dienen als Nachweis bei Sicherheitsprüfungen und erklären, warum Scanner bei einigen mitgelieferten Bibliotheken trotzdem anschlagen. Sicherheitskorrekturen ohne CVE-Kennung stehen im CHANGELOG unter „Security“.

Codebasis

Die Codebasis enthält alle Sicherheitskorrekturen des Ursprungsprojekts bis zum 17. Februar 2026. Spätere Korrekturen von dort werden regelmäßig gesichtet und einzeln übernommen. Im Git-Verlauf steht die Herkunft in der Commit-Nachricht („cherry picked from commit …“). Die übernommenen Korrekturen stehen unter Übernommene Korrekturen im Code.

composer audit --locked meldet für die PHP-Abhängigkeiten von 11.0.25 keine Schwachstellen (geprüft am 28. Oktober 2026 für den Kern sowie die Apps oco_mcp und market). Dieselbe Prüfung läuft in der CI bei jeder Code-Änderung auf dem Hauptzweig und in jedem Pull Request und hält den Build bei einem Befund an.

PHP-Abhängigkeiten

CVE Komponente Schweregrad Korrigiert in owncloud.online ab
CVE-2026-40194 phpseclib/phpseclib — 3.0.52 11.0.0
CVE-2026-45065 symfony/routing — 5.4.52 / 6.4.40 / 7.4.12 11.0.3 (routing 7.4.13)
CVE-2026-48784 symfony/routing (Kodierung im UrlGenerator) — 7.4.13 11.0.3
CVE-2026-45067 symfony/mime (CRLF- und SMTP-Command-Injection) hoch 8.0.13 11.0.3
CVE-2026-45070 symfony/mime (Header-Injection) mittel 8.0.13 11.0.3
CVE-2026-45068 symfony/mailer (Argument-Injection bei Sendmail) mittel 7.4.12 11.0.3
CVE-2026-49214 guzzlehttp/psr7 (CRLF- und Header-Injection) — 2.11.0 11.0.3
CVE-2026-48998 guzzlehttp/psr7 (Host-Verwechslung) — 2.11.0 11.0.3
CVE-2026-55767 guzzlehttp/guzzle (eine Cookie-Domain aus nur einem Punkt passt auf alle Hosts) mittel 7.12.1 11.0.8
CVE-2026-55568 guzzlehttp/guzzle (HTTPS-Proxy fällt still auf Klartext zurück) mittel 7.12.2 11.0.8
CVE-2026-55766 guzzlehttp/psr7 (CRLF-Injection in der HTTP-Start-Line) mittel 2.12.1 11.0.8
GHSA-m557-wrgg-6rp4 phpseclib/phpseclib (SSRF über die X.509-AIA-Erweiterung, ohne CVE-Kennung) mittel 3.0.54 11.0.8
CVE-2026-69246 guzzlehttp/guzzle (nicht-kanonischer Host umgeht hostbasierte Prüfungen) hoch 7.15.2 11.0.12
CVE-2026-69245 guzzlehttp/guzzle (nicht-kanonische Cookie-Domain behält den Geltungsbereich für Subdomains) mittel 7.15.2 11.0.12
CVE-2026-53965 mcp/sdk in der App oco_mcp (Puffer im SSE-Transport wächst unbegrenzt; GHSA-7m52-jw36-44r3) — 0.7.1 11.0.14
CVE-2026-84308 phpseclib/phpseclib (X25519 nicht in konstanter Zeit) mittel 3.0.57 11.0.21

„—“ heißt: kein Schweregrad angegeben. 11.0.25 liefert guzzle 7.15.2, psr7 2.13.0, phpseclib 3.0.57, symfony/routing 7.4.13, symfony/mime 8.0.15 und symfony/mailer 7.4.15 aus.

PHP selbst

CVE-2026-109618 und CVE-2026-109619 betreffen den PHP-Interpreter, nicht den Code von owncloud.online. Über sie können Angreifer ohne Anmeldung Code auf dem Server ausführen. Für PHP 8.4 sind sie ab 8.4.27 behoben. Seit 11.0.24 meldet owncloud.online eine betroffene PHP-Version in den Setup-Warnungen, siehe Sicherheit und Setup-Warnungen. Das Update selbst spielen Sie über die Paketverwaltung Ihres Systems ein.

Übernommene Korrekturen im Code

Diese Korrekturen stammen aus dem Ursprungsprojekt. Die meisten schließen Sicherheitslücken, einige beheben Fehler im Betrieb.

Korrektur owncloud.online ab
Gehärtete Auflösung entfernter Dienste (Remote-Service) 11.0.0
SVG-Inhalte werden bereinigt, bevor ImageMagick sie verarbeitet 11.0.0
Keine leeren Tokens beim Koppeln vertrauenswürdiger Server (Federation) 11.0.0
IDOR in der WebDAV-Schnittstelle für Kommentare 11.0.3
App-Konfiguration über den AppConfigController nur noch für volle Administratoren lesbar 11.0.3
Richtige Benutzerkennung bei der Änderung der E-Mail-Adresse, samt Folgekorrektur 11.0.3
Alias für Kennungen von Speicher-Backends 11.0.3
Warnungen von PHP 8 zu veralteten Aufrufen (Deprecations) im Federation-DbHandler und im Verschlüsselungs-Wrapper 11.0.3
Federation mit Instanzen in Unterverzeichnissen 11.0.3
htaccess.RewriteBase blockierte API-Anfragen auf Dateien mit Endungen 11.0.3
core/signature.json entfernt (siehe Integritätsprüfung) 11.0.3
Das Anmeldeformular verrät nicht mehr, ob ein Konto existiert 11.0.12
Suchtreffer-Ausschnitte (search-highlights) werden kodiert ausgeliefert 11.0.13
Freigaben, die nur das Hochladen erlauben, ließen sich per WebDAV auflisten 11.0.20
occ config:system:set und config:app:set gaben gesetzte Geheimnisse im Klartext aus 11.0.20
Die Bitmap-Vorschau gab den Dateizeiger nur im Erfolgsfall frei 11.0.20

Anmeldeformular

Das Formular leitete den Verweis zum Zurücksetzen des Passworts aus canChangePassword() ab. Ob er erschien, verriet damit, ob ein Konto existiert. Dieser Teil der Korrektur ist übernommen, der Verweis erscheint jetzt bei jedem Anmeldeversuch gleich.

Der zweite Teil der ursprünglichen Korrektur ist bewusst nicht übernommen. Er löst den Anmeldenamen über userManager->get()->getUserName() auf. Weil AccountMapper::getByUid() ohne Rücksicht auf Groß- und Kleinschreibung sucht, würde das Formular für vorhandene Konten die kanonische Schreibweise zurückgeben und für unbekannte die Eingabe (?user=fRANK ergibt frank bzw. fRANK). Das wäre ein neuer, billigerer Weg, Konten zu erraten: ein einzelnes GET ohne Anmeldung, das die Bremse gegen Passwort-Raten nicht erfasst.

Suchtreffer-Ausschnitte

FilesSearchReportPlugin lieferte die WebDAV-Eigenschaft search-highlights unverändert aus dem Suchergebnis aus. Der Ausschnitt entsteht aus dem Dateiinhalt und trägt bewusst Markup (Zeilenumbrüche werden zu <br/>). Ein Client, der ihn als HTML darstellt, führte eingeschleustes Markup also mit aus: Stored XSS über einen geteilten Dateiinhalt.

Jetzt kodiert der Server den Ausschnitt zuerst mit htmlspecialchars(..., ENT_QUOTES, 'UTF-8') und ersetzt erst danach die Zeilenumbrüche, damit das beabsichtigte <br/> erhalten bleibt. Auf die Reihenfolge kommt es an. Wirksam wird der Pfad erst mit einem Suchanbieter, der Ausschnitte liefert. owncloud.online bringt keinen solchen mit, der verwundbare Code war aber enthalten. Regressionstest: FilesSearchReportPluginTest::testOnReportEncodesHighlights.

Frontend-Bibliotheken

Die Frontend-Bibliotheken liegen samt Korrekturen versioniert im Repository unter core/vendor und werden genau so ausgeliefert. Die Korrekturen bleiben deshalb über Updates hinweg bestehen.

Bibliothek Version CVE Status owncloud.online ab
jQuery 2.1.4 CVE-2020-11022, CVE-2020-11023 behoben: Die Erweiterung selbstschließender Tags (rxhtmlTag) in core/vendor/jquery/dist/jquery.js und jquery.min.js ist neutralisiert, wie in der Korrektur von jQuery 3.5.0 (htmlPrefilter); API-kompatibel 11.0.8
jQuery UI 1.10.0 CVE-2016-7103 behoben: closeText wird auf beiden Wegen als Text behandelt, beim Aufbau der Titelleiste und beim nachträglichen Setzen der Option 11.0.14
jQuery UI 1.10.0 CVE-2021-41182, CVE-2021-41183, CVE-2021-41184 behoben: Die Korrekturen aus jQuery UI 1.13.0 sind zurückportiert, auch in der Datepicker-Überschreibung von core/js/js.js 11.0.20
Select2 3.5.4 CVE-2016-10744 behoben: Ein eigener Formatierer darf nur noch DOM liefern, eine Zeichenkette wird entschärft (dieselbe Regel wie ab Select2 4.0.6). Das gilt auch für Erweiterungen Dritter 11.0.20
Bootstrap 3.4.1 — 3.4.1 ist die Sicherheitsversion der 3.x-Reihe (behebt unter anderem CVE-2019-8331). Die Reihe erhält keine Updates mehr —

Die Versionsnummern bleiben unverändert. Scanner, die nach Versionsnummern urteilen, melden die CVEs deshalb weiter, obwohl die Lücken geschlossen sind.

jQuery UI

Die drei Schwachstellen von 2021 betreffen Optionen der Datumsauswahl und der Positionierungshilfe. Der ausgelieferte Code setzt keine davon: Die Datumsauswahl wird nur mit Format- und Grenzdatumsangaben aufgerufen, die Positionierungshilfe gar nicht. Für Erweiterungen Dritter galt das nicht, und das war das Restrisiko. Die Korrekturen aus jQuery UI 1.13.0 sind deshalb zurückportiert:

  • CVE-2021-41182 (altField) und CVE-2021-41184 (position({of})): Beide Optionen sind als Auswahlausdruck gemeint. $(x) deutet eine Zeichenkette, die mit < beginnt, jedoch als Markup und baut daraus Elemente. Beide Stellen gehen jetzt über $(document).find(x), das eine Zeichenkette immer als Auswahlausdruck nimmt, wortgleich mit 1.13.0. Eine Zeichenkette, die kein gültiger Auswahlausdruck ist, löst jetzt einen Fehler aus, statt still ein Element zu bauen. So verhält sich auch 1.13.
  • CVE-2021-41183 (Textoptionen des Kalenders): Der Kalender baut sein Markup als Zeichenkette und setzte prevText, nextText, currentText, closeText, weekHeader, appendText, buttonText, die Tages- und Monatsnamen, den Jahreszusatz und die Rückgabe von calculateWeek roh ein. Alle werden jetzt entschärft, einschließlich des einfachen Anführungszeichens. Die Vorlagen schreiben ihre Attribute in einfachen Anführungszeichen (title='…'), ein doppeltes allein liefe daran vorbei.

Die mitgelieferten Sprachdateien von jQuery UI schreiben prevText als &#x3C;Zurück, also mit HTML-Entität. Nach dem Entschärfen stünde die Entität wörtlich da. Das ist hier kein Problem, weil diese Dateien nirgends geladen werden (core/js/core.json führt nur jquery-ui.custom.min.js). Monats- und Tagesnamen kommen aus der Übersetzung von owncloud.online und sind reiner Text.

Ein Wechsel auf jQuery UI 1.13 ist nicht abwärtskompatibel: button und buttonset entfallen dort zugunsten von controlgroup, und tabs ändert sich. Die Bibliothek trägt deshalb weiter die Versionsnummer 1.10.0.

Select2

Select2 fügte den Rückgabewert von formatResult und formatSelection roh in die Auswahlliste ein (select2.js:1123, :2650, :3254), unabhängig davon, ob escapeMarkup abgeschaltet ist. Entscheidend war also, was die Formatierer zurückgeben.

Die Lücke ist dort geschlossen, wo das Markup eingefügt wird, mit derselben Regel, die Select2 ab 4.0.6 anwendet: An der Stelle, an der alle Optionen zusammenlaufen (prepareOpts), wird ein vom Aufrufer mitgegebener Formatierer umhüllt. Liefert er ein DOM-Element oder ein jQuery-Objekt, geht es unverändert durch. Wer sein Markup über das DOM baut, hat die Fremddaten bereits als Text gesetzt. Liefert er eine Zeichenkette, wird sie entschärft. Die eingebauten Formatierer bleiben unberührt, sie entschärfen selbst und brauchen ihre Hervorhebung als Markup. Damit gilt der Schutz auch für Erweiterungen Dritter.

Die sechs Formatierer im Bestand (systemtagsfilelist.js, systemtagsinputfield.js, settings/js/settings.js, files_external/js/settings.js) geben jetzt jQuery-Objekte statt HTML-Zeichenketten zurück. Das ist zugleich die einzige Form, in der Select2 4.x noch Markup annimmt. Die drei Überschreibungen escapeMarkup: m => m sind damit überflüssig und entfallen.

Ein Wechsel auf Select2 4.x ändert die API an mehreren Stellen (templateResult, ajax.processResults, initSelection, .select2('val')). Die Bibliothek trägt deshalb weiter die Versionsnummer 3.5.4.

Nachweis im Browser

make test-js-browser prüft beide Korrekturen in einem echten Chromium, jeweils gegen die normale und die minifizierte Fassung der Bibliothek (tests/js/jquery_ui_xss_test.js mit 56 Prüfungen, tests/js/select2_xss_test.js mit 26 Prüfungen). Ein Kalender, dessen Textoptionen auf <img src=x onerror=…> stehen, und ein Schlagwort mit diesem Namen erscheinen als Text. Es entsteht kein Element, und es wird nichts ausgeführt. altField und position({of}) mit derselben Zeichenkette werden zurückgewiesen. In der Gegenprobe mit der unveränderten Bibliothek läuft der eingeschleuste Code tatsächlich (window.__xss === 1).

Die Tests prüfen zusätzlich, dass die Bibliotheken sonst unverändert arbeiten: bei jQuery UI der Kalender mit eigenen Monats- und Tagesnamen, position mit einem Auswahlausdruck sowie tabs, button, buttonset, progressbar, autocomplete, draggable und droppable, also die Widgets, die das Produkt tatsächlich nutzt.

Hinweis für Entwickler

Wer aus dem Quellcode baut: make clean-nodejs-deps (und damit make clean) löscht core/vendor. Ein anschließender Neuaufbau über yarn holt die Bibliotheken ohne diese Korrekturen. Das Make-Ziel warnt davor. Stellen Sie core/vendor stattdessen aus dem Repository wieder her.

Selbst prüfen

Die Abhängigkeiten eines Release lassen sich mit Composer gegen die bekannten Sicherheitsmeldungen prüfen. composer.json und composer.lock liegen nicht im Release-Paket, wohl aber im Repository unter dem Tag der Version:

bash
mkdir /tmp/oco-audit && cd /tmp/oco-audit
curl -fLO https://raw.githubusercontent.com/BWTECH-github/owncloud.online/v11.0.25/composer.json
curl -fLO https://raw.githubusercontent.com/BWTECH-github/owncloud.online/v11.0.25/composer.lock
composer audit --locked

Erwartet wird „No security vulnerability advisories found.“ Für die App oco_mcp gilt dasselbe mit den Dateien unter apps/oco_mcp/. Die auf einer Instanz tatsächlich installierten Fassungen stehen in lib/composer/composer/installed.json.