CVE-2017-12425
Varnish HTTP Cache는 HTTP Reverse Proxy로 알려진 웹 어플리케이션 accelerator이다. 최근 Varnish HTTP Cache에서 DoS(Denial-of-Service) 취약점 CVE-2017-12425이 보고되었다.
Bug
Versions affected
- 4.0.1 to 4.0.4
- 4.1.0 to 4.1.7
- 5.0.0
- 5.1.0 to 5.1.2
Varnish VCL snippets 사용 시 Transfer-encoding: chunked
를 시도한 클라이언트의 요청 본문 값을 더 크게 전송할 경우 Varnish 데몬이 재시작되는 일이 발생했다. 일반적으로는 chunk
요청을 하지 않지만 B2B 어플리케이션이나 API와 같은 분야에서는 사용되는 경우들이 있다. 기존에 존재한 if 검증 로직은 아래와 같다. 음수 값(64-bit signed integer보다 큰 사이즈로 표현됨)을 이용하여 DoS 공격이 발생하게 된다.
cl = (ssize_t) cll;
if ((uintmax_t) cl! = cll)
실제 요청 값이 큰 값으로 위조된 것이 아닌 지 확인하는 로직이 존재했지만, 음수에 대한 조건이 누락되어 DoS공격이 발생했다.
참고 : Github Issue page
Fix
0보다 작을 경우에 대한 조건을 추가하여 조치완료된 것을 확인할 수 있다.
if (q == NULL || *q != '\0')
ERR("chunked header number syntax");
cl = (ssize_t)cll;
- if((uintmax_t)cl != cll)
+ if (cl < 0 || (uintmax_t)cl != cll)
ERR("bogusly large chunk size");
*priv = cl;
참고 : Github Commit Page