gnuboard/gnuboard5
@ master
치명적 취약점이 발견되었습니다 — 즉시 조치가 필요합니다.
총 47건 — CRITICAL 1건 · HIGH 14건 · MEDIUM 32건
주요 발견 유형
외 3개 유형
프로젝트 구조
0개 엔드포인트 · 자동 추출시퀀스 다이어그램 (Mermaid)
sequenceDiagram actor User participant API User->>API: HTTP 요청 API-->>User: 응답
유스케이스 다이어그램 (Mermaid)
flowchart LR A0["👤 User"] A1["👤 Admin"] A0 --> U0(["코드 분석"])
내 코드 이슈 (47건)
직접 작성/수정한 코드에서 발견된 이슈입니다 — 코드 수정으로 해결합니다.
관리자 입력값($admin_id, $admin_pass, $admin_name, $admin_email)이 SQL 쿼리에 직접 삽입됩니다. $admin_name과 $admin_email은 sql_real_escape_string으로 escape되지만, $admin_id와 $admin_pass는 escape되지 않은 채 INSERT 쿼리에 사용됩니다(라인 93 이후의 미완성 쿼리). 이는 SQL 인젝션을 야기할 수 있습니다.
(LLM review)
→ 모든 사용자 입력값에 대해 sql_real_escape_string을 적용하거나, 미리 준비된 명령문(prepared statements)을 사용하세요. $admin_id와 $admin_pass도 라인 87-88과 같이 escape 처리하세요.
동적 코드 실행(eval / new Function).
//submenu = eval(name+".style");
→ 상수가 아닌 입력에는 eval/Function을 사용하지 마세요 — 코드 인젝션을 허용합니다.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
$("select[name=" + key + "]").val(data[key]);→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
$("select[name="+key+"]").val(data[key]);→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
location.href = 'form_group_update.php?w='+ fg_no +'&fg_no=' + fg_no;
→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
location.href = "./form_update.php?w=d&fo_no=" + fo_no + "&page=<?php echo $page?>&fg_no=<?php echo $fg_no?>&st=<?php echo get_text($st); ?>&sv=<?php echo get_text($sv); ?>&token=<?php echo $token; ?>
→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
location.href = "./form_multi_update.php?w=" + sel.value + "&ck_no=" + ck_no;
→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
동적 코드 실행(eval / new Function).
eval("\$file = \"$file\";");→ 상수가 아닌 입력에는 eval/Function을 사용하지 마세요 — 코드 인젝션을 허용합니다.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
location.href = 'num_group_update.php?mw=d&bg_no=' + bg_no;
→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.
location.href = 'num_group_update.php?mw=empty&bg_no=' + bg_no;
→ 문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.
리터럴 문자열에 하드코딩된 자격증명이 할당되어 있습니다.
$clientSecret = '***redacted***';
→ 시크릿은 소스가 아닌 환경변수/시크릿 스토어에서 불러오세요. 실제 값이라면 폐기하세요.
동적 코드 실행(eval / new Function).
return eval('return array(' . $contents . ');');→ 상수가 아닌 입력에는 eval/Function을 사용하지 마세요 — 코드 인젝션을 허용합니다.
관리자 비밀번호($admin_pass)에 대한 형식 검증이 없습니다. 이메일과 아이디는 검증되지만 비밀번호는 raw로 처리되므로 약한 비밀번호가 저장될 수 있습니다.
(LLM review)
→ 비밀번호 강도 검증을 추가하세요(최소 길이, 복잡성 요구사항 등). 또한 비밀번호는 저장 전에 해싱되어야 합니다.
쿼리 문자열에 사용자 입력값이 직접 삽입됩니다: sql = " select count(*) as cnt from {$g5['auth_table']} where mb_id = '{$member['mb_id']}' ". $member['mb_id']가 검증 없이 사용되면 SQL 인젝션이 가능합니다.
(LLM review)
→ prepared statement를 사용하거나 사용자 입력값을 항상 escape 처리하세요. 또한 $member['mb_id']가 현재 로그인한 사용자의 ID인지 검증하세요.
사용자 제어 파라미터 $skin_dir을 기반으로 파일을 포함합니다(라인 57-58). 경로 검증이 부족하면 경로 탐색(path traversal) 공격으로 임의의 파일을 포함할 수 있습니다.
(LLM review)
→ $skin_dir 파라미터에 대해 화이트리스트 검증을 추가하세요. basename() 사용 및 '../' 패턴 검증으로 경로 탐색을 방지하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$ckey = function_exists('get_email_cert_key') ? get_email_cert_key($mb_id, $mb['mb_datetime']) : md5($mb['mb_ip'].$mb['mb_datetime']);→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* 2. MD5 해쉬암호화 (수정하지 마세요) - BEGIN
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* MD5 해쉬암호화는 거래 위변조를 막기위한 방법입니다.
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* MD5 해쉬데이터 암호화 검증을 위해
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$LGD_HASHDATA = md5($LGD_MID.$LGD_BUYERSSN.$LGD_TIMESTAMP.$LGD_MERTKEY);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$payReqMap['LGD_HASHDATA'] = $LGD_HASHDATA; // MD5 해쉬암호값
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* 2. MD5 해쉬암호화 (수정하지 마세요) - END
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$mb_dupinfo = md5($ci.$ci);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$md5_cert_no = md5($cert_no);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$hash_data = md5($user_name.$cert_type.$birth_day.$phone_no.$md5_cert_no);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$md5_ci = md5($ci.$ci);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$md5_cert_no = md5($cert_no);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
$hash_data = md5($user_name.$cert_type.$birth_day.$phone_no.$md5_cert_no);
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* Needs to return the name of the Signature Method (ie HMAC-SHA1)
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* - Chapter 9.2 ("HMAC-SHA1")→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return "HMAC-SHA1";
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return base64_encode(hash_hmac('sha1', $base_string, $key, true));→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* - Chapter 9.3 ("RSA-SHA1")→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return "RSA-SHA1";
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return md5($mt . $rand); // md5s look nicer than numbers
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* Needs to return the name of the Signature Method (ie HMAC-SHA1)
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* - Chapter 9.2 ("HMAC-SHA1")→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return "HMAC-SHA1";
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return base64_encode(hash_hmac('sha1', $base_string, $key, true));→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
* - Chapter 9.3 ("RSA-SHA1")→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return "RSA-SHA1";
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.
return md5($mt . $rand); // md5s look nicer than numbers
→ 비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.
데이터베이스 계정 정보(host, user, password, db)가 POST 파라미터로 전송되고 처리됩니다. HTTPS를 사용하지 않으면 평문으로 전송될 수 있습니다.
(LLM review)
→ 설치 스크립트는 HTTPS를 강제하고, 설치 후 install_db.php 파일을 삭제하세요. 개발 환경에서는 DB 설정 정보를 환경 변수로 관리하세요.