29일차 MOPB 취약점이 발표되었습니다.

( 29일차 취약점 리스트 )
37번째 취약점은 PHP 설계 상의 결함으로 인한 취약점입니다. PHP 는 함수의 인자로 reference 를 받아들이는데, 이 경우 함수를 호출한 후 의도적으로 에러를 발생시켜 reference 가 가리키는 메모리 공간이 아닌 다른 공간을 가리키도록 할 수 있다고 합니다. 원문에선 이 취약점을 이용해 iptcembed() 함수를 공략해 임의의 메모리 공간에 기록된 정보를 열람하는 시나리오를 보여주고 있습니다.
소스를 보시면 이해가 더 쉬울텐데요. iptcembed() 함수는 다음과 같은 코드로 이루어져 있습니다.
convert_to_string_ex() 나 convert_to_long_ex() 함수는 호출 과정에서 에러가 발생하도록 해커가 유도할 수 있습니다. 해커가 미리 에러 핸들러(error handler) 를 만들어놓았다면 제어가 에러 핸들러로 넘어가겠죠.
에러 핸들러 내에서 iptcdata 값을 int 형으로 타입 변환(cast)하고, iptcdata 값을 큰 값으로 바꾸면 임의의 메모리 공간을 가리키도록 할 수 있습니다.
해당 취약점은 PHP 4.4.6 을 포함한 하위 버전, PHP 5.2.1 을 포함한 하위 버전에 해당되며, 현재로선 별다른 대처 방안이 없으므로 당분간 사용자와 시스템에 대한 모니터링을 강화하시는 것이 좋겠습니다.

( 29일차 취약점 리스트 )
37번째 취약점은 PHP 설계 상의 결함으로 인한 취약점입니다. PHP 는 함수의 인자로 reference 를 받아들이는데, 이 경우 함수를 호출한 후 의도적으로 에러를 발생시켜 reference 가 가리키는 메모리 공간이 아닌 다른 공간을 가리키도록 할 수 있다고 합니다. 원문에선 이 취약점을 이용해 iptcembed() 함수를 공략해 임의의 메모리 공간에 기록된 정보를 열람하는 시나리오를 보여주고 있습니다.
소스를 보시면 이해가 더 쉬울텐데요. iptcembed() 함수는 다음과 같은 코드로 이루어져 있습니다.
if (zend_get_parameters_ex(3, &iptcdata, &jpeg_file, &spool_flag) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_string_ex(iptcdata);
convert_to_string_ex(jpeg_file);
convert_to_long_ex(spool_flag);
spool = Z_LVAL_PP(spool_flag);
convert_to_string_ex() 나 convert_to_long_ex() 함수는 호출 과정에서 에러가 발생하도록 해커가 유도할 수 있습니다. 해커가 미리 에러 핸들러(error handler) 를 만들어놓았다면 제어가 에러 핸들러로 넘어가겠죠.
에러 핸들러 내에서 iptcdata 값을 int 형으로 타입 변환(cast)하고, iptcdata 값을 큰 값으로 바꾸면 임의의 메모리 공간을 가리키도록 할 수 있습니다.
해당 취약점은 PHP 4.4.6 을 포함한 하위 버전, PHP 5.2.1 을 포함한 하위 버전에 해당되며, 현재로선 별다른 대처 방안이 없으므로 당분간 사용자와 시스템에 대한 모니터링을 강화하시는 것이 좋겠습니다.



덧글