Skip to content

Response, New York. Noah Park: Check Point Patches Actively Exploited Management Server Path Traversal. Detection, Dallas. Ava Okello: Report Finds Nearly Half of Deployed Detections Need Attention Before SOCs Can Trust Them.

SOCtember

Always First. Fast SOC News.

VulnCheck diagram titled Exploit Chain: Gotenberg to cache_base, showing five steps: the attacker at 210[.]170[.]22[.]208 in Japan sends a malicious request to Gotenberg's /forms/pdfengines/metadata/write endpoint with injected ExifTool arguments, runs a command on the host, reads the command output back through the PDF Subject metadata field, downloads cache_base from one of three mirrors on GitHub, a self-hosted Gitea server and a dynamic DNS host, and opens a reverse shell to the operator's command-and-control servers.
Diagram: VulnCheck, "Cache Me If You Can: Unpacking a Go Implant and Its Toolkit," Oct. 26, 2026 (fair use). The four-request chain VulnCheck's canary recorded, ending in a reverse shell.

Detection

VulnCheck Says a Gotenberg PDF Flaw Missing From CISA's Exploited List Has Drawn at Least Seven Attack Clusters, and One Canary Hit Led to a Go Backdoor Toolkit Built Over Seven Months

A residential Japanese address used CVE-2026-42589 to plant cache_base, a Go reverse shell with no persistence of its own, and fell back on Node.js in case wget and curl were missing. The GitHub mirror behind it held webshells, WordPress and Joomla backdoor plugins, Windows privilege escalation tools and a watchdog.

Ava Okello, DetectionLondon6 min read

LONDON - The attacker sent a PDF and a few lines of metadata. Hidden in one metadata key were line breaks and an instruction that turned a document conversion service into a remote command line. Then the server was told to fetch a backdoor from three independent mirrors.

VulnCheck said on Monday that one of its canary systems caught a residential Japanese address, 210[.]170[.]22[.]208, exploiting CVE-2026-42589 in Gotenberg in early October to deploy a custom Go reverse shell called cache_base. The activity lasted a couple of days and produced only 38 canary events, but it gave VulnCheck the full exploit chain. Jacob Baines, the VulnCheck researcher who wrote the analysis, followed one of the download mirrors to a GitHub repository with seven months of development history and a much larger toolkit.

Gotenberg is an open-source, Docker-based API that turns HTML, web pages and Office files into PDFs, often for invoices and reports. The project says it has more than 97 million Docker pulls. CVE-2026-42589 lets an attacker inject ExifTool arguments through unsanitized metadata keys sent to the /forms/pdfengines/metadata/write endpoint; by inserting newlines into a JSON key, the attacker adds ExifTool's -if option and runs arbitrary Perl. The flaw is rated 9.8 and was fixed in Gotenberg 8.31.0.

Seven clusters, no CISA listing

Over the 30 days VulnCheck analyzed, its canaries recorded 1,358 exploitation events from 128 unique source addresses, 1,127 of them from Great Britain and 224 from Israel. VulnCheck added the flaw to its own exploited-vulnerability catalog on June 26, 2026. It is not in CISA's Known Exploited Vulnerabilities catalog.

VulnCheck chart titled CVE-2026-42589 Exploitation Timeline, showing at least seven distinct clusters between June and October 2026 totaling 1,358 events from 128 unique source IPs: a Telecom Italia cluster from June 23 to August 4, a Contabo scanner from October 19 to 24 with 364 events, XMRig cryptomining, Python reverse shells, S3-hosted payloads, Polish cryptomining, the cache_base activity from October 7 to 9 with 38 events, and other activity.
Chart: VulnCheck, "Cache Me If You Can," Oct. 26, 2026 (fair use).Exploitation clusters VulnCheck's canaries recorded from June to October.

VulnCheck sorted the traffic into at least seven clusters. The largest came from a single Contabo-hosted address in France, 5[.]189[.]138[.]115, which generated 364 events between October 19 and 24 using python-requests and a Cloudflare Pages redirect, more than a quarter of everything observed. More than 20 rotating Telecom Italia addresses probed from late June into early August and then downloaded x86 and ARM payloads, the earliest exploitation in the data. On August 31 an address at HostPapa/ColoCrossing produced 13 events consistent with a campaign The Hunter's Ledger reported, which reportedly installed XMRig under the name polkitd on about 200 Gotenberg instances. Others injected Python reverse shells, pulled a payload disguised as a JPEG from an S3 bucket or dropped a pool miner.

What cache_base does, and what it does not

The Japanese activity followed four steps. The attacker ran id and wrote the result to /tmp/nx_cmd.txt, read that file back through ExifTool's -Subject<= operator so the output arrived in the returned PDF's Subject field, tried to download cache_base, and finally listed the directory to see whether the file had landed. The downloads were attempted with wget from GitHub, with curl from a self-hosted Gitea server and with a one-line Node.js fetch from a dynamic DNS host. Gotenberg runs on Node.js, VulnCheck notes, so the runtime is there even in stripped-down containers without wget or curl.

