최근 glibc 2.39 및 그 이전 버전에서 ISO-2022-CN-EXT 문자 세트로의 문자 세트 변환 중 발생하는 버퍼 오버플로우 취약성(CVE-2024-2961)이 발견되었습니다. 이 취약성은 원격 코드 실행을 초래할 수 있습니다.
이 glibc 버퍼 오버플로우는 PHP를 통해 악용될 수 있습니다. PHP는 iconv 확장을 통해 glibc의 문자 세트 변환 기능을 노출합니다. 이 버그는 PHP 엔진 컨텍스트에서 악용 가능하지만, 버그 자체는 PHP에 있지 않습니다. 또한 직접적으로 원격에서 악용될 수는 없습니다.
PHP 애플리케이션이 취약한 경우
PHP 애플리케이션이 취약해질 수 있는 조건은 다음과 같습니다:
- 애플리케이션이 사용자로부터 입력받은 문자 세트를 사용하여 iconv 함수를 호출하거나 필터링하는 경우.
취약하지 않은 경우
다음 중 하나라도 해당된다면 애플리케이션은 취약하지 않습니다:
- 배포판에서 제공하는 glibc 보안 업데이트가 설치된 경우.
- iconv 확장이 로드되지 않은 경우.
- 취약한 문자 세트가 gconv-modules-extra.conf 파일에서 제거된 경우.
- 애플리케이션이 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를 사용하는 사용자는 이 취약성의 영향을 받지 않습니다.
'프로그래밍 > php' 카테고리의 다른 글
PHP checkdate 함수란? (0) | 2024.07.05 |
---|---|
PHP의 date() 함수: 포맷 문자열 총정리 (0) | 2024.07.04 |
이미지 파일을 base64로 변환하여 HTML에 삽입하는 방법: 성능 향상을 위한 팁 (0) | 2023.04.22 |
PHP FTP 이미지전송 예제 ftp_connect, ssh2_connect 사용할 수 없을때 (0) | 2023.04.07 |
앞자리 01 02 03 에서 0를 제거 하고 싶을 때 intval사용 (0) | 2021.08.23 |