← WhiteHat Code샘플 리포트 목록
샘플 리포트 — 공개 오픈소스 저장소를 실제로 스캔한 결과입니다

gnuboard/g7

@ main

gnuboard/g7@ main300 / 6215 파일 스캔 (일부)
높음

심각한 취약점이 발견되었습니다 — 우선적인 조치를 권장합니다.

34건 — HIGH 27건 · MEDIUM 7건

주요 발견 유형

취약한 의존성10
Missing Authorization Check7
Insecure CORS Configuration3
Insecure Default Configuration3
incomplete_access_control2
Information Disclosure2

6개 유형

프로젝트 구조

0개 엔드포인트 · 자동 추출
시퀀스 다이어그램 (Mermaid)
sequenceDiagram
  actor User
  participant API
  participant DB
  User->>API: HTTP 요청
  API-->>User: 응답
유스케이스 다이어그램 (Mermaid)
flowchart LR
  A0["👤 User"]
  A1["👤 Admin"]
  A0 --> U0(["코드 분석"])

내 코드 이슈 (24건)

직접 작성/수정한 코드에서 발견된 이슈입니다 — 코드 수정으로 해결합니다.

HIGH17
#1HIGHllmllm:Missing Authorization Checkapp/Console/Commands/Core/Concerns/BundledExtensionUpdatePrompt.php:115

번들 업데이트 프롬프트는 권한 검증이 없습니다. 이 트레이트를 사용하는 Command가 인증된 관리자만 실행할 수 있는지 확인되지 않습니다. 악의적 사용자가 CLI에 접근하면 시스템 확장을 무단으로 업데이트할 수 있습니다.

(LLM review)

Command 클래스에서 handle() 메서드 시작 시 명시적 권한 검증을 추가하세요. 예: `if (!auth()->user()?->isAdmin()) { $this->error('권한 없음'); return Command::FAILURE; }` 또는 Artisan gate 제약을 사용하세요.

#2HIGHllmllm:Missing Authentication Checkapp/Console/Commands/GeoIp/UpdateGeoLiteDatabaseCommand.php:26

GeoIP 데이터베이스 업데이트 커맨드에 인증/권한 검증이 없습니다. 서버에 CLI 접근 권한이 있는 모든 사용자가 민감한 GeoIP 데이터를 수정하거나 외부 서비스와의 라이선스 키를 사용할 수 있습니다.

(LLM review)

handle() 메서드 시작에 관리자 권한 검증을 추가하거나, 이 커맨드를 Artisan gate로 보호하세요. 또한 라이선스 키 사용 시 감사 로그를 남기세요.

#3HIGHllmllm:Missing Authorization Checkapp/Console/Commands/Module/ComposerInstallModuleCommand.php:51

모듈 Composer 의존성 설치 커맨드에 권한 검증이 없습니다. CLI 접근 권한이 있는 모든 사용자가 임의의 PHP 패키지를 설치할 수 있으며, 이는 서버 타협(RCE)으로 이어질 수 있습니다.

(LLM review)

handle() 메서드 시작에 관리자 권한 검증을 추가하세요. Composer 실행은 매우 민감한 작업이므로 엄격한 접근 제어가 필수입니다.

#4HIGHllmllm:Missing Authorization Checkapp/Console/Commands/Module/InstallModuleCommand.php:43

모듈 설치 커맨드에 권한 검증이 없습니다. CLI 접근 권한이 있는 모든 사용자가 임의의 모듈을 설치하고, 데이터베이스 마이그레이션을 실행하며, 권한 및 메뉴를 생성할 수 있습니다. --force 옵션으로 기존 모듈을 덮어쓸 수도 있습니다.

(LLM review)

handle() 메서드 시작에 관리자 권한 검증을 추가하고, 마이그레이션 실행 전에도 권한을 재확인하세요. 모듈 설치는 데이터베이스를 수정하는 민감한 작업입니다.

#5HIGHllmllm:Missing Authorization Checkapp/Http/Controllers/Api/Admin/PluginSettingsController.php:54

플러그인 설정 수정 시 플러그인 식별자(identifier)에 대한 소유권 또는 접근 권한 검증이 없습니다. 임의의 플러그인 설정을 수정할 수 있는 IDOR 취약점입니다.

(LLM review)