cache_base is a 5.2 MB statically linked, stripped Go binary for 64-bit Linux, built with Go 1.22.2. It creates a lock file, ./.cached_db.lock, to keep a single copy running, asks ipinfo.io for the victim's public address and location, registers with its command server and pipes a /bin/sh session over the connection. It sets PYTHONUNBUFFERED=1, which suggests the operator expects to run Python through the shell. Its two hardcoded command servers are ubuntu-repo[.]strangled[.]net on port 8090 and linux-x86-tcpudp[.]strangled[.]net on port 21, both on afraid.org's free dynamic DNS, and it uses Go's default Go-http-client/2.0 user agent. It has no persistence of its own: no systemd units, cron changes, SSH keys or startup scripts.

VulnCheck diagram titled CVE-2026-42589 Infrastructure Overview, showing the exploitation source at 210[.]170[.]22[.]208 in Japan, three payload mirrors (the GitHub repository secmonjp/alxpng, a Gitea server on Alibaba Cloud in Beijing and cheeva[.]strangled[.]net on Oracle Cloud in Tokyo), two binary variants, cache_base and cache_cn, that share the same codebase, and their separate command-and-control servers.
Diagram: VulnCheck, "Cache Me If You Can," Oct. 26, 2026 (fair use).Three mirrors, two builds of the same reverse shell and their command servers.

The second mirror, a Gitea server at 39[.]105[.]65[.]32 on Alibaba Cloud in Beijing, was set up with a throwaway email address; its repository was created on September 27, about 10 days before the canary hits. It also held cache_cn, a separate build with an identical function table that connects to 5[.]161[.]100[.]63 on port 21, a Hetzner Cloud server in Ashburn, Virginia. The third mirror, cheeva[.]strangled[.]net, resolved to an Oracle Cloud instance in Tokyo, 132[.]145[.]123[.]143, that served the binary on port 80 and appears to have also listened for connections on port 7070.

A toolkit built over seven months

The GitHub mirror, secmonjp/alxpng, belongs to an account created on January 7, 2026, and held 188 commits at the time of VulnCheck's analysis. Inside were builds of the reverse shell for Linux on x86-64, ARM64 and MIPS32 and for Windows, where ufw.exe is the same shell; a second Go family, log_, with HTTP, SSH, TCP and UDP workers; a downloader called pull; and a watchdog called temp that checks for .cached_db.lock and restarts the agent if it is not running. The Windows set includes JuicyPotatoNG, renamed kitanai.exe, and RegPwn, renamed nandemo.exe, plus a batch loop, upd-ms.bat, and legitimate Tailscale binaries that could serve as another remote access path.

VulnCheck diagram titled The cache_base Toolkit, showing the secmonjp/alxpng GitHub repository at the center with five groups of files: the cache_ Go reverse shell family, the log_ multi-protocol Go tool family, deployment tools pull and temp, Windows tooling including kitanai.exe, nandemo.exe, ufw.exe and Tailscale binaries, PHP webshells, and CMS backdoor plugins for WordPress and Joomla.
Diagram: VulnCheck, "Cache Me If You Can," Oct. 26, 2026 (fair use).What the repository behind one payload mirror contained.

For web servers there were three PHP webshells, two of them obfuscated and originally named wp-common.php and wp-blocks.php to resemble WordPress core files. A WordPress plugin archive, akismetv4-plugin.zip, carries a one-line Bash reverse shell to cheeva[.]strangled[.]net on port 7070, and two Joomla packages, Hlx.zip and template.zip, write a PHP webshell during installation. The history shows steady work: the repository was created in March, VPN configuration files for Japan, Korea and Vietnam came and went by June 23, a phishing page and Python tools arrived in June, Windows tooling in July, five uploads of pull on August 13, ARM64 builds in September, and on October 1 the author deleted scripts and source while keeping compiled payloads.

VulnCheck is careful about the limits. The shared codebase does not identify the operator, and it cannot show that every component was used in the intrusion it observed.

What SOC teams can do now

  • Find every Gotenberg instance, including ones bundled inside document and reporting products, and upgrade to 8.31.0 or later. Do not wait for a CISA KEV listing to move it up the queue.
  • Hunt web and API logs for POST requests to /forms/pdfengines/metadata/write whose metadata keys contain newlines or -if, and for responses carrying command output in the PDF Subject field.
  • On Gotenberg hosts and containers, look for /tmp/nx_cmd.txt, a hidden .cached_db.lock file, unexpected binaries named cache_base or cache_cn, node processes making outbound fetch calls, and lookups to ipinfo.io.
  • Block and search for ubuntu-repo[.]strangled[.]net:8090, linux-x86-tcpudp[.]strangled[.]net:21, cheeva[.]strangled[.]net (ports 80 and 7070), 39[.]105[.]65[.]32:3000, 5[.]161[.]100[.]63:21 and 132[.]145[.]123[.]143, and treat any outbound connection to strangled[.]net from a server as worth a look.
  • On WordPress and Joomla sites served from the same estates, check for an akismetv4 plugin, files named wp-common.php or wp-blocks.php outside core, and Joomla extensions named Hlx or template. VulnCheck's report includes file hashes and a YARA rule for the cache_base family.

Sources:


Ava Okello covers detection engineering, EDR telemetry, and SOC hunting for SOCtember from London.

Related stories

Detection desk