Twig 3.27: 5 Sandbox-CVEs, Strict Mode und Tailwind 4.3

Twig 3.27: 5 Sandbox-CVEs, Strict Mode und Tailwind 4.3

Frische Sicherheitslücken in der Twig-Sandbox zwingen Entwickler zum schnellen Handeln, da Version 3.27.0 gleich fünf neue CVEs adressiert und einen Vorgeschmack auf den Strict Mode von Twig 4.0 gibt. Besonders Nutzer von Long-Lived-Workern wie FrankenPHP sollten jetzt patchen, um kritische Sandbox-Bypasses zu verhindern. Parallel dazu vereinfacht Tailwind CSS v4.3 das Design mit nativem Scrollbar-Styling ohne externe Plugins.

Dennis Schwenker-Sanders 7 Min. Lesezeit

Twig 3.27.0 erschien letzte Woche mit fünf neuen Sandbox-CVEs, einem optionalen Strict Mode als Vorschau auf Twig 4.0 und der Deprecation von SourcePolicyInterface. Wer nach den kritischen Lücken in 3.26.0 (CVE-2026-46640, Code Execution) jetzt auf 3.26 updated hat: Es gibt schon wieder Patches. Twig 3.27 schließt vier weitere Sandbox-Bypasses, die in 3.26 entweder nicht erkannt oder als Residual-Bugs übrig geblieben waren.

Was Sie in 9 Minuten erfahren:

  1. Welche der fünf neuen Twig-CVEs Ihr Projekt betreffen und warum Long-Lived-Worker am stärksten exponiert sind
  2. Was der neue Strict Mode für SecurityPolicy bedeutet und ob Sie ihn aktivieren sollten
  3. Warum Tailwind CSS v4.3 Scrollbar-Styling jetzt ohne Plugin und ohne Browser-Workarounds funktioniert

Beide Updates betreffen den Frontend-Stack, aber mit sehr unterschiedlicher Dringlichkeit. Twig 3.27 ist ein Security-Update, das je nach Architektur sofortigen Handlungsbedarf hat. Tailwind v4.3 ist ein Feature-Release ohne Breaking Changes, das einen langjährigen Schmerzpunkt löst. Ich behandle beide nacheinander.

Impact-Tabelle: Twig 3.27 CVEs


CVE

Schwere

Angriffsvektor

Betrifft

Aktion

CVE-2026-46636

Mittel

Sandbox-Allow-list-Bypass bei State-Änderung

Long-Lived-Worker, FrankenPHP, RoadRunner

Sofort patchen

CVE-2026-48805

Mittel

Sandbox-Bypass in veralteten Wrapper-Funktionen

Code mit twig_array_some/twig_array_every

Patchen

CVE-2026-48806

Mittel

__toString()-Bypass via dynamische Map-Keys

Sandbox mit Stringable-Objekten

Patchen

CVE-2026-48807

Mittel

__toString()-Bypass via Traversable in join/replace

Sandbox mit Traversable-Werten

Patchen

CVE-2026-48808

Niedrig

column-Filter-Bypass unter SourcePolicyInterface

Sandbox mit SourcePolicyInterface

Patchen

Betrifft Sie das? Schnelltest in 30 Sekunden

Sofort patchen wenn: Ihre Symfony-App in einem Long-Lived-Worker-Modell läuft (FrankenPHP, RoadRunner, Symfony Messenger-Consumer) und Twig-Templates sandboxed und nicht-sandboxed in derselben Umgebung rendert.

Reguläres Update wenn: Sie die Twig-Sandbox für User-generierte Templates nutzen (CMS-Backend, Multi-Tenant). Alle fünf CVEs betreffen die Sandbox. Kein Sandbox-Einsatz = kein direktes Risiko.

Trotzdem updaten wenn: Sie Twig ohne Sandbox nutzen. Der Strict Mode ist optional, aber die Deprecations für SourcePolicyInterface und implizit erlaubte Sandbox-Funktionen betreffen zukünftige Upgrades.

