기본 콘텐츠로 건너뛰기

typos

typos

오탈자

도전 1

whlie(*src && left)
{
	*dst++=*src++;
	
	if (left = 0)
		die("badlen");

	left--;
}

if 조건에 관계 연산자 == 대신 대입 연산자 =가 설정되어 있다. 이로 인해 left이 0으로 설정되어도 while 구문을 벗어나지 못하고 left 값을 감소시키며 반복 수행한다.

수정 코드


if (left == 0)

도전 2

int f;
f=get_security_flags(username);

if(f = FLAG_AUTHENTICATED)
{
	return LOGIN_OK;
}

return LOGIN_FAILED;

if 조건에 관계 연산자 == 대신 대입 연산자 =가 설정되어 있어 get_security_flags 결과와 무관하게 로그인 성공을 반환하고 있다.

수정 코드

if(f == FLAG_AUTHENTICATED)

도전 3

for (i==5; src[i] && i<10; i++)
{
	dst[i-5]=src[i];
}

for 조건에 대입 연산자 = 대신에 관계 연산자 ==가 설정되어 있어 i가 10보다 작은 값일 때, 버퍼를 벗어날 위험이 있다.

수정 코드

for (i=5; src[i] && i<10; i++)

도전 4

if (get_string(src) && check_for_overflow(src) & copy_string(dst, src))
	printf("string safely copied\n");

논리 연산자 && 대신에 비트 연산자 &가 조건으로 설정되어 있어 문자열 복사 작업 실패 시에도 성공 문구를 출력하고 있다.

수정 코드

if (get_string(src) && check_for_overflow(src) && copy_string(dst, src))

도전 5

if (len > 0 && len <= sizeof(dst));
	memcpy(dst, src, len);

if; 이 존재하여 길이 검사 결과와 무관하게 memcpy를 실행한다.

수정 코드

if (len > 0 && len <= sizeof(dst))

도전 6

char buf[040];

snprintf(buf, 40, "%s", userinput);

숫자 앞에 0을 접두사로 사용하면 8진수로 인식되므로 의도한 것보다 작은 배열 공간 (buf[32])을 할당하게 된다.

수정 코드

char buf[40];

도전 7

if (len < 0 || len > sizeof(dst)) /* 길이 검사
	die("bad length!");

/* length ok */

memcpy(dst, src, len);

if 뒤 주석을 닫지 않아 길이 검사를 실패할 경우에만 memcpy를 실행한다.

수정 코드

if (len < 0 || len > sizeof(dst)) /* 길이 검사 */

도전 8

if (len > 0 && len <= sizeof(dst))
	copiedflag = 1;
	memcpy(dst, src, len);

if (!copiedflag)
	die("didn't copy");

괄호가 생략되어 있어 길이 검사 결과와 무관하게 memcpy가 실행된다.

수정 코드

if (len > 0 && len <= sizeof(dst))
{
	copiedflag = 1;
	memcpy(dst, src, len);
}

도전 9

if (!strncmp(src, "magicword", 9))
	// report_magic(1);

if (len < 0 || len > sizeof(dst))
	assert("bad length!");

/* length ok */
memcpy(dst, src, len);

if에서 ;를 생략했기 때문에 memcpy는 언제나 실행된다.

수정 코드

if (!strncmp(src, "magicword", 9))
	// report_magic(1);
	;

도전 10

l = msg_hdr.msg_len;
frag_off = msg_hdr.frag_off;
frag_len = msg_hdr.frag_len;
...
if (frag_len > (unsigned long)max)
{
	al=SSL_AD_ILLEGAL_PARAMETER;
	SSLerr(SSL_F_DTLSl_GET_MESSAGE_FRAGMENT, SSL_R_EXCESSIVE_MESSAGE_SIZE);
	goto f_err;
}

if (frag_len + s->init_num > (INT_MAX - DTLSl_HM_HEADER_LENGTH))
{
	al=SSL_AD_ILLEGAL_PARAMETER;
	SSLerr(SSL_F_DTLSl_GET_MESSAGE_FRAGMENT, SSL_R_EXCESSIVE_MESSAGE_SIZE);
	goto f_err;
}

if (frag_len & !BUF_MEM_grow_clean(s->init_buf, (int)frag_len + DTLSl_HM_HEADER_LENGTH + s->init_num))
{
	SSLerr(SSL_F_DTLSl_GET_MESSAGE_FRAGMENT, ERR_R_BUF_LIB);
	goto err;
}

