SSTI란?
Server-Side Template Injection의 약자이다. Template에서 동적으로 사용할 때 사용하는 코드를 include 시켜 원하는 액션을 수행하도록 하는 공격이다. 발생하는 위치에 따라 SSTI 또는 CSTI라고 한다. 대부분 SSTI와 RCE를 역어 공격을 수행한다.
RCE란?
Remote Code Execution의 약자이다. 원격지에서 임의의 공격 명령 실행이 가능한 취약점이다.
Detect
SSTI는 언어, 프레임워크에 따라 종류가 많다. 따라서 Template에 맞는 문법을 사용해서 Return 결과를 확인해야 한다.
Jinja는 Python전용 웹 템플릿 엔진이다.
예제는 Jinja Template의 경우이다.
GET /test?hi={{5*5}} HTTP/1.1
미취약
{{5*5}}
취약
25
SSTI cheat sheet
CSTI
다음은 Vue의 예제 코드입니다.
<script src="https://unpkg.com/vue@3"></script> <div id="app">{{ message }}</div> <script> Vue.createApp({ data() { return { message: 'Hello Vue!' } } }).mount('#app') </script>
{{ }} 로 감싸진 부분은 템플렛의 변수를 표시하거나, 자바스크립트 표현식을 실행 할 수 있습니다. 따라서 공격적인 입력이 들어가게 되면 Template Injection 취약점이 발생할 수 있습니다.
{{_Vue.h.constructor("alert(1)")()}}