Abstrakte technische Illustration auf einem blass warmgrauen Feld: Ein hohes, gebrochen weißes Einstellungsfeld mit schwach angedeuteten linierten Zeilen befindet sich links von der Mitte, und sein unterstes Feld enthält zwei kleine, ineinander verschachtelte cyanfarbene Winkelklammerzeichen, eines im anderen. Eine dünne cyanfarbene Linie verläuft vom Feld zu einem flachen schiefergrauen Serverblock rechts; eine zweite bernsteinfarbene Linie tritt aus den verschachtelten Zeichen aus, verläuft über den Rand des Feldes hinweg und erreicht denselben Block, und ein kleines bernsteinfarbenes Quadrat markiert die Abzweigung, an der sich die beiden Wege trennen. Ein zweiter, gedämpfterer Serverblock befindet sich hinter dem ersten. Das Kunstwerk ist flache Vektorgeometrie mit weichen Schatten und großzügigen Rändern; es erscheinen keine Texte, Buchstaben, Zahlen, Personen oder Organisationslogos. Das OrcaRouter-Logo ist in der unteren rechten Ecke eines weißen Streifens unterhalb des Kunstwerks eingefügt.
AI Safety Incidents

RCE im KI-Agenten von Zammad: ein verschachteltes Template-Tag, eine Korrektur mit einem Buchstaben

Autor

Alistair Wren

Veröffentlicht am

Neueste Modelle · 20Alle Modelle ansehen →
Benchmarks: Artificial Analysis · täglich aktualisiert
Zurück zu allen Beiträgen

Zammad, der Open-Source-Helpdesk, veröffentlichte am 4. August 2026 Version 7.1.2 mit achtzehn Sicherheitskorrekturen; die erste aufgeführte schließt eine Schwachstelle für Remotecodeausführung in den Konfigurationsfeldern seiner KI-Agenten-Funktion. Die Schwachstelle ist CVE-2026-84462, offengelegt in der GitHub-Sicherheitsempfehlung GHSA-gp3x-9xm8-rcj6 am selben Tag, und ihr betroffener Bereich umfasst alle selbst gehosteten Installationen mit einer Version bis einschließlich 7.1.1. Ein Administrator, der einen KI-Agenten erstellen oder bearbeiten kann, könnte speziell präparierten Text in eines der Felder des Agenten eingeben, den Filter umgehen, der ihn neutralisieren soll, und beliebige Befehle auf dem Server ausführen, auf dem Zammad gehostet wird – mit dem Potenzial, laut Formulierung der Empfehlung, „alle auf diesem Server gespeicherten Daten zu lesen, zu verändern oder zu zerstören“. Kein anderer Benutzer muss handeln: In der Empfehlung heißt es, dass „der bösartige Code automatisch ausgeführt wird, wenn der betroffene KI-Agent das nächste Mal ein Ticket verarbeitet“. GitHub stuft sie als High mit 8,6 nach CVSS 4.0 ein. Der Datensatz, seine Schweregrad- und Schadens-Tags sowie die Einträge, die rund um ihn erfasst wurden, sind im Orca AI Incident Archive aufbewahrt, das diesen Vorfall zusammen mit dem Rest der Serie aufführt.

Was der Hinweis feststellt

Der am 4. August 2026 veröffentlichte GitHub-Sicherheitshinweis ist kurz und ungewöhnlich konkret hinsichtlich des Mechanismus und der Voraussetzungen. Er beschreibt einen „Sicherheitsfilter, der die Konfiguration des AI Agent von Zammad schützt“, der „umgangen werden kann, indem man in eines der Felder eines AI Agent speziell gestalteten Text eingibt“, und er benennt den Akteur genau: „Ein Administrator mit der Berechtigung, AI Agents zu erstellen oder zu bearbeiten, könnte dies ausnutzen, um beliebige Befehle auf dem Server auszuführen, auf dem Zammad gehostet wird.“ Der betroffene Bereich wird als bis einschließlich 7.1.1 angegeben, die gepatchte Version als 7.1.2. Als Melder wird colinthebomb1 genannt; das veröffentlichende Konto ist fliebe92. Der Hinweis enthält weder einen Proof of Concept noch Einzelheiten zur Ausnutzung.