🔍 Kommt Ihnen das bekannt vor?

Viele meiner Kunden standen vor genau dieser Herausforderung. In einem kostenlosen Erstgespräch analysiere ich Ihre Situation und gebe eine ehrliche Einschätzung.

Kostenloses Erstgespräch anfragen →

⏱️ Antwort binnen 24 Stunden

Warum sind Long-Lived-Worker das Hauptrisiko?

CVE-2026-46636 ist der kritischste der fünf Fixes, weil er ein fundamentales Architektur-Problem in der Twig-Sandbox aufdeckt. The per-template filter, tag and function allow-list check is compiled into the checkSecurity() method of each Template subclass and was invoked once from the constructor. Template instances are then cached on the Environment in $loadedTemplates, so the verdict computed at construction time was sticky for the rest of the process. Any later change of sandbox state on the same Environment left that cached verdict in place.

In einfachem Deutsch: Wenn eine Template-Klasse einmal außerhalb der Sandbox instanziert wurde, liefen ihre Filter, Tags und Funktionen für alle späteren Sandbox-Renders ohne die eigentliche Allow-List-Prüfung. Das ist besonders problematisch bei FrankenPHP, RoadRunner und Symfony-Messenger-Consumern, die denselben PHP-Prozess für viele Requests wiederverwenden. Ein nicht-sandboxed Render zu Beginn vergiftet alle späteren sandboxed Renders.

# Prüfen welche Twig-Version installiert ist
$ composer show twig/twig

# Update auf 3.27.1 (der aktuelle Patch-Release)
$ composer update twig/twig

# Prüfen ob Long-Lived-Workers im Einsatz sind:
# FrankenPHP: composer show dunglas/frankenphp
# RoadRunner: composer show spiral/roadrunner
# Bei Symfony Messenger: consumer-Prozesse laufen als Long-Lived

Was bedeutet der neue Strict Mode für Ihr Projekt?

Twig 3.27 führt einen opt-in Strict Mode für SecurityPolicy ein. Im normalen Modus sind extends, use, parent(), block() und attribute() in Sandbox-Templates immer erlaubt, unabhängig von der SecurityPolicy. Twig 3.12 started emitting a deprecation for the two tags; this release extends it to the three functions, because 4.0 will require all of them to be listed explicitly.

Der Strict Mode ist die Vorschau auf dieses 4.0-Verhalten:

# Strict Mode aktivieren (Twig 3.27+)
use Twig\Sandbox\SecurityPolicy;

$policy = new SecurityPolicy(
    allowedTags: ['extends', 'if', 'for', 'set'],
    allowedFilters: ['escape', 'upper', 'lower'],
    allowedFunctions: ['parent', 'block', 'attribute', 'range'],
    // Strict Mode: parent/block/attribute müssen explizit erlaubt sein
);
$policy->setStrictMode(true);

Was viele unterschätzen: Wer den Strict Mode jetzt aktiviert, erhält keine Deprecation-Warnings mehr und sieht sofort, welche implizit erlaubten Funktionen seine Templates nutzen. Der Aufwand für den Twig-4.0-Upgrade wird damit deutlich kleiner. Wer bis 4.0 wartet, hat plötzlich Breaking Changes, die er nicht kannte.

Zusätzlich: SourcePolicyInterface wurde in 3.27 als deprecated markiert. CVE-2026-48808 war ein residualer Bypass speziell für SourcePolicyInterface-Nutzung. Twig signalisiert damit, dass das Interface in 4.0 entfernt wird. Wer eigene Implementierungen davon hat: Jetzt ist der richtige Zeitpunkt für die Migration auf das reguläre SecurityPolicy-System.

KurzCVE-2026-46636 ist das kritischste Fix für Long-Lived-Worker. Strict Mode ist optional, aber der richtige Schritt zur Vorbereitung auf Twig 4.0. SourcePolicyInterface-Implementierungen sollten migriert werden.

⚡ Unterstützung bei der Umsetzung?