UpdatePluginSettingsRequest에서 $identifier 매개변수에 대한 권한 검증을 추가하거나, 서비스 레이어에서 현재 사용자가 해당 플러그인을 수정할 권한이 있는지 확인해야 합니다.

#6HIGHllmllm:Missing Authorization Checkapp/Http/Controllers/Api/Admin/PluginSettingsController.php:33

플러그인 설정 조회 시 플러그인 식별자(identifier)에 대한 접근 권한 검증이 없습니다. 임의의 플러그인 설정을 조회할 수 있는 정보 유출 취약점입니다.

(LLM review)

show() 메서드에서 현재 사용자가 해당 플러그인의 설정을 조회할 권한이 있는지 확인하는 권한 검증을 추가해야 합니다.

#7HIGHllmllm:Missing Authorization Checkapp/Http/Controllers/Api/Admin/PluginSettingsController.php:71

플러그인 설정 레이아웃 조회 시 플러그인 식별자(identifier)에 대한 접근 권한 검증이 없습니다. 임의의 플러그인의 설정 스키마 정보를 조회할 수 있는 정보 유출 취약점입니다.

(LLM review)

layout() 메서드에서 현재 사용자가 해당 플러그인의 설정 레이아웃을 조회할 권한이 있는지 확인하는 권한 검증을 추가해야 합니다.

#8HIGHllmllm:Missing Authorization Checkapp/Http/Controllers/Api/Admin/NotificationLogController.php:26

알림 발송 이력 조회 시 $request->user()를 서비스에 전달하지만, 서비스에서 실제로 사용자 기반 필터링을 적용하는지 명확하지 않습니다. 다른 사용자의 알림 이력을 조회할 수 있는 IDOR 취약점 가능성이 있습니다.

(LLM review)

NotificationLogService::getLogs() 메서드에서 현재 사용자가 자신의 이력만 조회하도록 강제해야 합니다. 또한 관리자 권한이 있는지 확인하고, 있다면 명시적으로 모든 이력을 반환해야 합니다.

#9HIGHllmllm:incomplete_access_controlapp/Http/Resources/Admin/Identity/IdentityMessageDefinitionResource.php:18

can_delete 권한이 'core.admin.identity.messages.update' 권한과 동일하게 매핑되어 있습니다. 삭제와 수정은 다른 권한이어야 하며, 현재 설정은 수정 권한만으로 삭제가 가능하게 허용하는 접근 제어 결함입니다.

(LLM review)

can_delete를 별도의 권한 식별자(예: 'core.admin.identity.messages.delete')로 변경하고, 권한 시스템에서 해당 권한을 정의하여 삭제와 수정 작업을 분리 제어하세요.

#10HIGHllmllm:incomplete_access_controlapp/Http/Resources/Admin/Identity/IdentityMessageTemplateResource.php:18

can_delete 권한이 'core.admin.identity.messages.update' 권한과 동일하게 매핑되어 있습니다. 삭제와 수정은 다른 권한이어야 하며, 현재 설정은 수정 권한만으로 삭제가 가능하게 허용하는 접근 제어 결함입니다.

(LLM review)

can_delete를 별도의 권한 식별자(예: 'core.admin.identity.messages.delete')로 변경하고, 권한 시스템에서 해당 권한을 정의하여 삭제와 수정 작업을 분리 제어하세요.

#11HIGHllmllm:Insecure CORS Configurationconfig/cors.php:20

'allowed_origins' 이 ['*'] 로 설정되어 있어 모든 출처에서의 CORS 요청을 허용합니다. 이는 CSRF 공격 및 악의적 도메인에서의 민감한 API 접근을 가능하게 합니다.

(LLM review)

구체적인 신뢰할 수 있는 도메인 목록으로 'allowed_origins' 을 제한하세요. 예: ['https://yourdomain.com', 'https://app.yourdomain.com']. 환경 변수를 사용하여 환경별로 다르게 설정하세요.

#12HIGHllmllm:Insecure CORS Configurationconfig/cors.php:22

'allowed_headers' 이 ['*'] 로 설정되어 있어 모든 요청 헤더를 허용합니다. 이는 예상치 못한 헤더 주입 공격의 가능성을 증가시킵니다.

(LLM review)

