- Im Substack-Editor tritt ein Netzwerkfehler auf, wenn bestimmte Systempfade eingegeben werden
- Eine Web Application Firewall (WAF) blockiert solche Pfade, um Path-Traversal-Angriffe und Command-Injection-Angriffe zu verhindern
- Das Gleichgewicht zwischen Sicherheit und Benutzbarkeit wird als wichtiges Thema sichtbar
- Für technische Autoren wird eine bessere Lösung benötigt
- Das Problem lässt sich durch die Verwendung eines alternativen Pfads umgehen
Wenn /etc/h*sts den Substack-Editor stört: Das Abenteuer der Web-Content-Filterung
Ein mysteriöser Netzwerkfehler
- Beim Verfassen eines technischen Beitrags zur DNS-Auflösung trat ein unerwarteter Fehler auf
- Bei Eingabe des Pfads
/etc/h*ststrat ein Netzwerkfehler auf, und das automatische Speichern schlug fehl - Die Statusseite von Substack zeigte normalen Betrieb an
Beginn der Untersuchung
- Der Fehler trat bei Eingabe eines bestimmten Dateipfads auf, während abgewandelte Pfade normal funktionierten
- Pfade wie
/etc/h*stslösten Fehler aus, veränderte Varianten hingegen nicht
Was passiert im Hintergrund?
- In den Entwicklerwerkzeugen des Browsers wurde eine 403 Forbidden-Antwort festgestellt
- Cloudflare war beteiligt
Web-Application-Sicherheitsfilter verstehen
WAF kurz erklärt
- Eine Web Application Firewall (WAF) fungiert als Sicherheitswächter für Websites
- Sie blockiert verdächtige Anfragen
Path Traversal: Warum Vorsicht geboten ist
- Path-Traversal-Angriffe versuchen, auf sensible Systemdateien zuzugreifen
- Pfade wie
/etc/h*stskönnen ein Angriffsziel sein
Command Injection: Ein weiteres Sicherheitsproblem
- Command-Injection-Angriffe zielen darauf ab, die Ausführung von Systembefehlen auszulösen
- Beim Erwähnen von Systempfaden kann ein Filter die Anfrage blockieren
Das Rätsel vertieft sich: historische Beispiele
- In anderen Substack-Posts wurden ähnliche Fälle der Verwendung solcher Pfade gefunden
- Möglicherweise hat sich das Filterverhalten ab einem bestimmten Zeitpunkt geändert
Sicherheit vs. Benutzbarkeit: eine heikle Balance
- Der Filter von Substack dient dem Schutz, wird für technische Autoren aber zum Hindernis
- Es gibt Verbesserungspotenzial: klare Fehlermeldungen, Erkennung technischer Inhalte, dokumentierte Workarounds
Ein Blick auf die HTTP-Antwort
- Auf API-Ebene wurde der Statuscode 403 Forbidden bestätigt
Bessere Lösungen für Plattformen mit technischen Inhalten
- Kontextbezogene Filterung: Systempfade in Codeblöcken oder technischen Diskussionen erkennen
- Klare Fehlermeldungen: Statt „Netzwerkfehler“ erklären, dass die Blockierung durch einen Sicherheitsfilter verursacht wurde
- Dokumentierte Workarounds: Hinweise geben, wie sensible Pfade besprochen werden können
Fazit: Der Schnittpunkt von Sicherheit und technischem Schreiben
-
Das Problem im Substack-Editor zeigt die komplexen Herausforderungen zwischen Sicherheit und technischem Schreiben
-
Was für einen Sicherheitsfilter wie ein Angriffsmuster aussieht, kann in Wirklichkeit legitimer Inhalt sein
-
Das Problem kann durch die Verwendung eines alternativen Pfads gelöst werden
-
Leser werden gebeten, in den Kommentaren zu teilen, ob sie ähnliche Filterprobleme auf anderen Plattformen erlebt haben
1 Kommentare
Meinungen auf Hacker News
Leute, die bei CDNs WAF-Regeln konfigurieren, verstehen Websites und Dienste mit technischen Inhalten oft nicht richtig. Das ist kein reines Cloudflare-Problem, bei Akamai ist es ähnlich.
Wenn man auf einer Website, auf der über Datenbanken diskutiert wird, die grundlegenden Regeln gegen SQL Injection aktiviert, geht die Seite kaputt, und Regelsets gegen File Inclusion blockieren Zeichenketten wie
/etc/hostsoder/etc/passwd.Es gibt natürlich auch den Aspekt des Gleichgewichts zwischen Sicherheit und Nutzbarkeit. Da man nicht weiß, welcher Dienst anfällig implementiert ist, wird es in gewisser Hinsicht sicherer, wenn man alle WAF-Regeln darüberlegt. Aber wenn ein sicher implementierter Dienst technische Konzepte diskutieren muss, werden dieselben Regelsets sehr lästig.
Die Regeln feinzujustieren kostet viel Zeit. Wenn man behebt, dass eine Seite nicht lädt, weil
/etc/hostsin einem Query-Parameter steht, lädt als Nächstes eine XHR-Ressource nicht, weil/etc/hostsim Referrer steht, und danach geht wieder etwas kaputt, weil eine JS-Analytics-Bibliothek die besuchte URL in ein Cookie schreibt – irgendwann will man die Regel einfach abschalten.Wenn ein Versicherer sagt: „Wenn ihr eure Mitarbeiter nicht alle 90 Tage ihre Passwörter ändern lasst, erhöhen wir die Prämie um 20 %“, dann steigt die Prämie, egal wie zutreffend man darauf hinweist, dass NIST schon vor mehr als zehn Jahren davon abgerückt ist, regelmäßige Passwortwechsel zu empfehlen, und dass das eine schlechte Praxis ist.
Also seufzt man, implementiert eine Passwortablauf-Richtlinie und hört sich die Beschwerden der Mitarbeiter an, man sei inkompetent. Da log4shell so berühmt geworden ist, wäre es nicht überraschend, wenn Versicherer inzwischen verlangen, dass Server gängige „Hacker-Strings“ wie
/etc/hosts,/etc/passwdoderjndi:zurückweisen.Fragt man den CIO, gegen welche tatsächliche Bedrohung das schützt, bekommt man nur einen leeren Blick zurück.
Aus Sicht der Engineers gibt es keinen Anreiz, zu verstehen, wohin jedes Eingabeformular führt, und es auf sinnvolle Weise zu bereinigen. Bezahlt wird man dafür, Checkboxen abzuhaken und weiterzumachen, und auch Neue lernen das schnell. Solche Organisationen konzentrieren sich nicht darauf, Sicherheit zu verbessern, sondern darauf, nach einem Vorfall Verantwortung zu vermeiden.
Es kann sinnvoll sein, Filter auf „andere Dinge“ anzuwenden, die zum Server oder zwischen Servern übertragen werden, aber beim Filtern des eigentlichen Textkörpers, der als Blog-Inhalt angezeigt wird, sehe ich keinen Sicherheitsgewinn. Das wirkt ziemlich eindeutig wie ein Bug.
https://en.wikipedia.org/wiki/Scunthorpe_problem
Das Backend muss beliebige Byte-Inhalte in Eingabefeldern verarbeiten können und darf nicht deshalb für SQL Injection anfällig sein, weil es keine Vorfilterung auf der CDN-Schicht gibt.
"/etc/hosts"wörtlich vorkommt, wirkt sie ziemlich offensichtlich kaputt.Das erinnert mich an eine Anekdote von einer E-Commerce-Plattform. Jemand hatte einen Webshop mit Memory Leak gebaut, und als Workaround wurde die App neu gestartet, sobald die Zeichenkette
"OutOfMemoryException"im Log auftauchte.Dann wollte ein anderer Entwickler Kundensuchbegriffe loggen, und wenn jemand
"OutOfMemoryException"ins Suchfeld eingab …"system(...)", und die WAF wertete das als PHP Injection und sperrte die IP.Ich frage mich, ob auch
/etc//hostsoder/etc/./hostsblockiert werden. Dieses Whac-a-Mole-Spiel muss zwangsläufig scheitern.Die Leute, die so etwas bauen, müssen verstehen, dass Angreifer klüger und hartnäckiger sind als sie selbst, und sich nur auf bewährte Sicherheitsmethoden verlassen, etwa darauf, nicht vertrauenswürdige Eingaben nicht auszuführen.
Mir wurde einmal gesagt, eine Anwendung brauche eine WAF zum Schutz vor SQL-Injection-Angriffen, obwohl sie gar keine SQL-Datenbank verwendet.
Wenn man widerspricht, bekommt man immer den Vortrag über „Defense in Depth“ zu hören, und wenn man sagt, es sei effektiver, jeden Donnerstagmorgen einmal auf den Schreibtisch zu klopfen und sich dreimal im Kreis zu drehen, schauen sie einen an, als wäre man völlig verrückt. Ich habe das jede Woche gemacht und wurde nie gehackt – ist das etwa keine Defense in Depth? Schaden kann es ja nicht.
Wildcard-Auflösung ist schwieriger, aber mit einer Liste verbotener Dateien durchaus machbar.
https://nodejs.org/api/path.html#pathresolvepaths
Edit:
realpathin C verhält sich etwas anders, daher habe ich den Link geändert.Wie Substack diese Situation für technische Autorinnen und Autoren verbessern kann?
Indem sie an den Editor-Endpunkt für Beiträge, in denen es um jedes Thema gehen können muss – sogar um Strings, die eine dumme WAF triggern –, keine Web Application Firewall hängen, die so dumm wie ein Stein ist.
Das ist, als würde ein Webentwicklungsforum einen XSS-Filter einsetzen, der verhindert, dass Mitglieder über XSS sprechen. Man sollte lernen, Inhalte korrekt zu escapen.
Die sind dumm und verwenden nur den schwer lesbaren Müllhaufen namens
corerulesetvon OWASP.Der Aussage, dieser Fall zeige eine interessante Spannung zwischen Schutz und Usability in der Websicherheit, kann ich kaum zustimmen. Das ist einfach ein Bug, und zwar ein dummer Bug. Er zeigt nur, dass Leute, die es besser wissen müssten, es nicht tun.
Die Spannung zwischen Sicherheit und Usability gibt es tatsächlich, aber das hier ist sie nicht. Normalerweise geht es um Kompromisse, bei denen man gute Sicherheit umsetzt und dadurch Nutzerinnen und Nutzer nervt: Zwei-Faktor-Authentifizierung, Sperre nach drei Fehlversuchen, Rate Limiting gegen DoS – mehr Sicherheit verschlechtert die User Experience, bessere User Experience senkt die Sicherheit.
Das hier ist keines von beidem. Es ist schlechte Sicherheit und schlechte User Experience. Ich sehe nicht, wo da die Spannung sein soll.
Natürlich fanden PHP-Site-Autoren das schnell heraus, es wurden verschiedene Umgehungstechniken genutzt, und insgesamt hat diese „Bereinigung“ wahrscheinlich mehr Schaden angerichtet, als wenn es sie gar nicht gegeben hätte.
Nachdem ich früher einmal darauf hereingefallen war, fiel mir beim Wort „Netzwerkfehler“ sofort die Ursache ein.
Als ich ein Competitive-Programming-Team betreute, bekam die Hälfte der Schülerinnen und Schüler eine leere Seite, wenn sie eine Lösung einreichten. Nach einer Stunde Debugging grenzten wir es auf einige C++-Typen und Schlüsselwörter ein, die, wenn sie im Code vorkamen, einen 403 auslösten – alles Dinge, die auch in JavaScript eine Bedeutung haben.
Als ich bei einer Bank arbeitete, gab es ebenfalls eine API, bei der man Python-Dateien einreichen musste; die meisten Python-Dateien führten zu einem 403, kurze Dateien gingen durch. Nach Stunden Debugging grenzten wir es auf ein einzelnes Schlüsselwort ein, das gelegentlich im Code vorkam.
Ein paar Monate später passierte dasselbe in einer neuen Cloud-Umgebung, und wieder verbrannten wir Stunden damit. Nach dem zweiten Mal sorgte ein Kollege dafür, dass das Deployment-Skript bei einem 403
"HAHAHA YOU'VE BEEN WAFFED"ausgibt, und ich bin ihm bis heute dankbar, weil ich diesen Fehler viel häufiger gesehen habe, als erwartet.In unserer Anwendung ist uns etwas Ähnliches passiert. Unser internes Red Team veröffentlichte Daten, die XSS- und andere Injection-Angriffsversuche enthielten.
Die Angriffe selbst waren nicht erfolgreich, aber allein weil diese Einträge existierten, blockierte die Firmenfirewall Netzwerk-Requests, die diese Payload enthielten, sodass die interne Admin-Seite nicht geladen wurde. Am Ende wurde ein fehlgeschlagener XSS-Angriff zu einem effektiven DoS-Angriff.
Altes wird wieder neu. Früher nannte man so etwas das Scunthorpe-Problem.
https://en.m.wikipedia.org/wiki/Scunthorpe_problem
cockpitimmer zuc***pitwurde. Das war ziemlich lustig.Wenn man über Biologie, Finanzen oder Geologie schreibt? Einfach Pech gehabt.
Dumme Filterung ist schon schlimm genug, selbst wenn sie von klugen und wohlmeinenden Menschen eingesetzt wird.
Gestern Abend bin ich bei OpenRouter auf ein ähnliches Problem gestoßen. OpenRouter ist als „Vermittlungsstellen“-Dienst großartig, weil man mehrere LLMs über einen einzigen Endpunkt nutzen kann. Gestern Abend begann ich zu testen, welche Modelle gut darin sind, rohes HTML auf verschiedene Arten zu verarbeiten.
Da die OpenRouter-API jedoch durch Cloudflare geschützt ist, wurden viele, wenn auch nicht alle Requests blockiert, sobald der Body eines POST-Requests bestimmte rohe HTML- und JavaScript-Fragmente enthielt. Schickt man denselben Prompt direkt an OpenAI oder Anthropic, gibt es kein Problem.
Bei kostenlosen Modellen würde ich verstehen, dass man Missbrauchsschutz streng einstellt, aber hier geht es um abgerechnete Requests an kommerzielle Modelle, und das macht es noch ärgerlicher.
Ich hatte dieses Problem früher auch, und es war extrem frustrierend. Wegen
"Network error"konnte ich einen Artikel, an dem ich monatelang geschrieben hatte, nicht aktualisieren; ich dachte, es läge daran, dass der Artikel durch die Bearbeitung länger geworden war, und fand die Ursache nicht.Den Support zu kontaktieren war wegen des AI-Chatbots ebenfalls schwierig, und als ich endlich einen Menschen erreichte, schien deren „technischer Support“ nicht die Absicht zu haben, sich das in angemessener Zeit anzusehen.
Erst als jemand auf Twitter die Möglichkeit eines magischen Strings ins Spiel brachte, der dumme Sicherheitslogik auslöst, fand ich das Problem und konnte den Artikel schließlich ändern.