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:
- Welche der fünf neuen Twig-CVEs Ihr Projekt betreffen und warum Long-Lived-Worker am stärksten exponiert sind
- Was der neue Strict Mode für SecurityPolicy bedeutet und ob Sie ihn aktivieren sollten
- 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.
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
⏱️ 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.
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 →