[하루한줄] CVE-2021-22992: BIG-IP ASM의 stack buffer overflow 취약점

URL

F5 Big IP - ASM stack-based buffer overflow in is_hdr_criteria_matches

Target

  • BIG‑IP Application Security Manager

Explain

Google project zero가 F5사의 웹 애플리케이션 방화벽(WAF) 솔루션인 BIG-IP ASM에서 발견한 stack 기반 buffer overflow 취약점의 세부 정보를 공개하였습니다.

BIG-IP ASM이 웹 방화벽의 기능을 제공하기 위해서는 response 헤더를 분석해야 합니다. 백엔드에서 반환된 모든 HTTP 헤더가 is_hdr_criteria_matches 함수에 전달되는데, 해당 함수에 취약점이 존재합니다.

01  uint32_t nlen;
02  uint32_t vlen;
03  char buf [8264];
04 
05  nlen = 8192;
06  if (hdr->nlen <= 8192)
07    nlen = hdr->nlen; 
08  extract_header_item (.., .., .., nlen, buf); 
09  vlen = hdr->vlen;
10  buf[nlen] = ':';
11  buf[nlen + 1] = ' ';
12  if (8190-nlen <= vlen) 
13   	vlen = 8190-nlen;
14  extract_header_item (.., .., .., vlen, &buf[nlen + 2]); 
15  len = nlen + vlen + 2;
16  buf[len] = 0;

HTTP 헤더 이름의 길이를 최대 8192까지 nlen에 저장합니다. 이후 구분자 : 및 공백을 추가한 뒤 12번째 줄 if (8190-nlen <= vlen) 조건문에서 헤더 길이를 제한합니다. 그러나 nlen의 길이가 8190보다 클 경우 8190-nlen에서 unsigned로의 암시적 형 변환으로 인해 underflow 되어 UINT_MAX에 가까운 결과가 됩니다. 결과적으로 헤더 길이 제한에 실패하고 extract_header_item 함수에서 stack buffer overflow가 발생해 원격 코드 실행으로 이어집니다.

해당 취약점은 Request smuggling 또는 HTTP header injection과 같은 취약점으로 헤더 길이를 조작해 트리거할 수 있습니다.