CSTI (Client Side Template Injection)

2024. 10. 24. 23:29·Web/Web Hacking

CSTI란?

클라이언트 사이드 템플릿 엔진을 사용해 동적으로 콘텐츠를 생성할 때, 공격자가 악성 스크립트를 삽입해 이를 실행시키는 공격 -> XSS와 같은 공격에 취약 (Web Template Engine이란?)

Client Side Template을 사용한 웹 페이지에서 사용자의 동작에 따라 동적으로 DOM을 생성할 때 XSS에서 사용되는 페이로드가 주입되면 DOM XSS로 이어지게 됩니다. 

<!DOCTYPE html>
<html>
    <head>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.13/dist/vue.js"></script>
    </head>
    <body>
        <div id="test">
            <h1><?php echo ($_GET['test']); ?></h1>
        </div>
        <script>
            new Vue({
                el: '#test'
            });
        </script>
    </body>
</html>

위와 같이 파라미터 값을 Client Side Template로 출력시키는 환경에서

템플릿 구문에 수학식을 입력하였을 때, 해당 식이 그대로 출력되는 것이 아닌, 계산 결과가 출력되는 경우 CSTI가 가능하다는 것임을 확인할 수 있습니다.

하지만 무조건 결과가 출력되어야만 CSTI가 가능한 것은 아닙니다. 어떤 템플릿 환경에서는 해당 수학식이 그대로 출력되어도 CSTI 공격이 가능할 수 있습니다.

CSTI가 가능한 환경임을 템플릿 구문으로 확인하였다면 XSS구문을 constructor과 같은 객체를 사용해 입력해 주면 XSS 공격으로 이어질 수 있게 됩니다.

constructor은 코드를 동적으로 생성하고 실행할 수 있는 객체로 자바스크립트 코드를 실행할 수 있습니다. 이 외에도 각 템플릿에서 제공되는 객체 또는 기능을 통해 CSTI를 시도할 수 있습니다.

템플릿 구문

CSTI 가능 여부는 아래와 같은 페이로드를 통해 확인해 볼 수 있습니다.

  • {{9*9}}
  • ${9*9}
  • ${{9*9}}
  • <%= 9*9 %>
  • #{9*9}

SSTI와 CSTI의 차이

두 공격 모두 Web Template Engine에서 이루어지는 공격이지만 Server Side와 Client Side 중 어떤 템플릿 엔진에서 이루어지는 지에 대한 차이가 존재합니다. 보통 CSTI는 클라이언트에서 이루어지는 공격으로 세션과 쿠키를 탈취는 것이 가능하지만, SSTI는 서버의 데이터에 접근할 수 있기 때문에 서버의 데이터를 훼손하거나, 서버를 장악할 수 있는 공격이 가능하기 때문에 CSTI보다 위험도가 조금 더 높은 공격이라 볼 수 있습니다. ( SSTI란? )


대응 방안

  • 필요한 데이터만 사용할 때 -> 화이트 리스트 필터링
  • 사용자 입력값을 사용할 때 -> 블랙리스트 필터링
  • Sandboxing -> 우회 가능성이 있기 때문에 여러 대응 방안과 함께 사용해야 함

 

 

 

참고

https://gayunkim-1.tistory.com/m/44

https://velog.io/@silver35/Web-Client-Side-Template-InjectionCSTI

'Web > Web Hacking' 카테고리의 다른 글

JWT(JSON Web Token) Attacks  (0) 2024.11.16
SSTI (Server Side Template Injection)  (4) 2024.10.25
GraphQL Injection  (2) 2024.09.25
NoSQL Injection  (0) 2024.09.07
XXE External Entities  (0) 2024.09.06
'Web/Web Hacking' 카테고리의 다른 글
  • JWT(JSON Web Token) Attacks
  • SSTI (Server Side Template Injection)
  • GraphQL Injection
  • NoSQL Injection
Pandyo
Pandyo
판됴의 성장 스토리 'ㅅ'
  • Pandyo
    dyostory
    Pandyo
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • Kategorie (36)
      • Web (1)
        • Web Hacking (10)
        • 언어 (2)
        • 개발 (5)
        • DataBase (2)
      • Cloud (1)
        • CloudGoat (1)
        • 실습 (0)
      • Project (11)
        • Cloud (11)
      • Wargame (4)
        • Dreamhack (1)
        • CTF (1)
        • Wargame site (2)
  • 링크

  • 태그

    template
    API
    무중단배포
    배포 방식
    XML
    DBMS
    devops
    Cloud
    graphql
    Internet GateWay
    ecs
    Web
    vulnerability
    NoSQL
    WebHacking
    cloudgoat
    Route Table
    Blue/Green
    JWT
    AWS
    jws
    Rolling Update
    buildspec.yml
    Injection
    Token
    target group
    CI/CD
    Fargate
    file
    canary release
  • hELLO· Designed By정상우.v4.10.0
Pandyo
CSTI (Client Side Template Injection)
상단으로

티스토리툴바