[하루한줄] Samsung Neural Processing Unit memory corruption in shared memory parsing

URL

Samsung NPU (Neural Processing Unit) memory corruption in shared memory parsing

Target

Samsung’s Exynos-based devices (including Neural Processing Unit)

Explain

삼성의 엑시노스 모바일 프로세서에 포함된 NPU(Neural Processing Unit)는 머신러닝 연산에 사용됩니다. 이러한 NPU의 Neural Network Feature Maps를 패키징하는데 사용되는 NCP 구조체의 입력 값 검증을 하지 않아 memory corruption이 발생하는 취약점이 발견되었습니다.

Convolution Neural Network Feature Maps(IFM / OFM)을 패키징하는 npu_session_s_graph 에서는 먼저__get_session_info 를 호출해 사용자 영역 ION 메모리 버퍼를 커널 메모리에 매핑합니다.

ION - process 간 메모리 공유를 위한 메모리 할당자

그리고 __config_sesison_info를 호출해 매핑된 메모리를 파싱하는데, 아래와 같은 과정에서 취약점을 트리거할 수 있습니다.

  1. __pilot_parsing_ncp 에서 temp_IFM_av 버퍼의 크기는 사용자 영역 공유 메모리에서 가져온 ncp-> memory_vector_cnt 을 사용해 먼저 계산됩니다.
  2. TOCTOU 버그를 트리거해 사용자 영역에서 ncp-> memory_vector_cnt 의 값을 더 큰 값으로 변경합니다.
  3. 이후 __second_parsing_ncp 에서 ncp-> memory_vector_cnt 를 다시 읽어 temp_IFM_av 버퍼에 복사합니다.
  4. 2단계에서 큰 값으로 변경된 ncp-> memory_vector_cnt 로 인해 temp_IFM_av 버퍼의 사이즈보다 더 많은 값을 복사하게 되고 이때 bounds check를 하지 않아 heap buffer overflow가 발생합니다.

해당 취약점을 이용하면 커널 스레드 스택을 포함해 vmap의 커널 버퍼 범위를 벗어나 데이터를 쓸 수 있습니다.