Read the docs
TI-2023-30850 Aliases GHSA-hfxh-rjv7-2369

Uptime Kuma Authenticated remote code execution via TailscalePing

Priority LOW 38Published · Updated

Key facts

Attack vector
—
Privileges required
—
User interaction
—
Attack complexity
—
Impact type
—
Confidentiality · integrity · availability
—
Fix status
Fixed

No CVSS vector from any source. Fix status from GitHub.

Summary

### Summary The `runTailscalePing` method of the `TailscalePing` class injects the `hostname` parameter inside a shell command, leading to a command injection and the possibility to run arbitrary commands on the server. ### Details When adding a new monitor on Uptime Kuma, we can select the "Tailscale Ping" type. Then we can add a hostname and insert a command injection payload into it. The front-end application requires that the field follow a specific pattern, this validation only happens on the front-end and can be removed by removing the attribute `pattern` on the `input` element. https://github.com/louislam/uptime-kuma/blob/dc4242019331e65a79ac16deef97510144e01b12/server/monitor-types/tailscale-ping.js#L40-L46 We can finally add the new monitor and observe that our command is being executed. **NOTE:** When using Uptime Kuma inside a container, the "TailScale Ping" type is not visible. We can fake this information by intercepting WebSocket messages and set the `isContainer` option to `false`. ### PoC * Authenticate. * Create a new monitor. * Select the TailScale Ping type (if not visible, see the note in the details section). * Insert the command injection payload inside the `hostname` field. (for example `$(id >&2)`) * Remove the `pattern` requirement on the field. * Save and start the monitor. ### Impact An authenticated user can execute arbitrary command on the server running Uptime Kuma. ### Remediation There are other command execution in the codebase, they use a method `spawn` from the `child_process` module which does not interpret the command as a shell command, the same thing should be done here. **NOTE:** The Tailscale CLI seems to support the `--` sequence. It should be used between the `ping` subcommand and the `hostname` argument to avoid argument injection.

Why it matters now

Fix Fixed uptime-kuma (npm): 1.23.7

SSVC decision points

Not available: CISA has not published SSVC decision points for this record.

Affected products

VendorProductAffected versionsFixed inStatusSource
—uptime-kuma (npm)1.23.0 to before 1.23.71.23.7Patch availableGHSA-hfxh-rjv7-2369
  • uptime-kuma (npm) Vendor— Affected 1.23.0 to before 1.23.7 Fixed in 1.23.7 Patch available GHSA-hfxh-rjv7-2369

Remediation

  • Fix · GHSA-hfxh-rjv7-2369 uptime-kuma (npm) Fixed in 1.23.7 Advisory →

Timeline

  1. 2026-10-03 Threatist record created from GHSA-hfxh-rjv7-2369

References

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences