CUTSIGNcutting for sign — daily OSINT threat read
AI-generated verdict card, published automatically by the pipeline. Version 4, as of 2026-11-01; hype score 7. Written by a model from the stored public sources and not reviewed by a person; re-issued in place when the evidence changes (the URL stays). The detection-coverage table below is checked automatically from public sources and re-checked daily. Supersedes version 3. All cards · news: CVE-2026-110447

Collabora richdocumentscode command injection (CVE-2026-110447) exploited to plant web shells on Nextcloud

Patch now + Hunt / IRP2confidence: mediumP2 +1deep read +1day 2 of the story +13 publishers +1primary source +1material development on watch +2

Reporting says attackers have exploited an unauthenticated command injection in Nextcloud's built-in CODE server app (richdocumentscode) before 26.4.303 since September 10. They dropped PHP web shells and searched for credentials and wallets. Today, find every Nextcloud with richdocumentscode, upgrade or remove the app (disabling is reported as insufficient), and hunt access logs back to September 10.

Triage: Unauthenticated RCE is reported exploited, but only on Nextcloud hosts running the built-in richdocumentscode app. Raise to P1 if such a host is found, especially an internet-exposed one [S1][S3].

Two reputable secondary outlets [S1][S3] and a GitHub issue in the project's repository with affected-admin reports [S2] agree on the core claim. No vendor or CERT advisory is among the sources.

Changed since version 3

What happened

Timeline

2026-09-10Earliest attacks reported by affected admins S3
2026-10-15Reporting of exploitation, web shells and credential searches; fix in richdocumentscode 26.4.303 S1
2026-10-16Further reporting adds the stopped-CODE-server condition and states that standalone, package and AIO deployments are unaffected S3

Detect

Injection attempts against richdocumentscode proxy.php · Web server access log

index=* "/apps/richdocumentscode/proxy.php" ("%24%28" OR "$(" OR "IFS" OR "%2e%2e" OR "base64") earliest=09/01/2026:00:00:00 | stats count min(_time) as first max(_time) as last values(status) as status by host src http_user_agent
FROM logs-* | WHERE @timestamp >= "2026-09-01T00:00:00Z" AND url.original LIKE "*/apps/richdocumentscode/proxy.php*" AND (url.original LIKE "*%24%28*" OR url.original LIKE "*$(*" OR url.original LIKE "*IFS*" OR url.original LIKE "*%2e%2e*" OR url.original LIKE "*base64*") | STATS count = COUNT(*), first = MIN(@timestamp), last = MAX(@timestamp), status = VALUES(http.response.status_code) BY host.name, source.ip, user_agent.original

A hit means: A request matching the reported exploit pattern reached the app. On its own this shows an attempt. A 200 response followed by a shx*.php request points to success [S1].

Requests to generated web shells · Web server access log

index=* "/apps/richdocumentscode/" ".php" earliest=09/01/2026:00:00:00 | regex _raw="/apps/richdocumentscode/sh[a-z]?[0-9a-f]{4,6}\.php" | eval c_param=if(match(_raw,"\.php\?c="),1,0) | stats count sum(c_param) as c_param_requests min(_time) as first values(status) as status by host src
FROM logs-* | WHERE @timestamp >= "2026-09-01T00:00:00Z" AND url.original RLIKE ".*/apps/richdocumentscode/sh[a-z]?[0-9a-f]{4,6}\\.php.*" | EVAL c_param = CASE(url.original LIKE "*.php?c=*", 1, 0) | STATS count = COUNT(*), c_param_requests = SUM(c_param), first = MIN(@timestamp), status = VALUES(http.response.status_code) BY host.name, source.ip

A hit means: Someone requested a file matching the reported shell naming. A 200 response, especially with ?c= such as ?c=id, means a shell likely exists and was used [S1][S2].

Known indicators · Proxy, DNS, firewall, web and EDR logs

index=* ("89.38.98.50" OR "139.28.18.122" OR "webhook.site" OR "4b9fbd0663fbfd6028fc216ed18e0d6ef3ae498a7fdc97083e4b0ce3cec40562" OR "shxa35d0.php" OR "shxd33ce.php" OR "shx13a86.php" OR "shx5cf91.php" OR "shxf4645.php" OR "shx56367.php" OR "shrf4645.php" OR "Win64; x64) Chrome/126.0") | stats count min(_time) as first by host src dest

A hit means: Contact with, or presence of, an indicator supplied with this thread. webhook.site is a public service and the user agent is generic. The meaningful cases are a webhook.site connection originating from a server, or a shell filename [S2].

Web server account: egress, escalation and credential search · Linux auth log and EDR process events

