IT/영어 공부노트
Server-Side Template Injection: SSTI 정리 본문
SSTI 취약점이란 웹 어플리케이션에 적용되어 있는 웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 포함된 상태에서 서버 측에서 템플릿 인젝션이 발현되는 공격을 의미한다.
웹 템플릿 엔진이란?
템플릿 엔진: 템플릿 양식과 특정 데이터 모델에 따른 입력자료를 합성하여 결과 문서를 출력하는 소프트웨어 및 컴포넌트
웹 템플릿 엔진: 브라우저에서 출력되는 웹 문서를 위한 템플릿 엔진
> 고정적으로 사용되는 웹 문서를 템플릿으로 미리 작성해 두고 동적으로 변경되는 데이터 영역만 필요 시에 결합해서 웹 문서를 구성하고 화면에 출력 하게 되는 것
위 샘플 게시판을 보면 상단에 출력되는 네비게이션바가 있다. 이를 웹 문서를 구성할 때마다 새로 구성해야 한다면 반복 구문수행으로 효율성이 떨어지는데, 이를 최소화 할 수 있는 것이 웹 템플릿 엔진이다.
위처럼 반복적인 요소를 템플릿화 시켜 미리 작성해두고 동적으로 변경되는 데이터 부분만 결합해서 출력하여 코드의 복잡성을 낮출 수 있다.
SSTI 취약점
SSTI 취약점은 서버 측에 Template이 구성되어 있고 사용자 입력 값이 기존 Template에 삽입되는 경우 공격자는 Template 구문을 이용해 악성 페이로드를 삽입해 공격자가 원하는 액션을 수행하도록 하는 공격이다.
위 그림은 공격자가 kw 코드에 {{2*2}}라는 구문을 입력해 결과인 4가 회신되며 공격자가 삽입한 구문이 실행되는 과정이다.
SSTI 취약점은 웹 문서 로드 시 동작하는 렌더링에 관여할 수 있어 Client-Side와 Server-Side 취약점으로 연결될 수 있어 위험도가 높다.
위는 템플릿 엔진 별 사용되는 템플릿 문법 유형을 정리한 그림이다.
괄호 안의 값이 동적으로 실행되어 화면으로 출력한다는 점은 동일하다. 백엔드 시스템에 대한 정보가 없는 경우 여러 문법을 삽입해 회신되는 결과를 통해 유추할 수 있게 된다.
Jinja Template 예시
Jinja Template는 Flask 프레임워크와 관련된 파이썬 템플릿 엔진이다.
위 표는 자주 사용되는 문법 예제이다.
사용자에게 받은 입력값이 age 변수에 삽입되고, 삽입된 값이 Template 구문에 의해 해석되어 HTML에 삽입되는 구조이다.
위 표처럼, 사칙연산을 입력하면 사칙연산 값을 그대로 반환하는게 아니 결과값을 반환하는 것을 알 수 있다.
위는 자주 사용되는 Payload!
참조
[1] 이글루 시큐리티 - 웹 템플릿 엔진 기반의 SSTI 취약점 분석
너무 정리 잘 되어있음..이글루 짱짱.. 사실 이 글은 저것을 그냥 요약했을뿐.. 원문으로 보세요 ㅎㅎ;