Server Side Template Injection
1. 개요
SSTI(Server Side Template Injection)취약점은 서버 측에 Template이 구성되어 있고 사용자 입력 값이 기존 Template에 삽입되는 경우 공격자는 Template 구문을 이용해 악성 페이로드를 삽입하여 공격자가 원하는 액션을 수행하도록 하는 공격입니다.
2. 공격 과정
SSTI 취약점은 기본적으로 모든 서버에 제각각 다른 서버와 다른 Template을 사용하기 때문에 언어와 Template 엔진에 따라 취약점을 발생 시키기 위한 페이로드가 달라지게 됩니다.
출처 : https://dokhakdubini.tistory.com/515
위의 사진처럼 공격하는 서버가 어떤 Template을 사용하고 있는지 각 구문을 삽입하는 방법으로 확인할 수 있습니다.
Smarty Template의 구문을 통한 공격 구문 예)
GET /test?q={$smarty.server.SERVER_ADDR} HTTP/1.1
Host: www.sample.com
User-Agent: HTTPie
3. 대응
SSTI의 대응 방법으로는 대표적으로 두 가지 방안이 있습니다.
- Sanitization
- 사용자 입력으로부터 Template를 생성하지 않도록 처리해야 합니다. 사용자의 입력이 필요한 경우 Template 자체에서 제공하는 Parameter를 통해 받아서 처리하도록 구성해 Template 자체에 영향을 줄 수 없도록 제한합니다.
- Input Validation
- 사용자의 입력 값 유효성 검증을 통해 사용자가 입력한 특수문자 구문들을 Escape 처리해야 합니다.
-----
저희 AIWAF에서는 각 Template에서 사용하는 문법에 맞춰 대응 패턴을 생성 하였습니다.
- Server Side Template Injection 2
- 사칙 연산을 활용한 공격 구문을 탐지 하기 위한 패턴
- Server Side Template Injection 3
- jinja2 템플릿의 취약점을 악용하여 Python 기반 악성 페이로드를 삽입하는 공격을 탐지 하기 위한 패턴
- Server Side Template Injection 4
- Mako 템플릿의 취약점을 악용하여 Python 기반 악성 페이로드를 삽입하는 공격을 탐지 하기 위한 패턴
- Server Side Template Injection 5
- Smarty 템플릿의 취약점을 악용하여 PHP 기반 악성 페이로드를 삽입하는 공격을 탐지 하기 위한 패턴
- Server Side Template Injection 6
- Twig 템플릿의 취약점을 악용하여 PHP 기반 악성 페이로드를 삽입하는 공격을 탐지 하기 위한 패턴
4. 결론
SSTI취약점은 공격 접근성과 비례하여 공격 영향도도 높은 취약점으로 그에 따른 파급력이 커 빠른 대응이 필요하여 이에 따른 업데이트도 계속 나오기 때문에 주기적으로 점검 및 업데이트가 필요합니다.
저희 AIWAF 제품에서는 SSTI 관련 취약점들에 대해 패턴을 다수 개발하여 대응하고 있으며, 앞으로도 발견되는 SSTI 관련 취약점들에 대해서도 신속하게 대응할 예정입니다.