index=* ("www-data" OR "apache" OR "nginx") (sudo OR "uname -a" OR "curl -skm" OR "--no-check-certificate" OR ".kdbx" OR "wallet.dat" OR "keystore.json" OR "bitwarden" OR "1password" OR ".electrum" OR ".bitcoin" OR ".monero" OR ".ethereum" OR "base64 -d") | stats count min(_time) as first values(process) as process by host user
FROM logs-* | WHERE user.name IN ("www-data", "apache", "nginx") AND (process.name == "sudo" OR process.command_line LIKE "*sudo*" OR process.command_line LIKE "*uname -a*" OR process.command_line LIKE "*curl -skm*" OR process.command_line LIKE "*--no-check-certificate*" OR process.command_line LIKE "*.kdbx*" OR process.command_line LIKE "*wallet.dat*" OR process.command_line LIKE "*keystore.json*" OR process.command_line LIKE "*bitwarden*" OR process.command_line LIKE "*1password*" OR process.command_line LIKE "*.electrum*" OR process.command_line LIKE "*.bitcoin*" OR process.command_line LIKE "*.monero*" OR process.command_line LIKE "*.ethereum*" OR process.command_line LIKE "*base64 -d*") | STATS count = COUNT(*), first = MIN(@timestamp), process = VALUES(process.command_line) BY host.name, user.name

A hit means: The web server account beaconed out, tried sudo, or searched for vaults and wallets, matching the reported post-exploitation steps. Treat the host as compromised and its secrets as exposed [S1][S2].

Verify

Scope

Affected

Only if

Not affected if

Fixed in: richdocumentscode 26.4.303 [S1]

Enumerate

Contain

Eradicate

Recover

Re-enter the loop when

Debrief

Detection coverage — checked automatically

CategorySourceStatus
VendorImpacted vendor / CERT advisorypublished — primary source among the thread's sources: https://github.com/CollaboraOnline/richdocumentscode/issues/354
GovernmentCISA KEV · CVE-2026-110447published — listed 2026-10-23, federal due 2026-10-26
ReferenceNVD · CVE-2026-110447published — published 2026-10-14, CVSS 4.0 9.2
VM scannersQualys · CVE-2026-110447nothing found — no ThreatPROTECT or Security Blog post names it; the QID knowledge base needs a login
VM scannersRapid7 · CVE-2026-110447published — InsightVM coverage stated
VM scannersTenable · CVE-2026-110447nothing found — no plugin names the CVE yet
EDR / endpoint VMCrowdStrike blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMMicrosoft Security blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMSentinelOne blognothing found — no post names it among the feed's 10 newest items
EDR / endpoint VMSentinelOne Labsnothing found — no post names it among the feed's 10 newest items
WAF / edgeAkamai blognothing found — no post names it among the feed's 1183 newest items
WAF / edgeCloudflare WAF managed-ruleset changelognothing found — no post names it among the feed's 139 newest items
Cloud / containerWiz blognothing found — no post names it among the feed's 717 newest items
Linux distro errataDebian tracker · CVE-2026-110447published — tracker entry
Linux distro errataRed Hat · CVE-2026-110447nothing found — no Red Hat entry
IDS / researchCisco Talos blognothing found — no post names it among the feed's 15 newest items
IDS / researchEmerging Threats open · CVE-2026-110447nothing found — no open rule names it (exploit, web_server, web_specific_apps sets)
Detection contentElastic detection rulesnothing found — no rule file names CVE-2026-110447
Detection contentElastic Security Labsnothing found — no post names it among the feed's 102 newest items
Detection contentSigmaHQ rulesnothing found — no rule file names CVE-2026-110447
Detection contentSplunk ESCUnothing found — no rule file names CVE-2026-110447
CommunityNuclei template · CVE-2026-110447published — template in nuclei-templates (main)
MSSP / IR firmsArctic Wolf blognothing found — no post names it among the feed's 10 newest items
MSSP / IR firmsHuntress blognothing found — no post names it among the feed's 754 newest items
MSSP / IR firmsRapid7 blognothing found — no post names it among the feed's 20 newest items
MSSP / IR firmsSophos threat researchnothing found — no post names it among the feed's 15 newest items
ResearchUnit 42nothing found — no post names it among the feed's 15 newest items

Checked automatically 2026-11-10 05:36Z from public sources: 6 published, 21 nothing found, 0 not machine-checkable, 0 failed. "Nothing found" means the public source answered and had nothing, as of that moment; a feed covers only its newest posts. Re-checked daily.

