[하루한줄] 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과 같은 취약점으로 헤더 길이를 조작해 트리거할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.