Ich unterstütze KMU und Agenturen bei PHP- und Symfony-Projekten – von der Architektur bis zum Go-Live.

  • Erfahrener PHP & Symfony-Entwickler
  • Transparente Kommunikation & faire Konditionen
  • Remote oder vor Ort im Raum Oldenburg
Projekt besprechen →

⏱️ Antwort binnen 24 Stunden

📞 Oder direkt anrufen: 04481 - 9099658

Tailwind CSS v4.3: Scrollbars ohne Plugin und ohne Workarounds

Wer Tailwind CSS in Symfony-Projekten (über AssetMapper oder Vite) einsetzt, kann jetzt Scrollbars nativ stylen. Tailwind CSS v4.3 is here with first-party scrollbar styling, even more logical property utilities, new zoom and tab-size utilities, better @variant support, and all the v4.2 stuff we shipped while forgetting blogs existed.

Das klingt unspektakulär, ist aber in der Praxis ein echter Zeitsparer. Bisher gab es zwei Optionen: Das tailwind-scrollbar-Plugin (externe Dependency, musste konfiguriert werden) oder Browser-spezifische CSS-Hacks mit ::-webkit-scrollbar, die in Firefox nicht funktionierten.

<!-- Tailwind v4.3: Native Scrollbar-Styling -->
<div class="h-96 overflow-y-auto
            scrollbar-thin
            scrollbar-thumb-slate-500
            scrollbar-track-slate-100">
  <!-- Scrollbarer Inhalt -->
</div>

<!-- Layout-Shift verhindern wenn Scrollbar erscheint: -->
<div class="scrollbar-gutter-stable overflow-y-auto">
  <!-- Platz für die Scrollbar ist immer reserviert -->
</div>

scrollbar-thin ist die schmalere Variante, scrollbar-auto die Standard-Breite, scrollbar-none versteckt die Scrollbar komplett (nützlich für touch-scrollbare Elemente). scrollbar-thumb-* und scrollbar-track-* nehmen alle Tailwind-Farbwerte an.

Was bringt Tailwind v4.3 sonst noch?

Da Tailwind v4.2 ohne Blogpost geshippt wurde, deckt der v4.3-Post technisch beide Releases ab:

Vier neue Farbpaletten: New mauve, olive, mist, and taupe palettes — four more neutral-ish palettes for when gray, zinc, neutral, stone, and slate have somehow failed you.

Webpack-Plugin: Für Teams, die noch Webpack statt Vite nutzen, gibt es jetzt ein dediziertes First-Class-Plugin mit deutlich besseren Build-Zeiten.

Logische Eigenschaften: Neue Utilities für pbs-*, mbs-*, inline-*, block-* und logische Inset-Utilities für mehrsprachige Layouts (LTR/RTL).

@container-size: Container Queries können jetzt auch die Höhe des Containers abfragen, nicht nur die Breite.

KurzTailwind v4.3 löst das Scrollbar-Problem nativ: kein Plugin mehr, kein Browser-Workaround. Plus neue Farben, Webpack-Plugin und logische Properties.

Aus der Praxis: Frontend-Stack-Updates systematisch halten

Aus der Praxis

Was mir bei Code-Reviews und Einarbeitungen in Bestandssysteme häufig begegnet: Twig und Tailwind laufen auf verschiedenen Update-Zyklen, werden aber oft gemeinsam in denselben CI-Pipelines vergessen. Twig-Updates werden als "PHP-Dependency" behandelt (composer update), Tailwind-Updates als "Frontend-Kram" (npm update). Weder das eine noch das andere wird automatisch auf Security-Relevanz geprüft. CVE-2026-46636 wäre in einem solchen Setup nicht aufgefallen, bis ein Penetrationstest ihn gefunden hätte.

Als Symfony-Entwickler, der beide Welten betreut (PHP-Backend und Tailwind-Frontend in Symfony-Projekten), empfehle ich: composer audit in die CI, npm audit ebenfalls. Twig und Tailwind sind keine voneinander getrennten Welten, wenn Sie in einer Symfony-Applikation zusammenarbeiten. Ein Security-Check sollte beide abdecken.