GitHub bewertet die Schwachstelle als High, 8,6 auf CVSS 4.0, mit dem Vektor AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H und ohne Änderung des Scope. Ausgeschrieben bedeutet das: Die Schwachstelle ist über das Netzwerk bei geringer Komplexität erreichbar, ohne Angriffsvoraussetzungen und ohne Benutzerinteraktion, durch einen Angreifer, der bereits hohe Berechtigungen innerhalb der Anwendung besitzt, mit hoher Auswirkung auf die Vertraulichkeit, Integrität und Verfügbarkeit der Zammad-Instanz selbst. Die Sicherheitsmeldung führt drei Schwachstellen auf: CWE-20, unzureichende Eingabevalidierung; CWE-94, Codeinjektion; und CWE-1336, die Klasse der Template-Engine-Schwachstellen, die MITRE dahingehend definiert, dass spezielle Syntax nicht neutralisiert wird, „die bei Verarbeitung durch die Engine als Template-Ausdrücke oder andere Code-Direktiven interpretiert werden kann“.

Die Korrektur änderte einen Buchstaben.

Der öffentliche Fix ist Commit e3b0c8df91ad2108c8305be23e8fe6f73fb9718d, eingereicht mit der Nachricht „Maintenance: Improve ERB sanitizer.“ GitHub verzeichnet ein Autorendatum vom 7. Juli 2026 und ein Commit-Datum vom 3. August 2026, einen Tag vor dem Sicherheitshinweis und der Veröffentlichung. Er ändert zwei Dateien: eine Zeile in lib/erb_sanitizer.rb und vierzehn hinzugefügte Zeilen in der Spezifikation.

Die eine Zeile ist die gesamte Korrektur. Die Methode escape_tag verwendete Rubys sub, das das erste Vorkommen eines Musters in einer Zeichenkette ersetzt; jetzt verwendet sie gsub, das jedes Vorkommen ersetzt. In beiden Versionen ist die Ersetzung dieselbe: Ein als <% geschriebener Opener wird zu <%%, die verdoppelte Form, die ERB, Rubys Template-Engine, als Literaltext rendert, anstatt sie auszuwerten. Der Sicherheitshinweis nennt nicht, welches AI Agent-Feld das Template enthält; der Commit identifiziert den Filter, der dieses Template inert machen sollte.

A dark HTML card titled 'One line, one letter', kicker 'Zammad fix commit e3b0c8f', subtitle 'lib/erb_sanitizer.rb, method escape_tag, authored 7 July 2026 and committed 3 August 2026 - one day before disclosure'. Two code panels: BEFORE, in amber, shows a red minus beside tag.sub with the opener arguments and the note 'Replaces the first opener only'; AFTER, in cyan, shows a green plus beside tag.gsub and the note 'Replaces every opener'. A second panel headed 'WHY ONE LETTER MATTERED' shows the payload, a literal opener followed by an evaluating tag, arrowed to the same string with the first opener doubled, and explains that the inner tag is never touched. A third row headed 'REGRESSION SPEC, SAME COMMIT' shows the two nested payloads the added tests cover, with the note 'Both must render as literal text, not evaluate'. A footer names commit e3b0c8df91ad2108c8305be23e8fe6f73fb9718d and says the card was rendered by OrcaRouter with no vendor logos. The OrcaRouter logo is composited in the bottom-right corner.

Mit sub wurde nur der erste Opener in der Zeichenkette entschärft. Ein Payload, der unmittelbar nach dem ersten einen zweiten Opener setzt, überlebt den Filter: <%<%= 1 + 1 %> wird zu <%%<%= 1 + 1 %>, wobei ERB den führenden Opener als Text ausgibt und dann das innere Tag auswertet. Die im selben Commit hinzugefügte Regressionsspezifikation benennt den Trick unverblümt – „mit einem verschachtelten Opener, der in ein einzelnes Tag eingeschmuggelt wurde (Escape-all-openers-Bypass)“ – und fordert, dass sowohl <%<%= 1 + 1 %> als auch ein doppelt verschachteltes <%<%<%= 1 + 1 %> als wörtlicher Text gerendert werden müssen. Diese Spezifikation ist die klarste öffentliche Darstellung davon, wie der Filter umgangen wurde, denn das Advisory selbst liefert keine.

Die Form des Bugs ist generisch und nicht etwa eine Zammad-Kuriosität: Ein Escaper, der nach dem ersten Treffer aufhört, wird durch jede Eingabe ausgehebelt, die eine zweite, verschachtelte Kopie der Sequenz enthält, die er entfernt. Die Commit-Nachricht bezeichnet die Änderung als Wartung – so wird ein Härtungspatch für ein einzelnes Zeichen üblicherweise weitergegeben – und deshalb musste der Advisory und nicht der Diff die Warnung enthalten.

Sieben Wochen vom Advisory bis zum NVD

