본문 바로가기
프로그래밍/php

PHP 애플리케이션의 보안 취약성 (CVE-2024-2961) 대응 방법

by 마루의 일상 2024. 7. 2.
728x90
반응형

최근 glibc 2.39 및 그 이전 버전에서 ISO-2022-CN-EXT 문자 세트로의 문자 세트 변환 중 발생하는 버퍼 오버플로우 취약성(CVE-2024-2961)이 발견되었습니다. 이 취약성은 원격 코드 실행을 초래할 수 있습니다.

이 glibc 버퍼 오버플로우는 PHP를 통해 악용될 수 있습니다. PHP는 iconv 확장을 통해 glibc의 문자 세트 변환 기능을 노출합니다. 이 버그는 PHP 엔진 컨텍스트에서 악용 가능하지만, 버그 자체는 PHP에 있지 않습니다. 또한 직접적으로 원격에서 악용될 수는 없습니다.

PHP 애플리케이션이 취약한 경우

PHP 애플리케이션이 취약해질 수 있는 조건은 다음과 같습니다:

  • 애플리케이션이 사용자로부터 입력받은 문자 세트를 사용하여 iconv 함수를 호출하거나 필터링하는 경우.

취약하지 않은 경우

다음 중 하나라도 해당된다면 애플리케이션은 취약하지 않습니다:

  1. 배포판에서 제공하는 glibc 보안 업데이트가 설치된 경우.
  2. iconv 확장이 로드되지 않은 경우.
  3. 취약한 문자 세트가 gconv-modules-extra.conf 파일에서 제거된 경우.
  4. 애플리케이션이 iconv에 특정 문자 세트만을 허용하는 경우.

좋은 보안 관행

사용자 입력을 통해 문자 세트를 받는 경우, 애플리케이션이 명시적으로 허용한 문자 세트만을 받아들이는 것이 좋은 보안 관행입니다. 예를 들어, allow-list와 array_search() 함수를 사용하여 문자 인코딩을 확인한 후 iconv에 전달하는 방법이 있습니다:

array_search($charset, $allowed_list, true);

오해를 불러일으키는 보고서들

"PHP의 iconv 취약성 완화 방법 (CVE-2024-2961)" 또는 "PHP가 공격받고 있다"와 같은 제목의 보고서들이 많습니다. 그러나 이 버그는 PHP 자체의 문제가 아닙니다.

취약성 해결 방법

PHP 애플리케이션이 취약한 경우, 먼저 사용하는 Linux 배포판에서 이미 패치된 glibc 버전을 제공하고 있는지 확인하는 것이 중요합니다. Debian, CentOS 등 여러 배포판에서는 이미 패치를 제공하고 있으며, 가능한 빨리 업데이트하는 것이 좋습니다.

glibc의 업데이트가 제공되면, 해당 패키지를 업데이트하는 것만으로도 문제를 해결할 수 있습니다. PHP는 동적으로 링크된 라이브러리이기 때문에 PHP 자체를 업데이트할 필요는 없습니다.

만약 사용 중인 Linux 배포판에서 패치된 glibc 버전을 제공하지 않는다면, 이 문제에 대한 공식적인 해결책은 없습니다. 그러나 GLIBC 취약성 해결 방법에서는 glibc에서 문제의 문자 세트를 제거하는 방법을 설명하고 있습니다. 시스템의 모든 gconv-modules-extra.conf 파일에 대해 이 절차를 수행해야 합니다.

Windows에서 PHP를 사용하는 사용자는 이 취약성의 영향을 받지 않습니다.

728x90
반응형