필요한 헤더만 명시적으로 허용하세요. 예: ['Content-Type', 'Authorization', 'X-Requested-With']. 와일드카드 대신 구체적인 헤더 목록을 지정하세요.

#13HIGHllmllm:Insecure CORS Configurationconfig/cors.php:21

'allowed_methods' 이 ['*'] 로 설정되어 있어 모든 HTTP 메서드(GET, POST, PUT, DELETE, PATCH 등)를 허용합니다. 이는 의도하지 않은 작업(예: DELETE)의 실행을 허용할 수 있습니다.

(LLM review)

필요한 메서드만 명시적으로 허용하세요. 예: ['GET', 'POST', 'PUT', 'DELETE']. 와일드카드 대신 구체적인 메서드 목록을 지정하세요.

#14HIGHllmllm:Insecure Default Configurationconfig/session.php:47

세션 암호화가 기본적으로 비활성화되어 있습니다. SESSION_ENCRYPT 환경 변수가 설정되지 않으면 민감한 사용자 데이터가 평문으로 저장됩니다.

(LLM review)

'encrypt' => env('SESSION_ENCRYPT', true)로 변경하여 기본값을 true로 설정하세요. 또는 명시적으로 SESSION_ENCRYPT=true를 .env 파일에 설정하십시오.

#15HIGHllmllm:Insecure Default Configurationconfig/session.php:163

HTTPS 전용 쿠키 설정이 기본적으로 비활성화되어 있습니다. SESSION_SECURE_COOKIE 환경 변수가 설정되지 않으면 HTTP 연결을 통해 세션 쿠키가 전송될 수 있습니다.

(LLM review)

'secure' => env('SESSION_SECURE_COOKIE', true)로 변경하여 기본값을 true로 설정하세요. 프로덕션 환경에서는 항상 HTTPS만 사용하도록 설정하십시오.

#16HIGHllmllm:Information Disclosureconfig/settings/defaults.json:24

force_https가 기본값으로 false로 설정되어 있습니다. 이는 HTTPS가 강제되지 않아 중간자 공격 및 세션 탈취 위험이 있습니다.

(LLM review)

"force_https": true로 기본값을 변경하고, 프로덕션 환경에서는 모든 트래픽을 HTTPS로 리다이렉트하도록 설정하세요.

#17HIGHllmllm:Weak Security Policyconfig/settings/defaults.json:28

password_min_length가 8자로 설정되어 있으며, require_password_special_char가 기본값으로 false입니다. 비밀번호 정책이 매우 약합니다.

(LLM review)

"password_min_length": 12로 증가시키고, "require_password_special_char": true로 설정하여 복잡한 비밀번호를 강제하세요.

MEDIUM7
#18MEDIUMllmllm:Missing Input Validationapp/Http/Controllers/Api/Admin/PluginSettingsController.php:54

UpdatePluginSettingsRequest가 비어있을 때 $request->all()을 사용하여 모든 요청 데이터를 설정값으로 수락합니다. 이는 예상치 못한 필드가 설정으로 저장될 수 있는 과도한 권한 할당(mass assignment) 취약점입니다.

(LLM review)

빈 validated() 배열 대신 all()을 사용하기보다, UpdatePluginSettingsRequest의 검증 규칙을 명시적으로 정의하거나 화이트리스트 기반 필터링을 구현해야 합니다.

#19MEDIUMllmllm:missing_authorization_checkapp/Http/Resources/BaseApiResource.php:205

resolveIsOwner 메서드가 $request->user()의 null 체크를 수행하지만, ownerField()가 null을 반환하는 경우 is_owner 필드가 응답에서 제외됩니다. 자식 클래스에서 ownerField()를 정의하지 않으면 소유자 확인이 완전히 생략되어 소유권 기반 접근 제어가 작동하지 않을 수 있습니다.

(LLM review)

각 리소스 클래스에서 ownerField() 메서드를 명시적으로 정의하여 소유자 필드를 지정하세요. ownerField()가 정의되지 않은 리소스는 코드 리뷰 중에 의도적으로 설정되지 않은 것인지 확인하세요.

#20MEDIUMllmllm:Overly Permissive Reverb Broadcasting Coconfig/reverb.php:61