if (s->dl->r_msg_hdr.frag_off == 0)
{
	s->s3->tmp.message_type = msg_hdr.type;
	s->dl->r_msg_hdr.type = msg_hdr.type;
	s->dl->r_msg_hdr.msg_len = 1;
	/* s->dl->r_msg_hdr.seq = seq_num; */
}

/* XDTLS: ressurect this when restart is in place */
s->state=stn;

/* next state (stn) */
p = (unsigned char *))s->init_buf->data;

if (frag_len > 0)
{
	i=s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, &p[s->init_num], frag_len, 0);
	/* XDTLS: fix this-message fragments cannot span multiple packets */

	if (i <= 0)
	{
		s->rwstate=SSL_READING;
		*ok = 0;
		return i;
	}
}
else
	i = 0;

길이 검사 중 하나에서 논리 연산자 &&를 사용해야 하는 곳에 비트 연산자 &를 사용하는 실수를 저질렀다.

수정 코드

if (frag_len && !BUF_MEM_grow_clean(s->init_buf, (int)frag_len + DTLSl_HM_HEADER_LENGTH + s->init_num))

이 블로그의 인기 게시물

데일 카네기 인간관계론 정리

Remove-Server-Header

응답 메시지 내 서버 버전 정보 제거 1. Apache 1) 조치 방법 “/etc/htpd/conf/httpd.conf” 파일 안에서 1. ServerTokens OS → ServerTokens Prod 2. ServerSignature On → ServerSignature Off 로 변경한 후 아파치를 재시작하면 헤더 값의 아파치 버전 정보 및 OS 정보를 제거할 수 있다. 2) 참고 URL http://zetawiki.com/wiki/CentOS_ 아파치_보안권장설정_ServerTokens_Prod,_ServerSignature_Off 2. IIS 1) 조치 방법 IIS 6.0 urlscan_setup 실행. 설치. \windows\system32\inetsrv\urlscan\urlscan.ini 파일을 열어 다음 수정(RemoveServerHeader=0 을 RemoveServerHeader=1 로 변경) 서비스에서 IIS Admin Service 재시작. IIS 7.0 IIS 관리자를 열고 관리하려는 수준으로 이동합니다. 기능 보기에서 HTTP 응답 헤더를 두 번 클릭합니다. HTTP 응답 헤더 페이지에서 제거할 헤더를 선택합니다. 작업 창에서 제거를 클릭하고 예를 클릭합니다. 2) 참고 URL IIS 6.0 : http://gonnie.tistory.com/entry/iis6- 응답헤더-감추기 IIS 7.0 : https://technet.microsoft.com/ko-kr/library/cc733102(v=ws.10).aspx 3. jetty 1) 조치 방법 “jetty.xml” 파일에서 jetty.send.server.version=false 설정 2) 참고 URL http://attenuated-perspicacity.blogspot.kr/2009/09/jetty-61x-hardening.html 4. Nginx ...

CVE-2017-11352

CVE-2017-11352 ImageMagick 에서 발생했던 CVE-2017-9144 취약점의 미흡한 조치로 인하여 동일한 취약점이 다시 발생되었다. 재 발생된 취약점 CVE-2017-11352은 coders/rle.c 에서 RLE 이미지에 대한 부적절한 EOF 처리가 원인이었다. EOF 란? 파일의 끝(End of File, EOF)으로 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타낸다. ImageMagick Github Page 에 들어가보면 해당 이슈를 상세히 확인할 수 있다. 부적절한 EOF 처리 원인은 소스 코드 수정 시 유사한 코드를 복사 붙여넣기 하는 과정에서 검증해야할 변수 명을 고치지 않고 그대로 적용해서 발생했다. operand=ReadBlobByte(image); if (opcode == EOF) ThrowRLEException(CorruptImageError, "UnexpectedEndOfFile" ); 이로 인해서 조치 완료된 줄 알았던 CVE-2017-9144 취약점은 CVE-2017-11352이라는 새로운 취약점 명으로 다시 조치 되었다. case SkipLinesOp: { operand=ReadBlobByte(image); - if (opcode == EOF) + if (operand == EOF) ThrowRLEException(CorruptImageError, "UnexpectedEndOfFile" ); if (opcode & 0x40 ) { operand=ReadBlobLSBSignedShort(image); - if (opcode == EOF) + if (operand == EO...