[하루한줄] CVE-2024-49415: 삼성 스마트폰의 OOB Write로 인한 Zero-Click RCE

URL

Target

  • SAMSUNG libsaped.so < SMR-2024 Release 1
    • Galaxy S24/S23

Explain

Android 12, 13, 14 버전의 삼성 모바일 디바이스에서 Zero-Click RCE로 악용될 가능성이 있는 OOB Write 취약점이 발견되어 관련 정보가 공개되었습니다.

취약점은 Monkey’s Audio(APE) 파일의 디코더인 libsaped.sosaped_rec 함수에 존재합니다.

Monkey’s Audio: 무손실 오디오 데이터 압축을 위한 알고리즘 및 파일 형식으로, 여러 플랫폼의 미디어 플레이어에서 지원함.
출처 : https://en.wikipedia.org/wiki/Monkey's_Audio

아래는 이해를 돕기 위한 FFmpeg의 APE 파일 구조체 정보이며 취약한 제품의 APE 파일 구조체 선언과는 상이할 수 있습니다.

typedef struct APEContext {
    /* Derived fields */
    uint32_t junklength;
    uint32_t firstframe;
    uint32_t totalsamples;
    int currentframe;
    APEFrame *frames;

    /* Info from Descriptor Block */
    int16_t fileversion;
    int16_t padding1;
    uint32_t descriptorlength;
    uint32_t headerlength;
    uint32_t seektablelength;
    uint32_t wavheaderlength;
    uint32_t audiodatalength;
    uint32_t audiodatalength_high;
    uint32_t wavtaillength;
    uint8_t md5[16];

    /* Info from Header Block */
    uint16_t compressiontype;
    uint16_t formatflags;
    uint32_t blocksperframe;
    uint32_t finalframeblocks;
    uint32_t totalframes;
    uint16_t bps;
    uint16_t channels;
    uint32_t samplerate;
} APEContext;

출처:
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/ape.c
https://ffmpeg.org/doxygen/trunk/structAPEContext.html

samsung.software.media.c2 서비스는 미디어 스트리밍을 위해 dmabuf0x120000 고정 크기로 할당하고 디코더는 APE 파일의 Header Block 중 blocksperframe 필드를 앞서 할당된 dmabuf로 복사합니다.

디코더는 blocksperframe의 최대값을 0x120000로 제한했지만, bytes per sample이 24인 경우 최대 3*blocksperframe까지 복사할 수 있어 dmabuf를 오버플로우할 수 있습니다.

취약한 기기는 Rich Communication Services(RCS)가 기본적으로 활성화되어 있어 ape 파일이 포함된 RCS 음성 메시지를 전송하면 텍스트 변환 서비스가 오디오를 디코딩 하는 과정에서 유저 상호작용 없이 취약점 트리거가 가능합니다.

Reference



본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.