[MP4] Stagefright 1.0

[MP4] Stagefright 1.0

0x00. Intro

  • 타임라인
    • StageFright 1.0
      • 공개 : 2015.07.27
      • 패치 : 1차 - 2015.08.05, 2차 - 2015.08.06
  • 연관 취약점
    • CVE-2015-1538
      • Google Stagefright ‘stsc’ MP4 Atom Integer Overflow Remote Code Execution
      • Google Stagefright ‘ctts’ MP4 Atom Integer Overflow Remote Code Execution
      • Google Stagefright ‘stts’ MP4 Atom Integer Overflow Remote Code Execution
      • Google Stagefright ‘stss’ MP4 Atom Integer Overflow Remote Code Execution
    • CVE-2015-1539
      • Google Stagefright ‘esds’ MP4 Atom Integer Underflow Remote Code Execution
    • CVE-2015-3824
      • Google Stagefright ‘tx3g’ MP4 Atom Integer Overflow Remote Code Execution
    • CVE-2015-3826
      • Google Stagefright 3GPP Metadata Buffer Overread
    • CVE-2015-3827
      • Google Stagefright ‘covr’ MP4 Atom Integer Underflow Remote Code Execution
    • CVE-2015-3828
      • Google Stagefright 3GPP Integer Underflow Remote Code Execution
    • CVE-2015-3829
      • Google Stagefright ‘covr’ MP4 Atom Integer Overflow Remote Code Execution
    • CVE-2015-3864
      • Test

0x10. CVE-2015-1538

CVE-2015-1538은 단일 CVE 번호에 4개의 취약점이 연결되어 있다. 외부 표기로는 "#1 ~ #4"로 표현되어 있으며 세부 항목을 살펴보면 다음과 같다.

  • CVE-2015-1538 #1 : Google Stagefright ‘stsc’ MP4 Atom Integer Overflow Remote Code Execution
  • CVE-2015-1538 #2 : Google Stagefright ‘ctts’ MP4 Atom Integer Overflow Remote Code Execution
  • CVE-2015-1538 #3 : Google Stagefright ‘stts’ MP4 Atom Integer Overflow Remote Code Execution
  • CVE-2015-1538 #4 : Google Stagefright ‘stss’ MP4 Atom Integer Overflow Remote Code Execution

모두 MP4 파일을 분석하는 과정에서 발생하는 Integer Overflow에 따른 RCE 취약점이다. 다만 차이점은 발생하는 atom이 다를 뿐이다. 각각의 atom은 이전에 공개한 MP4 파일 분석에서 그 구조를 확인할 수 있다. 따라서 MP4 파일 분석 모듈을 바탕으로 분석을 진행하겠다.

0x11. CVE-2015-1538 #1. "stsc" atom Integer Overflow

MP4 분석 모듈 결과 취약점 샘플은 위와 같은 구조로 이루어져 있음을 알 수 있다. 그 중 CVE-2015-1538 #1의 경우 "stsc" atom에서 integer overflow가 발생하는데 샘플의 경우 2개의 "stsc" atom을 갖고 있다. 각각 해당 "stsc" atom을 분석해 보면 다음과 같은 결과를 얻는다.

< 첫 번째 stsc atom 분석 결과 (일부) >

< 두 번째 stsc atom 분석 결과 >

두번째 stsc atom 분석 결과 위와 같은 오류가 발생했다. 해당 코드 부분을 살펴 보면 다음과 같다.

즉, "stsc" atom을 분석하는 과정에서 numBlock의 크기가 비정상적으로 큰 값이 들어옴에 따라 발생한 것이다. 실제 해당 위치를 HexEditor로 확인해 보면 다음과 같다.

따라서 해당 취약점은 다음 2가지 관점에서 판단할 수 있다.

  • numBlock 의 크기가 비정상적으로 큰 경우 ( 파일 크기보다 numBlock에 의한 크기가 더 큰 경우 )
    • 샘플 : 0xC0000003
  • BlockData가 일정한 형태로 반복되는 경우
    • 샘플 : BlockData
      • first_chunk : 0x41D00011
      • sample_per_chunk : 0x41D00010
      • sample_desc_index : 0x41D00010

< Patch > ( 참조 : Fix integer overflow during MP4 atom processing )

실제 MP4 관련 stagefright 의 패치된 코드를 확인해 보면 numBlock의 크기가 전체 파일 offset과 비교하는 구문을 추가함으로써 해당 문제를 해결했다.

0x90. Bug

Bug 1. Error import mp4

github에서 제공하고 있는 "StageFright CVE-2015-1538 #1" 을 콘솔에서 실행하면 다음과 같은 오류가 출력된다.

mp4 파일을 import 할 수 없어서 발생하는 오류이나 별도의 mp4 라이브러리를 참조하는 것이 아닌 자신을 별도의 모듈처럼 인식해 인스턴스를 할당하기 위함이었다. 실제 mp4에서 호출하는 create_mp4( ) 함수는 모듈내에 존재하는 함수인 것이다. 따라서 파이썬 파일의 이름을 mp4로 변경 후 실행하면 정상 실행이 된다.

0x99. 참고

댓글

가장 많이 본 글