What a person would still look up (5)
VM scannersLook up whether your scanner has a check for CVE-2026-110447 that reads the richdocumentscode app version, not only the Nextcloud core version.
EDR / endpointCheck whether rules fire on sh, base64, curl or wget spawned by PHP-FPM or the web server process on Linux.
WAF / edgeCheck whether a managed or custom rule blocks $(, ${IFS} or %2e%2e in the path of /apps/richdocumentscode/proxy.php.
File integrity monitoringCheck whether new PHP files under Nextcloud app directories raise alerts.
Detection contentSearch your SIEM, Sigma and vendor content repositories for rules naming CVE-2026-110447 or richdocumentscode.

Exposure queries — generated automatically

Where each CVE comes from: CVE-2026-110447 — Nextcloud Collabora Built-in CODE app (richdocumentscode) RCE exploited to plant PHP web shells. A product row answers "is the software from that story reachable from the internet", not "is this card about that software".

shodan · cve · CVE-2026-110447

vuln:CVE-2026-110447

open · Shodan tags a service with a CVE from its banner version; a paid-tier filter. Exact for this CVE, blind to a host Shodan has not fingerprinted.

0match this spelling on Shodan · 2026-11-10 — Shodan has tagged no banner with this CVE yet; its tagging follows its own version fingerprinting, not the advisory▬ 0 on 2026-10-31 (+0) · 0 on 2026-11-09 (+0)

shodan · cpe · collabora:collabora_online_-_built-in_code_server

cpe:"cpe:/a:collabora:collabora_online_-_built-in_code_server"

open · Every Collabora Online - Built-in Code Server service Shodan fingerprinted, any version (CPE 2.2 form of cpe:2.3:a:collabora:collabora_online_-_built-in_code_server). Affected per NVD: < 26.4.303.

0match this spelling on Shodan · 2026-11-10▬ 0 on 2026-10-31 (+0) · 0 on 2026-11-09 (+0)

shodan · product · collabora:collabora_online_-_built-in_code_server

product:"Collabora Online - Built-in Code Server"

open · Banner product name, NVD's spelling; adjust if Shodan's differs. Affected per NVD: < 26.4.303.

0match this spelling on Shodan · 2026-11-10 — a text search for "Collabora Online - Built-in Code" matches nothing on Shodan▬ 0 on 2026-10-31 (+0) · 0 on 2026-11-09 (+0)

censys · product · collabora:collabora_online_-_built-in_code_server

host.services: (software.product = "Collabora Online - Built-in Code Server")

Censys Platform host search, software as fingerprinted at layer 7. Affected per NVD: < 26.4.303.

shodan · alias · collabora:collabora_online_-_built-in_code_server

http.title:"Collabora Online"

open · Banner spelling suggested by the model from the card text (Collabora Online page title shown by the CODE server); counted against Shodan before it was shown.

16services internet-wide on Shodan · 2026-11-10▲ 15 on 2026-11-02 (+1 +7%) · 16 on 2026-11-09 (+0 +0%)

shodan · alias · card

http.html:"Built-in CODE Server"

open · Banner spelling suggested by the model from the card text (app name text on Nextcloud admin settings pages); counted against Shodan before it was shown.

1services internet-wide on Shodan · 2026-11-10▬ 1 on 2026-11-02 (+0 +0%) · 1 on 2026-11-09 (+0 +0%)

Internet-wide count, trend

QueryFirstLatestChange
vuln:CVE-2026-1104470 2026-10-310 2026-11-10+0 over 11 days
product:"Collabora Online - Built-in Code Server"0 2026-10-310 2026-11-10+0 over 11 days
cpe:"cpe:/a:collabora:collabora_online_-_built-in_code_server"0 2026-10-310 2026-11-10+0 over 11 days
http.title:"Collabora Online"15 2026-11-0216 2026-11-10+1 (+7%) over 9 days
http.html:"Built-in CODE Server"1 2026-11-021 2026-11-10+0 (+0%) over 9 days

Shodan's count of matching services on the whole internet, one point a day; the scope (your ranges) is never part of it. A count moves with Shodan's crawl as much as with patching, so read the direction, not the digit.

Banner spellings: a model read 5 from the NVD names and this card's text (former and marketing names, console titles); 2 matched something on Shodan and are shown above, the rest were dropped.

Scope every query in your own tool, never in a shared document: Shodan `net:<your_ranges>`, `org:"<your_org>"` or `hostname:<your_domain>` (or a Shodan Monitor network alert, which applies the scope for you); Censys `host.ip: <your_ranges>` or `host.dns.names: <your_domain>`. Then compare the banner version with the affected range. Generated automatically 2026-11-10 05:36Z from the CVE ids and NVD's CPE configurations, each Shodan query counted against Shodan itself; re-built daily with the coverage check.

Open questions

Sources

Public OSINT only. AI-generated by the pipeline; structure follows the DAIR model from Dynamic Incident Response (Joshua Wright). Published automatically; a dismissed draft unpublishes it.

One mail per new card, after you confirm by link; an unsubscribe link in every mail. The address is used for nothing else.