[하루한줄] CVE-2021-21784: Accusoft ImageGear의 OOB write를 통한 임의 코드 실행 취약점

URL

Accusoft ImageGear JPG format SOF marker processing out-of-bounds write vulnerability

Target

  • Accusoft ImageGear ≤ 19.8

Explain

Accusoft의 ImageGear 라이브러리에서 JPG 포맷의 파일을 처리할 때 발생하는 OOB write 취약점을 통한 임의 코드 실행 취약점의 세부 정보가 공개되었습니다. ImageGear는 이미지 변환, 생성, 편집, 주석 등을 제공하는 이미지 툴킷이며 DICOM, PDF, Microsoft Office 등 100개 이상의 형식을 지원합니다.

취약점은 JPG파일 로드 과정의 handle_color_channel_with_high_precision 함수에서 발생합니다.

void handle_color_channel_with_high_precision(undefined4 param_1,int width,short *param_3,
                                short *param_,short *param_5,short *raster_buffer,int param_7,int param_8)
	{
   [...]  
	if (0 < width) {
		raster_buffer = raster_buffer + 2;
		do {
...
				if (short_3 < 0){
					short_3 = 0;
				}
				else {
					if (0xfff < short_3)
						short_3 = 0xfff;
				}
				raster_buffer[-2] = (short)short_3;
				if (short_2 < 0){
					short_2 = 0;
				}
				else {
					if (0xfff < short_2)
						short_2 = 0xfff;
				}
				raster_buffer[-1] = (short)short_2;
				if (short_1 < 0){
					short_1 = 0;
				}
				else {
					if (0xfff < short_1)
						short_1 = 0xfff;
				}
				*raster_buffer = (short)short_1;      
...
				raster_buffer = raster_buffer + 3;
				width = width + -1;
			} while (width != 0);
		}
		return;
	}

취약점이 발생하는 함수는 width의 크기만큼 반복문을 돌며 raster_buffer에 복사합니다. width는 JPG 파일의 헤더 요소인 SOF(Start Of Frame, JPG 파일의 크기 및 샘플링 정보) 마커에서 가져오는데, raster_bufferwidth의 크기 검사를 하지 않습니다. 따라서 해커가 SOF 마커를 조작해 raster_buffer의 크기가 SOF 마커에서 파싱 한 width에 3을 곱한 값보다 작으면 buffer overflow로 인해 범위를 벗어난 쓰기가 가능하며 원격 코드 실행으로 이어질 수 있습니다.