패스워드 버그 발견 그리고 질문
본문
회원가입시 패스워드가 123456789 agads445 등 대문자가 없는 보안이 취약한 패스워드일 경우
select password('1234567890') 의 값이 NULL로 되고
NULL된 상태에서 회원가입이 완성 됩니다.
회원가입 직후엔 세션으로 로그인 상태가 유지되지만 로그아웃 하면 두번 다시 로그인 못합니다.
그누보드 5.3.1.6
CentOS Linux release 7.5.1804 (Core)
nginx version: nginx/1.15.3
PHP 7.1.22 (cli) (built: Sep 12 2018 07:22:13) ( NTS )
mysql Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using EditLine wrapper
그리고 질문
g5_config테블 cf_icode_pw에 관리자 패스워드가 암호화 되지 않은 상태로 보존되여 있는데 보안상....취약점 아니세요?
답변 3
PHP 7.1.22 와 mysql 14.14 면 mariaDB 인거겠군요.
php 문서를 하나 만들어서 select password('1234567890') 했을때 어떤 값이 찍히는지 확인해보세요.
그누보드 로직에는 mysql 암호화 함수를 사용하는거라서,
입력된 비밀번호 취약여부를 확인하는 로직은 없는것으로 알고 있습니다.
회원가입로직 중간 중간에 echo 문을 찍어서 어떤 값이 넘어가는지 확인해보세요.
그누보드 문제가 아니라 설치된 PHP 와 mysql 설정의 문제는 아닐까요?
icode 와 문자전송하는 로직에 패스워드를 보내야하기때문에 비암호화 형태로 저장하고 있을껍니다.
icode 가 아이디+패스워드 형식이 아닌 토큰 방식으로도 서비스를 지원하지만
그누보드는 호환성을 유지하려고 그것을 도입하지 않는듯 하네요.
버그신고는 https://sir.kr/cm_bug?sca=그누보드5 에서...
말하다싶이 보안이 취약한 패스워드 일때 이하소스 $row = sql_fetch(" select password('$value') as pass "); 의 값이 NULL 입니다. 위에 데모도 참고로하시고요....
function sql_password($value)
{
// mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
// mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
$row = sql_fetch(" select password('$value') as pass ");
return $row['pass'];
}
>mysql 의 보안강화로 인한 현상이겠죠.
네 맞는 말씀입니다.
다음번 버전에 조치를 대겠답니다.