Dieser Vortrag wurde zum 39C3 eingereicht und abgelehnt. Ich fand heraus, dass ein auf Ascii Smuggler basierender Angriff die Filterregeln für Posts in Mastodon außer Kraft setzt. Damit sind diese Filter derzeit für den Schutz vor Spam und anderem unerwünschten Inhalt quasi nutzlos geworden.
Die Präsentation zu dem Vortrag, den ich dazu eigentlich halten wollte ist hier zu finden.
Keine Reaktion.
Am 14.9.2025 sendete ich eine weitere EMail an dieselbe Adresse mit einem Hinweis auf meine erste und der Information, dass ich vorhabe, diese Findings am Ende des Jahres auf einer Konferenz zu präsentieren und im Web zu veröffentlichen.
Reaktion: "Wir schauen es uns an"
Seither - keine weitere Interaktion
Daher bin ich der Meinung, dass ich die Informationen jetzt freigeben kann - es sind immerhin mehr als nur die gewöhnlichen drei Wochen vergangen...
Ich denke aber, dass dieser Mechanismus nicht nur Mastodon oder das sogenannte Fediverse betrifft und möchte einen eindringlichen Appell an alle richten, jeden textuellen Input mit größter Vorsicht zu bearbeiten und per default alles auszufiltern, was nicht der Unicode BMP angehört.
Das, was ich als Features von Unicode bezeichne sind Dinge, die meiner Ansicht nach in Zeichenkodierungen nichts verloren haben, sondern in Markup-Systeme gehören. Zeichenkodierungen und Markup sind zwei verschiedene Dinge und sollten nicht vermischt werden. Geschieht dies dennoch (und sind sich Anwendungsentwickler dessen nicht bewusst), erhöht das die Angriffsoberfläche gewaltig. Ich werde kurz auf diverse solche Features eingehen und dazu nochmals Trojan Source- und Ascii Smuggler-Angriffe vorstellen.
Ich werde zeigen, wie man die Technik aus Ascii-Smuggler benutzen kann, um Text zu verstecken: Damit ist es derzeit noch möglich, Textfilter ins Leere laufen zu lassen - sei es zum Verbergen von Posts bei der Prüfung der politischen Gesinnung vor der Einreise oder einfach nur beim Filtern unerwünschter Posts in sozialen Medien.
Und dann gibt es noch LLMs - der ursprüngliche Ascii Smuggler-Angriff beruhte darauf, dass die Language-Tags, die das gesamte Ascii-Alphabet abbilden als Teil des Textes aufgefasst wurden und man somit Prompt Injection-Angriffe durchführen konnte: Es wurden nicht alle Language-Tags ausgefiltert, sondern nur die Start- und Ende-Marker entfernt und der dazwischen eingebettete Text wurde zum Inhalt des Dokuments als es das LLM als Prompt interpretierte. Das ist natürlich die mit Abstand bescheuertste Idee, mit Language-Tags umzugehen - wie bereits gesagt: der Standard sagt, dass solche Zeichen unterdrückt werden sollen - nicht dass man alles Mögliche und Unmögliche versucht, sie doch noch irgendwie als Text zu interpretieren!
Aber das brachte mich dazu, mich zunächst darüber zu informieren, wo diese Probleme eventuell noch lauern könnten:
Als nächstes prüfte ich verschiedene Anwendungen. Dabei ging es zunächst darum, ob sich die enthaltenen Language Tags störend bei der Darstellung der Texte auswirken würden. Anschließend testete ich dann, ob die enthaltenen Tags eventuell die Verarbeitung der Texte stören würden. Hier die Ergebnisse:
Die sQLshell zeigt Pseudozeichen an, wenn Language Tags enthalten sind - so sieht der (aufmerksame) Anwender, dass im Text Codepoints enthalten sind, die da eigentlkich nicht hingehören. Dies trifft sowohl auf Text im SQL-Editor zu, wie auch auf solchen im Script-Editor (Java bzw. BeanShell) und auch bei der Darstellung von Abfrageergebnissen. Versucht man entsprechende SQL-Statements zur Ausführung an die Datenbank zu senden, bemerkt das die sQLshell und verhindert das Absenden mit einer Fehlermeldung. Die Editoren zeigen die entsprechenden Codepoints deutlich an, wenn die Option zur Anzeige der nicht-druckbaren Zeichen aktiviert wird, die ich ursprünglich als Gegenmaßnahme gegen Trojan Source eingebaut hatte.
SQL-Editor in der sQLshell
Abfrageergebnisse in der sQLshell
Skript-Editor in der sQLshell
Wie schon im Fall des Trojan Source-Problems schaute ich mir auch Webanwendungen an - ich benutzte dafür GitHub, GitLab und Codeberg. Es stellte sich geraus, dass alle drei Systeme sich gleich verhalten: Sie speichern die zusätzlichen Codepoints, stellen sie aber nicht dar. Daher sieht der Text in allen drei folgenden Screenshots für den Anwender vollkommen unverdächtig aus:
Kommentar mit eingebetteten Language Tags in GitLab
Issue mit eingebetteten Language Tags in GitHub
Kommentar mit eingebetteten Language Tags in Codeberg
Hier werden jetzt noch einige Beispiele anderer Anwendungen und ihres Verhaltens und Reaktion auf Text mit eingebetteten Language Tags präsentiert:
In NeoVim in einem XTerm sieht der aufmerksame Anwender Pseudozeichen und ist gewarnt
Im Gnome Text Editor bemerkt der Anwender nichts davon.
In Gedit bemerkt der Anwender ebenfalls nichts davon
Ich habe vorhin diverse Webanwendungen untersucht - wie steht es aber mit ganz normalen Input-Elementen in HTML-Dokumenten? Leider muss man hier feststellen, dass auch diese Eingabeelemente die Darstellung der Language Tags komplett unterdrücken, beim Absenden aber alle Codepoints - einschließlich der Language Tags übermitteln:
Input-Elemente in HTML-Dokumenten
Der tatsächliche Inhalt...
Für mich wenig überraschend funktionierte nichts davon. Am überraschendsten ist das natürlich für Anwender von Lösungen, die die Language Tags in der Anzeige komplett unterdrücken, sie jedoch im Text belassen.
Suchen von Text ist aber ein sehr spezieller Use Case von Text Matching. Allgemeiner kann man diesen Use Case wie folgt formulieren: Finde matching Text und führe die Aktion ... auf die Fundstellen aus. Bei der suche nach Text in einem Editor / einer IDE ist die Aktion das Hervorheben der Fundstelle(n), das Zählen aller gefundenen Vorkommen und das gezielte Springen zur vorhergehenden oder nächsten Fundstelle.
Es gibt aber noch andere. An dieser Stelle angekommen fiel mir der Use Case Filterung ein: Filtere alle Beiträge, in denen der Suchbegriff vorkommt und zeige die Beiträge (nicht mehr) in der Timeline an.
Das brachte mich zu meinem Experiment mit Mastodon bzw. dem Fediverse: Ich kontaktierte eine Person und fragte sie, ob sie sich mit dem Filtern von Beiträgen auskenne. Sie richtete daraufhin sofort einen entsprechenden Filter für den Begriff ossifrage - der Screenshot hier zeigt, dass ein Beitrag unterdrückt wurde und ein Beitrag, bei dem ich einige Language Tags in dem Begriff versteckt hatte durch den Filter geschlüpft ist und trotzdem angezeigt wird:
Mastodon Filterregeln überlistet
Das zeigt - da auch hier die Language Tags gar nicht angezeigt werden, die in der Message enthalten sind - dass die Filterregeln in Mastodon / Fediverse, die dafür da sind, Anwender vor unerwünschtem Inhalt zu schützen, sehr leicht umgangen werden können.
Die Reaktion - oder besser das Fehlen jeder Reaktion - auf meine Meldung lässt mich davon ausgehen, dass dies immer noch der Fall ist und sich uin absehbarer Zukunft nicht ändern wird.
Interessanterweise existieren Anwendungen, die diese Tips bereits beherzigen: Ich habe weitere Versuche unternommen, andere Anwendungen und Protokolle damit anzugreifen und war sehr erstaunt - und zufrieden - dass EMail beispielsweise zumindest in Teilen dagegen immun zu sein scheint: Thunderbird hat alle so behandelten EMails asl Junk kategorisiert. Dadurch neugierig geworden habe ich weiter recherchiert und herausgefunden, dass das Vorhandensein dieser Codepoints schon recht lange als Zeichen für Junk-Mails benutzt wird, was man zum Beispiel beim Studium der Beispiel-Mails für Phishing der TU München erkennen kann.
Derangement - theoretische Betrachtungen
23.12.2020
Ich habe bereits über meine Implementierung eines Derangement berichtet - hier noch einige theoretische Nachbetrachtungen...
WeiterlesenAndroid Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Gui Hardware Java Java. Komponenten Jupyter JupyterBinder Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Präsentationen Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Asymmetrische KryptographieIch habe mich mit der Idee schon länger getragen: Nochmal einen Rundumschlag zu asymmetrischer Kryptographie zu machen. Dabei werde ich mich auf Demonstrationen der einzelnen Konzepte und Operationen mit Beispielcode konzentrieren und zu jedem der vorgestellten Konzepte mehr oder weniger ausführlich bezüglich der Einsatzszenarien und Vor- und Nachteile Stellung beziehen
WeiterlesenDieser Vortrag wurde zum 39C3 eingereicht und abgelehnt. Ich möchte einige Open-Source-Frameworks für verschiedene Programmiersprachen vorstellen, mit denen sich Architekturregeln pro Projekt oder Organisation festlegen und mithilfe gängiger Testinfrastrukturen durchsetzen lassen.
WeiterlesenDas ist ein Abstract eines Vortrages, den ich auf dem 39C3 halten wurde, der aber abgelehnt wurde
WeiterlesenManche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen Codeberg-Repositories findet man hier.