Vkládání šablon na straně serveru (SSTI) je zranitelnost, kde je uživatelský vstup vyhodnocován šablonovacím enginem, místo aby byl vykreslen jako prostý text, což útočníkovi umožňuje spustit na serveru libovolný kód.
Jak funguje vkládání šablon na straně serveru v zákulisí
K vložení šablony na straně serveru dochází, když je uživatelský vstup vložen přímo do šablonovacího enginu a vyhodnocen bez řádné sanitizace nebo izolace. To vytváří zranitelnost SSTI, která útočníkovi umožňuje vložit speciálně vytvořené datové části SSTI (například {{7*7}} (v Jinja2), které engine vyhodnotí, což umožní vše od zveřejnění dat až po spuštění libovolného kódu v kontextu serveru. Protože různé šablonovací enginy zpřístupňují různé objekty a API, datové části SSTI se liší podle platformy, ale sdílejí stejné nebezpečí: umožňují nedůvěryhodnému vstupu uniknout očekávanému toku vykreslování a spustit se za běhu aplikace, což často vede k úplnému vzdálenému spuštění kódu nebo laterálnímu přesunu, pokud se nekontroluje.
Minimální zranitelný příklad v Jinja2
Pokud uživatel odešle ?jméno={{7*7}}, aplikace to vyhodnotí a vrátí Dobrý den, 49To je učebnicová zranitelnost SSTI.
Minimální zranitelný příklad ve Twigu
Útočník může vložit datové zátěže SSTI, jako například {{7*7}} k prokázání spuštění kódu. Nebezpečí: pouhá injekce se může rozvinout do čtení souborů, provádění příkazů operačního systému nebo hlouběji proniknout do infrastruktury.
Zneužití v reálném světě: SSTI datové části, které spouštějí vzdálené spuštění kódu
Jakmile existuje zranitelnost SSTI, útočníci se snaží přejít od matematických výpočtů zaměřených na proof-of-concept k plnohodnotným... RCERůzné šablonovací enginy zpracovávají datové části odlišně.
Jinja2 – užitečné zatížení
- {{7*7}} → aritmetické provedení
- {{config.items()}} → úniky konfigurací serveru.
- {{ “”.__class__.__mro__[2].__subclasses__() }} → cesta k RCE
Rychlostní užitečné zatížení
- #set($x=”7″)${x} → obtok vstřikování
- #set($a=$class.inspect(“java.lang.Runtime”)) → přímý přístup za běhu
Užitečné zatížení větviček
- {{7*7}} → aritmetika
- {{app.request.server.all}} → proměnné prostředí
- {{_self.env.registerUndefinedFilterCallback(‘system’)}} → spuštění kódu
Tato datová zatížení SSTI ukazují, jak stejná zranitelnost v různých enginech vede k různým využít cesty, ale vždycky jsou nebezpeční.
Kde se skrývá vkládání šablon na straně serveru CI/CD-Řízené aplikace
Vkládání šablon na straně serveru není riziko jen pro webové aplikace; projevuje se v moderní CI/CD pipelines taky. Mezi typická úkryty patří:
- Tabulky kormidla v Kubernetes, kde se hodnoty šablon vykreslují dynamicky
- Šablony e-mailu které zřetězují uživatelem ovládané vstupy
- Dashboards kde jsou řetězce dotazů nebo konfigurační data vkládány do šablon
- DevOps skripty které generují HTML/Markdown pomocí šablonovacích enginů.
Příklad:
If.Hodnoty.zpráva pochází z nedůvěryhodného vstupu, zavádí do vašeho nasazení vstřikování šablony na straně serveru. pipeline sám.
Prevence SSTI pomocí bezpečnějších šablon a statické analýzy
Zmírnění zranitelností SSTI vyžaduje lepší kódovací vzorce a včasnou detekci.
Bezpečné vzory
- ❌ Nepoužívejte render_template_string nebo ekvivalent
- ✅ Používejte předdefinované soubory šablon a předávejte ověřené proměnné
- ✅ Šablonové moduly sandboxu, pokud jsou k dispozici
- ✅ Ověření a escapování vstupu uživatele před vykreslením
Mini kontrolní seznam pro vývojáře
- Nikdy nevykreslovat nezpracovaný uživatelský vstup přímo
- Používejte šablony v sandboxu, pokud jsou podporovány
- Opravte a ověřte všechny proměnné šablony
- Vyhněte se vlastním vyhodnocovačům šablon
- Naskenujte kód pro render_template_string nebo vzory zřetězení řetězců
Statická analýza a lintery mohou označit rizikové konstrukty ještě předtím, než se dostanou do produkčního prostředí.
Vkládání kontrol SSTI do DevSecOps Pipelines
Včasné odhalení vkládání šablon na straně serveru je levnější a bezpečnější než pozdější oprava. Týmy DevSecOps by měly vkládat kontroly do pipelines:
- Commit hooks: odmítnout commits nebezpečnými funkcemi (render_template_string)
- Statické analyzátory: skenování kódu šablony na straně serveru pro riziko vložení šablony
- Ověření závislostíoznačit zastaralé šablonovací moduly se známými zranitelnostmi SSTI
- Pipeline vrata: blok se slučuje, dokud neprojdou SSTI kontrolami
Tím, že se detekce užitečného zatížení SSTI stane součástí CI/CD, zabráníte tak šíření zneužitelného kódu.
Nenechte vkládat šablony na straně serveru do vašeho stacku
Jediná injekce šablony na straně serveru se může vyhnout matematickým trikům ({{7*7}}) k plnému vzdálenému spuštění kódu. Zranitelnosti SSTI se objevují nejen ve webových aplikacích, ale také v CI/CD pipelines, Helm grafy a šablony e-mailů.
Klíčové jídlo s sebou
- Nikdy nevykreslovat nezpracovaný uživatelský vstup do šablon
- Ověřte a vyčistěte všechny dynamické proměnné
- Různé motory (Jinja2, Velocity, Twig) mají různou nosnost SSTI, ale všechny lze vyzbrojit.
- Použijte statickou analýzu a fail-fast brány v pipelines
- Pravidelně auditujte šablony ve svém zásobníku
Xygeni Prohledává vaši kódovou základnu a hledá chyby typu „injection“ a další nebezpečné kódovací vzory, jakmile se objeví, a zachycuje rizikové konstrukty, jako je neopravené vykreslování šablon, ještě předtím, než se dostanou do produkčního prostředí, s nejnižší mírou falešně pozitivních výsledků v benchmarku OWASP. Xygeni CI/CD a IaC security skenování rozšiřuje stejné pokrytí na pipeline konfigurace, Helm grafy a skripty pro sestavení, které označují chybné konfigurace a škodlivé příkazy před jejich odesláním. Když Xygeni najde zranitelnost, AI AutoFix vygeneruje kontextově orientovanou opravu připravenou pro vývojáře přímo v pull request, takže náprava nečeká na další sprint.
V DevSecOps, zachycení vstřikování šablony na pipeline fáze, nikoli po nasazení, je to, co brání tomu, aby se z jednoho datového zatížení stal úplný kompromis.
Začněte zdarma. Není potřeba kreditní karta, naskenujte svůj první repozitář během několika minut.
Nejčastější dotazy
Co je vkládání šablony na straně serveru?
K SSTI dochází, když je uživatelský vstup předán do šablonovacího enginu a vyhodnocen jako kód, místo aby byl zobrazen jako text, což útočníkovi umožňuje spouštět příkazy v kontextu serveru.
Je SSTI totéž co XSS?
Ne. XSS vkládá skript, který běží v prohlížeči oběti; SSTI vkládá kód, který šablonovací engine vyhodnocuje na samotném serveru, a proto SSTI může vést přímo ke vzdálenému spuštění kódu.
Které šablonovací enginy jsou zranitelné vůči SSTI?
Jakýkoli engine, který vyhodnocuje výrazy, může být zranitelný, pokud se k němu uživatelský vstup dostane nedezinfikovaný, včetně Jinja2, Twig a Velocity, ačkoli každý z nich zpřístupňuje různé objekty, a proto i různé cesty zneužití.
Jak předcházet SSTI v CI/CD pipelines?
Hledejte nebezpečné vzorce, jako například render_template_string at commit v době, šablonovací enginy sandboxu, kde byly podporovány, a brány slučují výsledky statické analýzy předtím, než se kód dostane do produkčního prostředí.





