[하루한줄] CVE-2021-27219: GLib의 integer overflow 취약점

URL

GHSL-2021-045: Integer Overflow in GLib - CVE-2021-27219

Target

테스트된 버전

  • Ubuntu 20.04 (x86_64) : 버전 2.64.6-1
  • CentOS Stream (x86_64) : 버전 2.56.4-9
  • archlinux (x86_64) : 2.66.4-2

Explain

64비트 플랫폼의 glib에서 암시적 형 변환으로 인한 integer overflow 취약점이 발견되어 세부 정보가 공개되었습니다.

취약점은 데이터로부터 GBytes 객체를 생성하는 g_bytes_new() 함수에 존재합니다.

GBytes * g_bytes_new (gconstpointer data, gsize size)
{
  g_return_val_if_fail (data != NULL || size == 0, NULL);

	//integer overflow
  return g_bytes_new_take(g_memdup (data, size), size);  
}

64bit 자료형인 gsizesizeg_memdup 함수의 두 번째 인자로 사용합니다.

//g_memdup 함수 원형
g_memdup(gconstpointer mem, guint byte_size);

그러나 g_memdup은 해당 인자를 32bit 자료형 guint으로 받아 암시적 형 변환이 이루어집니다. 이로 인해 훨씬 작은 데이터 버퍼를 포함하는 GBytes 객체를 반환하고 이는 memory corruption 취약점으로 이어질 수 있습니다.

해당 취약점의 패치 히스토리는 https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1926/commits 에서 확인 가능합니다.