[하루한줄] 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
를 호출해 매핑된 메모리를 파싱하는데, 아래와 같은 과정에서 취약점을 트리거할 수 있습니다.
__pilot_parsing_ncp
에서temp_IFM_av
버퍼의 크기는 사용자 영역 공유 메모리에서 가져온ncp-> memory_vector_cnt
을 사용해 먼저 계산됩니다.- TOCTOU 버그를 트리거해 사용자 영역에서
ncp-> memory_vector_cnt
의 값을 더 큰 값으로 변경합니다. - 이후
__second_parsing_ncp
에서ncp-> memory_vector_cnt
를 다시 읽어temp_IFM_av
버퍼에 복사합니다. - 2단계에서 큰 값으로 변경된
ncp-> memory_vector_cnt
로 인해temp_IFM_av
버퍼의 사이즈보다 더 많은 값을 복사하게 되고 이때 bounds check를 하지 않아 heap buffer overflow가 발생합니다.
해당 취약점을 이용하면 커널 스레드 스택을 포함해 vmap의 커널 버퍼 범위를 벗어나 데이터를 쓸 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.