Wie ich im Claude-Mythos-Artikel beschrieben habe, kumulieren sich Twig-Sandbox-Lücken gerade. Die fünf CVEs in 3.27 folgen auf die kritischen Fixes in 3.26. Wer heute auf 3.27 updated, ist bereit für weitere Patches, die kommen werden.

Zusammenfassung

Twig 3.27.0/3.27.1: Fünf Sandbox-CVEs, alle auf Medium oder Low gestuft. CVE-2026-46636 ist das kritischste für Long-Lived-Worker (FrankenPHP, RoadRunner, Messenger-Consumer). Update via composer update twig/twig.

Strict Mode ist opt-in, aber ein sinnvoller Schritt zur Twig-4.0-Vorbereitung. SourcePolicyInterface ist deprecated. Jetzt ist der richtige Zeitpunkt für die Migration.

Tailwind CSS v4.3 löst das Scrollbar-Problem nativ. Kein Plugin, kein Browser-Workaround, ein konsistentes API für alle Browser.

🚀 Lassen Sie uns über Ihr Projekt sprechen

In einem kostenlosen 30-Minuten-Erstgespräch analysiere ich Ihre Anforderungen und gebe konkrete Empfehlungen – unverbindlich und ehrlich.

Termin vereinbaren →

Häufige Fragen

Bin ich von CVE-2026-46636 betroffen, wenn ich Twig ohne Long-Lived-Worker nutze?

Das Risiko ist deutlich geringer. CVE-2026-46636 betrifft den gecachten Sandbox-State pro PHP-Prozess. Bei klassischen PHP-FPM-Setups (ein Prozess pro Request) wird der Cache nach jedem Request zurückgesetzt. Das Problem entsteht erst, wenn Templates mehrfach in derselben Umgebung instanziert werden. Trotzdem: Das Update auf 3.27.1 ist ein reguläres Security-Update und sollte eingespielt werden.

Welche Twig-Version ist aktuell empfohlen?

Twig 3.27.1 ist die aktuelle empfohlene Version (Stand Juni 2026). 3.27.0 enthielt noch einen Folgefehler, 3.27.1 hat ihn behoben. Führen Sie composer show twig/twig aus und prüfen Sie die installierte Version. Bei Symfony-Projekten: composer update symfony/twig-bundle twig/twig aktualisiert beide.

Funktioniert das neue Tailwind Scrollbar-Styling in allen Browsern?

Tailwind v4.3 nutzt die modernen CSS-Properties scrollbar-width und scrollbar-color, die von Firefox und allen modernen Chromium-Browsern unterstützt werden. Safari hat die Properties seit Safari 18 (September 2024). Internet Explorer und alte Edge-Versionen werden nicht unterstützt, aber für aktuelle Projekte ist das keine relevante Einschränkung.

Was ist der Unterschied zwischen scrollbar-thin, scrollbar-auto und scrollbar-none?

scrollbar-thin zeigt eine schmale Scrollbar (browser-dependent, in Chrome etwa 6px). scrollbar-auto nutzt die Standard-Scrollbar-Breite des Betriebssystems. scrollbar-none blendet die Scrollbar komplett aus, das Scrollen selbst funktioniert aber weiterhin. Nützlich für Touch-scrollbare horizontale Galerien. scrollbar-gutter-stable reserviert Platz für die Scrollbar auch wenn sie unsichtbar ist.

Muss ich das tailwind-scrollbar-Plugin nach dem Update entfernen?

Nein, es gibt keine automatische Migration. Wenn Sie das tailwind-scrollbar-Plugin bisher genutzt haben, können Sie es weiter nutzen oder schrittweise auf die nativen Utilities migrieren. Die nativen Klassen-Namen unterscheiden sich leicht. Prüfen Sie Ihr Markup auf Verwendung von Plugin-Klassen und ersetzen Sie diese bei Bedarf manuell.

Artikel teilen: