SSTI
SSTI(Server-Side Template Injection) 취약점
: 웹 어플리케이션에 적용되어 있는 웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 삽입하여 서버 측에서 템플릿 인젝션이 발현되는 공격.
- 대부분의 웹페이지는 동적 웹페이지로 구성되어 있음(정적 웹페이지에 비해 자유도가 높고, 사용자와 상호작용 및 접근성을 갖춤)
- SSTI 취약점이 발생하는 경우 서버 사이드의 취약점인 RCE, SSRF 공격으로 연결될 수 있음.
→ 공격자가 kw코드에 {{2*2}}라는 템플릿 구문을 입력하면 사칙연산 결과인 4라는 값이 반환됨
→ 공격자의 구문이 실행된 것.
SSTI 취약점의 공격 방법
1. 템플릿을 파악한다. (예시로는 Jinja 템플릿)
2. Jinja 템플릿에서 표현식으로는 {{ 내용 }}을 사용한다. → 중괄호 안의 변수나 표현식의 결과를 출력함.
→ 템플릿 구문이 어떻게 해석되어 표현되는지 알아봐야함.
해당 코드는 사용자에게 입력 받은 값이 age 변수에 삽입되고, 삽입된 age 값이 템플릿 구문에 의해 해석되어 HTML 문서에 삽입되는 구조이다.
→ 상수를 입력하면 age 변수 값을 그대로 가져오고, 사칙연산을 입력하면 사칙연산의 결과를 반환함. → 템플릿 구문은 단순 호출뿐만 아니라 사칙연산과 중괄호 안의 값을 동적으로 화면에 표현 가능함.
서버 사이드
: 네트워크의 한 방식으로 클라이언트 - 서버 구조에서 서버 쪽에서 행해지는 처리를 뜻함.
(↔ 클라이언트 사이드 : 클라이언트 쪽에서 행해지는 처리)
템플릿
: 템플릿을 통해 웹페이지를 구현할 때 더 간편하게 사용하고, 유지보수하기 쉬움.
(흔히 알고있는 ppt 템플릿 같은 느낌)
템플릿 엔진
: 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어 또는 소프트웨어 컴포넌트를 뜻함.
- 웹 템플릿 엔진 : 지정된 템플릿 양식 + 데이터 ⇒ HTML 문서를 출력하는 소프트웨어
- 웹 서버를 구축할 때 템플릿 엔진을 사용하기 위해 자주 사용되는 템플릿 구문 : {{ content }} , {% content %}
+) 컴포넌트 : 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위
템플릿 구분하기
: 모든 서버는 제각각 다른 서버와 다른 템플릿을 사용함. → 사용하는 언어와 템플릿 엔진에 따라 취약점을 발생시키는 코드가 달라짐.
→ 일일히 코드를 삽입하여 구별해야 함.
→ 잘 작동하면 위로, 작동하지 않으면 밑으로 이동