NVD veröffentlichte seinen Datensatz für CVE-2026-84462 am 25. September 2026, sieben Wochen nach der Advisory, und änderte ihn zuletzt am 28. September. Der Datensatz ist als „Deferred“ gekennzeichnet, was bedeutet, dass die Behörde keine eigene Analyse veröffentlicht hat, und sein Metrikblock schreibt die Bewertung 8.6 security-advisories@github.com als sekundäre Metrik zu – GitHubs Bewertung als CVE Numbering Authority, nicht eine unabhängige NVD-Einschätzung. Derselbe Datensatz enthält überhaupt keine CPE-Konfiguration, sodass er die Schwachstelle keinem versionierten Produktidentifikator zuordnet.

Beide Details sind für alle wichtig, die selbst gehostete Software über Feeds statt über Release Notes verfolgen. Der Fix war am 4. August öffentlich und umsetzbar; der maschinenlesbare Eintrag kam am 25. September; und selbst dann kam er ohne die Produktkennung, auf die CPE-basierte Scanner abgleichen. Sieben Wochen lang waren die Sicherheitsmeldung des Herstellers und seine Release Note die maßgebliche Darstellung der Schwachstelle.

A dark HTML timeline card titled 'From commit to CVE record', kicker 'Zammad 7.1.2 - CVE-2026-84462', subtitle 'Five dated points, taken from the fix commit, the GitHub advisory, the Zammad release note and the NVD API'. Five rows: 7 July 2026, fix authored in commit e3b0c8f with the message 'Maintenance: Improve ERB sanitizer'; 3 August 2026, fix committed one day before disclosure; 4 August 2026, GitHub advisory GHSA-gp3x-9xm8-rcj6 published and Zammad 7.1.2 shipped the same day with 18 security fixes; 25 September 2026, NVD publishes CVE-2026-84462 with status Deferred and no CPE configuration, 52 days after disclosure; 29 October 2026, FIRST EPSS read at 0.28 percent probability in 30 days, 20th percentile. An amber rule below reads 'The advisory and the CVE record describe the same flaw. The first was actionable on 4 August; the second arrived as a machine-readable record 52 days later.' A footer credits GitHub, Zammad, NVD and FIRST, and says the card was rendered by OrcaRouter. The OrcaRouter logo is composited in the bottom-right corner.

Was gilt als gesichert und was nicht

Gesichert ist: Der Sicherheitshinweis, die gepatchte Version, der CVSS-Wert und die Codeänderung stammen alle von Zammad und aus GitHubs Advisory-Datenbank und stimmen miteinander überein. Der NVD-Eintrag gibt die Beschreibung der Nummerierungsstelle wieder, ohne eigene Analyse hinzuzufügen. Das Archiv bewertet den Eintrag auf dieser Grundlage mit der Konfidenzstufe A, wobei der Vorfall unbestritten ist.

Nicht belegt oder nicht dokumentiert: Im Advisory gibt es keinen Proof of Concept und keine Berichte über eine Ausnutzung in freier Wildbahn. Das EPSS von FIRST gibt CVE-2026-84462 in dem am 29. Oktober 2026 veröffentlichten Score eine Wahrscheinlichkeit von 0,28 Prozent für eine Ausnutzung in den nächsten dreißig Tagen an – das 20. Perzentil. Das Archiv verzeichnet keinen realen Schaden und stuft den Eintrag als mittleren Schweregrad ein – unterhalb des eigenen High-Bereichs des Advisorys. Dabei handelt es sich um getrennte Instrumente, die unterschiedliche Fragen beantworten: was die Schwachstelle ermöglichen würde, gegenüber dem, was nachweislich geschehen ist; und dieser Beitrag berichtet über beides, statt sie miteinander in Einklang zu bringen.

Die unabhängige Bestätigung ist dürftig. Eine Suche nach Berichterstattung über diese CVE liefert Schwachstellen-Datenbanken, die den Text der Nummerierungsstelle erneut veröffentlichen, sowie Zammads eigene Release-Anmerkung; kein Nachrichtenmedium scheint die Schwachstelle unabhängig gemeldet zu haben. Das ist eine Feststellung über den Eintrag, keine Kritik an ihm: Eine Remote-Code-Execution in einem Helpdesk, die ein Administratorkonto erfordert, ist nicht die Art von Ereignis, die Presse erzeugt, und das Fehlen einer unabhängigen Darstellung ist selbst Teil dessen, was der Eintrag dokumentiert.

Wer konnte es auslösen, und was hat sich geändert?