'allowed_origins' 이 ['*'] 로 설정되어 있어 모든 출처에서 WebSocket 연결을 허용합니다. 실시간 통신의 민감한 특성상 이는 무단 메시지 수신/전송을 가능하게 합니다.

(LLM review)

구체적인 신뢰할 수 있는 도메인 목록으로 'allowed_origins' 을 제한하세요. 예: ['https://yourdomain.com']. 환경 변수를 사용하여 동적으로 설정하세요.

#21MEDIUMllmllm:Missing Strict TLS Verificationconfig/reverb.php:56

Reverb TLS 설정에서 'verify_peer' 가 false로 설정되어 있고 'allow_self_signed' 가 true로 설정되어 있습니다. 프로덕션 환경에서 이는 중간자 공격(MITM)에 취약합니다.

(LLM review)

프로덕션 환경에서는 'verify_peer' 를 true로, 'allow_self_signed' 를 false로 설정하세요. 자체 서명된 인증서가 필요한 경우 신뢰할 수 있는 CA 인증서를 사용하세요.

#22MEDIUMllmllm:Weak Security Policyconfig/settings/defaults.json:31

auth_token_lifetime이 30분으로 설정되어 있으며, 이는 장시간 세션 노출 위험이 있습니다. 특히 민감한 작업의 경우 더 짧은 토큰 수명이 필요합니다.

(LLM review)

민감한 작업(비밀번호 변경, 권한 설정)의 경우 "auth_token_lifetime": 15 이하로 설정하고, 환경별로 다른 값을 사용하도록 구성하세요.

#23MEDIUMllmllm:Information Disclosureconfig/settings/defaults.json:39

upload 설정에서 "allowed_extensions"에 다양한 파일 형식(zip, docx 등)이 포함되어 있지만, 파일 업로드 검증 로직의 존재 여부가 불명확합니다. 악의적인 파일 업로드 및 실행 가능성이 있습니다.

(LLM review)

파일 업로드 처리 코드에서: (1) MIME 타입을 매직 바이트로 검증, (2) 업로드된 파일을 웹 루트 외부에 저장, (3) 실행 가능 확장자(.exe, .sh 등) 차단, (4) 파일 이름을 해시로 변경하세요.

#24MEDIUMllmllm:Insecure Default Configurationconfig/settings/defaults.json:67

bot_detection_enabled가 true로 설정되어 있지만, 'seo' 카테고리 전체가 frontend_schema에서 expose: false로 설정되어 있습니다. 보안과 SEO 정책이 일관성 없게 구성되어 있습니다.

(LLM review)

보안 정책과 SEO 정책 간의 일관성을 검토하고, 각 설정의 노출 여부를 명확히 문서화하세요.

의존성 · 플러그인 취약점 (10건)

사용 중인 서드파티 라이브러리 자체의 알려진 취약점(CVE)입니다 — 코드를 고치는 게 아니라 패키지를 권장 버전으로 업그레이드하면 해결됩니다.

HIGH10
#1HIGHdependencysca:vulnerable-dependencydocs/ai-tools/agents/package.json:22

npm 패키지 @modelcontextprotocol/sdk@1.25.1에 알려진 취약점이 있습니다 (CVE-2026-25536 (GHSA-345p-7cg4-v4c7), CVE-2026-0621 (GHSA-8r9q-7v3j-jr4g)).

@modelcontextprotocol/sdk@1.25.1

@modelcontextprotocol/sdk을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2026-25536 (GHSA-345p-7cg4-v4c7)를 확인하세요.

#2HIGHdependencysca:vulnerable-dependencymodules/_bundled/sirsoft-board/package.json:8

npm 패키지 vite@5.4.14에 알려진 취약점이 있습니다 (CVE-2025-32395 (GHSA-356w-63v5-8wf4), CVE-2025-31125 (GHSA-4r4m-qw57-chr8), CVE-2026-39365 (GHSA-4w7w-66w2-5vf9), CVE-2025-46565 (GHSA-859w-5945-r5v3), CVE-2025-62522 (GHSA-93m4-6634-74q7)).

vite@5.4.14

vite을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2025-32395 (GHSA-356w-63v5-8wf4)를 확인하세요.

#3HIGHdependencysca:vulnerable-dependencymodules/_bundled/sirsoft-board/package.json:11

