Hoppscotch: Admin-RCE über MAILER_SMTP_URL zu nodemailer-sendmail-Injection

Eine unzureichend validierte MAILER_SMTP_URL aktiviert in Hoppscotch den nodemailer-SendmailTransport und übergibt angreiferkontrollierte Argumente an child_process.spawn, was beliebige Befehlsausführung als root im Container erlaubt.

Advisory-ID: TP-2026-031
Produkt: Hoppscotch (Open-Source-API-Development-Plattform, self-hosted)
Schwachstellentyp: OS-Command-Injection über Options-Merge zu Root-RCE (CWE-78)
CVE: CVE-2026-59721
CVSS 3.1: 7.2 (Hoch) · CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
Betroffene Versionen: <= 2026.5.0 (self-hosted hoppscotch-backend Docker-Image)
Behoben in: 2026.6.0
Hersteller-Advisory: GHSA-v7q6-r45w-2c6r
Gemeldet: 22. Mai 2026

Zusammenfassung

Hoppscotch ist eine weit verbreitete Open-Source-Plattform für API-Entwicklung. Die GraphQL-Mutation updateInfraConfigs akzeptiert einen angreiferkontrollierten MAILER_SMTP_URL-Wert ohne ausreichende Validierung. Wenn nodemailer diese URL parst, werden die Query-Parameter in die Transport-Optionen gemergt, sodass sendmail=true den SendmailTransport aktiviert. Dieser übergibt angreiferkontrollierte path- und args-Werte direkt an child_process.spawn(), wodurch beliebige Befehle als root im Container ausgeführt werden. turingpoint hat den vollständigen Ablauf verifiziert und gemeldet; der Hersteller hat ihn in 2026.6.0 behoben.

Ursache

Der Validator validateSMTPUrl nutzt für den Hostnamen die Zeichenklasse [^:]+, die Query-String-Zeichen im Hostnamen-Feld zulässt. MAILER_SMTP_URL steht zudem nicht auf der EXCLUDE_FROM_UPDATE_CONFIGS-Blockliste, ist also über die Admin-Mutation überschreibbar. nodemailers parseConnectionUrl mergt anschließend alle Query-Parameter in das Options-Objekt (CWE-915), und der SendmailTransport reicht diese Optionen unsanitisiert an child_process.spawn() weiter. Ein sendmail=true&path=%2Fbin%2Fsh&args=-c&args=<befehl> in der URL wird so zu einem Root-Prozess-Aufruf.

Proof of Concept

# 1. Admin sendet eine GraphQL-Mutation mit bösartiger MAILER_SMTP_URL:

    mutation {
      updateInfraConfigs(infraConfigs: [{
        name: MAILER_SMTP_URL,
        value: "smtp://x?sendmail=true&path=%2Fbin%2Fsh&args=-c&args=<befehl>"
      }]) { name }
    }

# 2. Der Container startet über stopApp() neu und reinitialisiert den Mailer
#    mit der injizierten URL.

# 3. Ausgehende Mail über anonymen Signin auslösen:

    POST /v1/auth/signin?origin=app
    {"email":"[email protected]","origin":"app"}

# 4. Der sendmail-Kindprozess führt den Angreifer-Befehl als uid=0(root) aus.

Auswirkung

  • Beliebige Befehlsausführung als root im Container.
  • Zugriff auf DATABASE_URL (PostgreSQL-Superuser-Zugangsdaten).
  • Zugriff auf DATA_ENCRYPTION_KEY und damit Entschlüsselung gespeicherter Secrets.
  • Zugriff auf alle gespeicherten Umgebungsvariablen über Benutzer und Teams hinweg.
  • Lateraler Zugriff auf Sidecar-Container im Docker-Netzwerk.
  • Voraussetzung ist lediglich ein Admin-Konto plus die Möglichkeit zum anonymen Signin.

Referenzen

Steckt so etwas in Ihrer Software?

Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.