Zammads Versionshinweis für 7.1.2 vom 4. August 2026 listet die achtzehn in dieser Version gepatchten Schwachstellen auf und führt den Vorlagen-Bypass des AI Agent an erster Stelle. Für gehostete Kunden heißt es: „Es ist keine Aktion erforderlich. Ihre Instanzen wurden bereits von unserem Team gepatcht und abgesichert.“ Für Self-Hosted-Installationen ist der Ton unmissverständlicher: „Wir raten dringend dazu, sofort auf die neueste Version von Zammad zu aktualisieren, um den Schutz Ihres Systems zu gewährleisten.“ Der Sicherheitshinweis bietet keinen Workaround, und der Eintrag enthält keine über das Upgrade hinausgehende Gegenmaßnahme.

A dark HTML card titled 'Who can pull the trigger', kicker 'CVE-2026-84462 - preconditions', subtitle 'From the GitHub advisory and the Zammad 7.1.2 release note; the score and exploitation figure are labelled separately'. Left column headed 'THE ATTACKER MUST' lists three conditions: hold administrator rights inside Zammad, specifically permission to create or edit AI Agents; reach the agent configuration over the network; supply no interaction from any other user. Right column headed 'THE PAYLOAD THEN' lists three consequences: runs on the server that hosts Zammad, not in a browser; fires the next time the agent processes a ticket; can read, modify or destroy all data on that server, according to the advisory. A statistics strip reads 8.6 CVSS 4.0 High, PR:H high privileges required, UI:N no user interaction, C:H I:H A:H all three impacts high, and 0.28 percent EPSS on 29 October 2026. Three flags below read Affected: Zammad up to and including 7.1.1; Fixed: 7.1.2, released 4 August 2026; Stated remedy: upgrade, no workaround published. A closing panel notes that the advisory publishes no proof of concept and that the regression spec in the fix commit is the clearest public description of the bypass. A footer says hosted instances were already patched and self-hosted installations must reach 7.1.2. The OrcaRouter logo is composited in the bottom-right corner.

Die Privileg-Anforderung verdient eine genauere Betrachtung, als der Vektor ihr zukommen lässt. PR:H bedeutet, dass der Angreifer signifikanten Zugriff benötigt, bevor die Schwachstelle nutzbar ist, und hier ist dieser Zugriff die Berechtigung admin.ai_agent, die laut der Dokumentation von Zammad überhaupt für die Arbeit mit AI Agents erforderlich ist. In einem Helpdesk ist das oft ein Teamleiter im Service-Team, der Kategorisierer, Tagger und Textextraktoren abstimmt – nicht unbedingt die Person, die den Server administriert. Die Formulierung des Advisories selbst, „ein Administrator mit der Berechtigung, AI Agents zu erstellen oder zu bearbeiten“, ist enger gefasst als „jeder“ und weiter gefasst als „root“. Wenn ein Upgrade nicht sofort erfolgen kann, verringert eine Einschränkung des Kreises der Personen, die diese Berechtigung besitzen, die Anzahl der Menschen, die den Codepfad erreichen können; das ist eine Schlussfolgerung aus dem Vektor und der Dokumentation, keine vom Hersteller veröffentlichte Abhilfe.

Keines der primären Dokumente bringt ein Sprachmodell in den Exploit-Pfad. Der Befehl läuft im Ruby-Prozess von Zammad, wenn die Konfiguration des Agenten gerendert wird; nichts in dem Advisory, dem Commit oder der Release Note beschreibt, dass das Modell die Payload erzeugt. Die Funktion „AI Agent“ liefert das vom Administrator beschreibbare, template-verarbeitete Feld, und die KI ist die Oberfläche, nicht der Mechanismus. Das ist das Muster, auf das der Datensatz verweist: Die Agentendefinition – ihre Anweisungen, Templates und Filter – ist ausführbare Konfiguration, bearbeitet von Personen, deren Aufgabe Supportarbeit und nicht Sicherheitsprüfung ist.

Zammads Gegenmittel ist verhältnismäßig und unspektakulär: eine Methodenänderung, zwei Regressionstests und eine Versionsanhebung, die zusammen mit dieser Lücke siebzehn weitere schließt. Der Teil, der es wert ist, weitergetragen zu werden, ist das Expositionsmodell. Ein Helpdesk, das es einer Support-Leitung erlaubt, einen Agenten zu definieren, erlaubt dieser Support-Leitung auch, etwas zu schreiben, das der Server ausführen wird, und das Einzige, was zwischen beidem steht, ist ein Filter, der bei jeder verschachtelten Kopie der Syntax, die er entfernt, richtig liegen muss.