작성자 : coyBum (coyBum@a3security.com)
▷ 편집자 : 니키 (ngnicky@a3sc.co.kr)

[A3AID07-02]

Local Inclusion (LFI using PHP injected JPG)취약점 보안 권고안

 


권고문 작성일 : 2007. 3. 28

최초 발표일 : 2007. 1. 29

위험등급:

현재 상태(패치 여부) : 미패치

벤더: PHP


대상 시스템 : PHP all

 
취약점 개요:

2007년 1월 29일, PHP 환경에서 Local inclusion취약점이 발견되었다.
이 취약점은 PHP에서 local include 파일 내에 php코드를 삽입하여 공격자의 원하는 코드를 실행시킬 수 있고 시스템의 정보를 얻거나 시스템이 침해를 당할 수 있다. 업로드 확장자를 필터링하는 환경에서 실제 jpg나 gif파일에 php코드를 삽입하여 그림파일이 업로드 가능한 환경에서도 성공적으로 공격을 실행할 수가 있다
본 보안 권고안은 Fedora 기반의 linux와 PHP 4.2.2에서 테스트 및 분석된 결과이다.


심각도 및 취약점 확인 :

취약점 영향

Local Inclusion 취약점 위험도

시스템정보 획득 및 침해




취약점 세부 분석 :

PHP 에서 include()문은 특정 파일을 include하고 적용 시키는 기능을 한다. 이 local include 취약점을 이용하여 서버가 침해를 당할 수 있다. 일반적으로 jpg, gif등 그림파일만 업로드가 가능하고 php나 html등 다른 확장자를 필터링하는 게시판에서 jpg, gif등 업로드가 가능한 그림파일내에 php코드를 삽입하여 local include 취약점을 이용하여 공격할 수 있다.

http://example.com/?page=faq.txt 와 같이 local file inclusion이 되는 사이트에서 php코드를 삽입하여 업로드한 gif, jpg을 inclusion하면 공격자가 삽입할 수 있는 어떠한 코드도 실행 가능하다. 
 




2. 공격 분석
현재 해당 취약점을 이용하여 공격 가능한 그림파일 edit바이너리가 공개된 상태이고 이번 테스트는 jpg edit할 수 있는 테스트 코드를 작성하여 직접 공격분석을 시도해 보았다.

다음 그림은 jpg 파일내에 php코드를 삽입할 수 있는 코드이다.

 



jpg파일에 php코드를 삽입할 수 있는 코드를 이용하여 jpg그림파일 내에 php 코드를 삽입하게 된다. 



JFIF파일의 Frame header와 Scan header앞에 comment를 넣게 된다. 코드 삽입을 하게 되면 다음과 같은 위치에 삽입이 되고 그림파일자체는 깨지지 않고 원상태를 유지하여 절대경로를 이용하거나 삽입된 게시판에서 보게 되면 업로드 한 그림을 볼 수 있다. 
 



다음은 정상적으로 업로드 된 사진 파일을 확인하는 화면이다.


업로드 한 jpg파일을 local file inclusion이 되는 사이트에서 실제 실행해서 dir 을 확인해 보면 dir이 실행되는 것을 확인할 수 있다. (공격자가 다른 코드도 삽입을 하여 실행하면 원하는 코드를 실행할 수 있다. )

다음 그림은 일반 사용자 권한으로 web shell코드를 이용하여 dir을 실행한 것이다.





대응 방안

 1. 보안 대책
소스레벨에서 include()나 require() 계열 함수를 사용할 때 변수가 반드시 초기화 되어
사용되고, 사용자가 변경할 수 없는지 재차 확인하는 것이 필요하다.

2. 관련 사이트
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같다.
 http://www.w3.org/Graphics/JPEG/itu-t81.pdf
 http://home.cfl.rr.com/maderik/edjpgcom/

Copyright(c) 1998-2007 A3 Security Consulting.,LTD



※ 현재 ㈜에이쓰리시큐리티컨설팅에서 테스트 및 분석 중에 있으며, 이 문서는 계속 업데이트될 것입니다. 본 문서는 보안취약점으로 인한 피해를 최소화하는 데 도움이 되고자 작성되었으나, 본 문서에 포함된 대응방안의 유효성이나 기타 예상치 못한 시스템의 오작동 발생에 대하여서는 ㈜에이쓰리시큐리티컨설팅에서는 일체의 책임을 지지 아니합니다.