Month of PHP Bugs - 29일차 보안 정보

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


( 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 을 포함한 하위 버전에 해당되며, 현재로선 별다른 대처 방안이 없으므로 당분간 사용자와 시스템에 대한 모니터링을 강화하시는 것이 좋겠습니다.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://swbae.egloos.com/tb/1537446 [도움말]

덧글

덧글 입력 영역