npm 패키지 vitest@2.1.8에 알려진 취약점이 있습니다 (CVE-2026-47429 (GHSA-5xrq-8626-4rwp), CVE-2025-24964 (GHSA-9crc-q9x8-hgqq)).

vitest@2.1.8

vitest을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2026-47429 (GHSA-5xrq-8626-4rwp)를 확인하세요.

#4HIGHdependencysca:vulnerable-dependencypackage.json:33

npm 패키지 axios@1.11.0에 알려진 취약점이 있습니다 (CVE-2026-44494 (GHSA-35jp-ww65-95wh), CVE-2026-44495 (GHSA-3g43-6gmg-66jw), CVE-2025-62718 (GHSA-3p68-rc4w-qgx5), CVE-2026-42044 (GHSA-3w6x-2g7m-8v23), CVE-2026-25639 (GHSA-43fc-jf86-j433)).

axios@1.11.0

axios을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2026-44494 (GHSA-35jp-ww65-95wh)를 확인하세요.

#5HIGHdependencysca:vulnerable-dependencypackage.json:35

npm 패키지 happy-dom@20.0.10에 알려진 취약점이 있습니다 (GHSA-6q6h-j7hj-3r64, GHSA-w4gp-fjgq-3q4g).

happy-dom@20.0.10

happy-dom을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 GHSA-6q6h-j7hj-3r64를 확인하세요.

#6HIGHdependencysca:vulnerable-dependencypackage.json:7

npm 패키지 vite@7.0.4에 알려진 취약점이 있습니다 (CVE-2026-39365 (GHSA-4w7w-66w2-5vf9), CVE-2025-62522 (GHSA-93m4-6634-74q7), CVE-2026-53571 (GHSA-fx2h-pf6j-xcff), CVE-2025-58751 (GHSA-g4jq-h2w9-997c), CVE-2025-58752 (GHSA-jqfw-vq24-v9c3)).

vite@7.0.4

vite을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2026-39365 (GHSA-4w7w-66w2-5vf9)를 확인하세요.

#7HIGHdependencysca:vulnerable-dependencyplugins/_bundled/sirsoft-gdpr/package.json:19

npm 패키지 vite@5.4.0에 알려진 취약점이 있습니다 (CVE-2025-32395 (GHSA-356w-63v5-8wf4), CVE-2025-31125 (GHSA-4r4m-qw57-chr8), CVE-2026-39365 (GHSA-4w7w-66w2-5vf9), GHSA-64vr-g452-qvp3, CVE-2025-46565 (GHSA-859w-5945-r5v3)).

vite@5.4.0

vite을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2025-32395 (GHSA-356w-63v5-8wf4)를 확인하세요.

#8HIGHdependencysca:vulnerable-dependencyplugins/_bundled/sirsoft-gdpr/package.json:9

npm 패키지 vitest@2.1.0에 알려진 취약점이 있습니다 (CVE-2026-47429 (GHSA-5xrq-8626-4rwp), CVE-2025-24964 (GHSA-9crc-q9x8-hgqq)).

vitest@2.1.0

vitest을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2026-47429 (GHSA-5xrq-8626-4rwp)를 확인하세요.

#9HIGHdependencysca:vulnerable-dependencytemplates/_bundled/gnuboard7-hello_admin_template/package.json:15

npm 패키지 vitest@4.0.6에 알려진 취약점이 있습니다 (CVE-2026-47429 (GHSA-5xrq-8626-4rwp)).

vitest@4.0.6

vitest을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 CVE-2026-47429 (GHSA-5xrq-8626-4rwp)를 확인하세요.

#10HIGHdependencysca:vulnerable-dependencytemplates/_bundled/sirsoft-basic/package.json:56

npm 패키지 dompurify@3.3.1에 알려진 취약점이 있습니다 (GHSA-39q2-94rc-95cp, GHSA-76mc-f452-cxcm, GHSA-cj63-jhhr-wcxv, GHSA-cjmm-f4jc-qw8r, GHSA-cmwh-pvxp-8882).

dompurify@3.3.1

dompurify을(를) 패치된 버전으로 업그레이드하세요 — osv.dev / GitHub Advisory에서 GHSA-39q2-94rc-95cp를 확인하세요.

내 저장소도 이렇게 스캔해 보세요

가입 없이 첫 스캔은 무료입니다.

지금 스캔하기