gnuboard/g7
@ main
심각한 취약점이 발견되었습니다 — 우선적인 조치를 권장합니다.
총 34건 — HIGH 27건 · MEDIUM 7건
주요 발견 유형
외 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건)
직접 작성/수정한 코드에서 발견된 이슈입니다 — 코드 수정으로 해결합니다.
번들 업데이트 프롬프트는 권한 검증이 없습니다. 이 트레이트를 사용하는 Command가 인증된 관리자만 실행할 수 있는지 확인되지 않습니다. 악의적 사용자가 CLI에 접근하면 시스템 확장을 무단으로 업데이트할 수 있습니다.
(LLM review)
→ Command 클래스에서 handle() 메서드 시작 시 명시적 권한 검증을 추가하세요. 예: `if (!auth()->user()?->isAdmin()) { $this->error('권한 없음'); return Command::FAILURE; }` 또는 Artisan gate 제약을 사용하세요.
GeoIP 데이터베이스 업데이트 커맨드에 인증/권한 검증이 없습니다. 서버에 CLI 접근 권한이 있는 모든 사용자가 민감한 GeoIP 데이터를 수정하거나 외부 서비스와의 라이선스 키를 사용할 수 있습니다.
(LLM review)
→ handle() 메서드 시작에 관리자 권한 검증을 추가하거나, 이 커맨드를 Artisan gate로 보호하세요. 또한 라이선스 키 사용 시 감사 로그를 남기세요.
모듈 Composer 의존성 설치 커맨드에 권한 검증이 없습니다. CLI 접근 권한이 있는 모든 사용자가 임의의 PHP 패키지를 설치할 수 있으며, 이는 서버 타협(RCE)으로 이어질 수 있습니다.
(LLM review)
→ handle() 메서드 시작에 관리자 권한 검증을 추가하세요. Composer 실행은 매우 민감한 작업이므로 엄격한 접근 제어가 필수입니다.
모듈 설치 커맨드에 권한 검증이 없습니다. CLI 접근 권한이 있는 모든 사용자가 임의의 모듈을 설치하고, 데이터베이스 마이그레이션을 실행하며, 권한 및 메뉴를 생성할 수 있습니다. --force 옵션으로 기존 모듈을 덮어쓸 수도 있습니다.
(LLM review)
→ handle() 메서드 시작에 관리자 권한 검증을 추가하고, 마이그레이션 실행 전에도 권한을 재확인하세요. 모듈 설치는 데이터베이스를 수정하는 민감한 작업입니다.
플러그인 설정 수정 시 플러그인 식별자(identifier)에 대한 소유권 또는 접근 권한 검증이 없습니다. 임의의 플러그인 설정을 수정할 수 있는 IDOR 취약점입니다.
(LLM review)
→ UpdatePluginSettingsRequest에서 $identifier 매개변수에 대한 권한 검증을 추가하거나, 서비스 레이어에서 현재 사용자가 해당 플러그인을 수정할 권한이 있는지 확인해야 합니다.
플러그인 설정 조회 시 플러그인 식별자(identifier)에 대한 접근 권한 검증이 없습니다. 임의의 플러그인 설정을 조회할 수 있는 정보 유출 취약점입니다.
(LLM review)
→ show() 메서드에서 현재 사용자가 해당 플러그인의 설정을 조회할 권한이 있는지 확인하는 권한 검증을 추가해야 합니다.
플러그인 설정 레이아웃 조회 시 플러그인 식별자(identifier)에 대한 접근 권한 검증이 없습니다. 임의의 플러그인의 설정 스키마 정보를 조회할 수 있는 정보 유출 취약점입니다.
(LLM review)
→ layout() 메서드에서 현재 사용자가 해당 플러그인의 설정 레이아웃을 조회할 권한이 있는지 확인하는 권한 검증을 추가해야 합니다.
알림 발송 이력 조회 시 $request->user()를 서비스에 전달하지만, 서비스에서 실제로 사용자 기반 필터링을 적용하는지 명확하지 않습니다. 다른 사용자의 알림 이력을 조회할 수 있는 IDOR 취약점 가능성이 있습니다.
(LLM review)
→ NotificationLogService::getLogs() 메서드에서 현재 사용자가 자신의 이력만 조회하도록 강제해야 합니다. 또한 관리자 권한이 있는지 확인하고, 있다면 명시적으로 모든 이력을 반환해야 합니다.
can_delete 권한이 'core.admin.identity.messages.update' 권한과 동일하게 매핑되어 있습니다. 삭제와 수정은 다른 권한이어야 하며, 현재 설정은 수정 권한만으로 삭제가 가능하게 허용하는 접근 제어 결함입니다.
(LLM review)
→ can_delete를 별도의 권한 식별자(예: 'core.admin.identity.messages.delete')로 변경하고, 권한 시스템에서 해당 권한을 정의하여 삭제와 수정 작업을 분리 제어하세요.
can_delete 권한이 'core.admin.identity.messages.update' 권한과 동일하게 매핑되어 있습니다. 삭제와 수정은 다른 권한이어야 하며, 현재 설정은 수정 권한만으로 삭제가 가능하게 허용하는 접근 제어 결함입니다.
(LLM review)
→ can_delete를 별도의 권한 식별자(예: 'core.admin.identity.messages.delete')로 변경하고, 권한 시스템에서 해당 권한을 정의하여 삭제와 수정 작업을 분리 제어하세요.
'allowed_origins' 이 ['*'] 로 설정되어 있어 모든 출처에서의 CORS 요청을 허용합니다. 이는 CSRF 공격 및 악의적 도메인에서의 민감한 API 접근을 가능하게 합니다.
(LLM review)
→ 구체적인 신뢰할 수 있는 도메인 목록으로 'allowed_origins' 을 제한하세요. 예: ['https://yourdomain.com', 'https://app.yourdomain.com']. 환경 변수를 사용하여 환경별로 다르게 설정하세요.
'allowed_headers' 이 ['*'] 로 설정되어 있어 모든 요청 헤더를 허용합니다. 이는 예상치 못한 헤더 주입 공격의 가능성을 증가시킵니다.
(LLM review)
→ 필요한 헤더만 명시적으로 허용하세요. 예: ['Content-Type', 'Authorization', 'X-Requested-With']. 와일드카드 대신 구체적인 헤더 목록을 지정하세요.
'allowed_methods' 이 ['*'] 로 설정되어 있어 모든 HTTP 메서드(GET, POST, PUT, DELETE, PATCH 등)를 허용합니다. 이는 의도하지 않은 작업(예: DELETE)의 실행을 허용할 수 있습니다.
(LLM review)
→ 필요한 메서드만 명시적으로 허용하세요. 예: ['GET', 'POST', 'PUT', 'DELETE']. 와일드카드 대신 구체적인 메서드 목록을 지정하세요.
세션 암호화가 기본적으로 비활성화되어 있습니다. SESSION_ENCRYPT 환경 변수가 설정되지 않으면 민감한 사용자 데이터가 평문으로 저장됩니다.
(LLM review)
→ 'encrypt' => env('SESSION_ENCRYPT', true)로 변경하여 기본값을 true로 설정하세요. 또는 명시적으로 SESSION_ENCRYPT=true를 .env 파일에 설정하십시오.
HTTPS 전용 쿠키 설정이 기본적으로 비활성화되어 있습니다. SESSION_SECURE_COOKIE 환경 변수가 설정되지 않으면 HTTP 연결을 통해 세션 쿠키가 전송될 수 있습니다.
(LLM review)
→ 'secure' => env('SESSION_SECURE_COOKIE', true)로 변경하여 기본값을 true로 설정하세요. 프로덕션 환경에서는 항상 HTTPS만 사용하도록 설정하십시오.
force_https가 기본값으로 false로 설정되어 있습니다. 이는 HTTPS가 강제되지 않아 중간자 공격 및 세션 탈취 위험이 있습니다.
(LLM review)
→ "force_https": true로 기본값을 변경하고, 프로덕션 환경에서는 모든 트래픽을 HTTPS로 리다이렉트하도록 설정하세요.
password_min_length가 8자로 설정되어 있으며, require_password_special_char가 기본값으로 false입니다. 비밀번호 정책이 매우 약합니다.
(LLM review)
→ "password_min_length": 12로 증가시키고, "require_password_special_char": true로 설정하여 복잡한 비밀번호를 강제하세요.
UpdatePluginSettingsRequest가 비어있을 때 $request->all()을 사용하여 모든 요청 데이터를 설정값으로 수락합니다. 이는 예상치 못한 필드가 설정으로 저장될 수 있는 과도한 권한 할당(mass assignment) 취약점입니다.
(LLM review)
→ 빈 validated() 배열 대신 all()을 사용하기보다, UpdatePluginSettingsRequest의 검증 규칙을 명시적으로 정의하거나 화이트리스트 기반 필터링을 구현해야 합니다.
resolveIsOwner 메서드가 $request->user()의 null 체크를 수행하지만, ownerField()가 null을 반환하는 경우 is_owner 필드가 응답에서 제외됩니다. 자식 클래스에서 ownerField()를 정의하지 않으면 소유자 확인이 완전히 생략되어 소유권 기반 접근 제어가 작동하지 않을 수 있습니다.
(LLM review)
→ 각 리소스 클래스에서 ownerField() 메서드를 명시적으로 정의하여 소유자 필드를 지정하세요. ownerField()가 정의되지 않은 리소스는 코드 리뷰 중에 의도적으로 설정되지 않은 것인지 확인하세요.
'allowed_origins' 이 ['*'] 로 설정되어 있어 모든 출처에서 WebSocket 연결을 허용합니다. 실시간 통신의 민감한 특성상 이는 무단 메시지 수신/전송을 가능하게 합니다.
(LLM review)
→ 구체적인 신뢰할 수 있는 도메인 목록으로 'allowed_origins' 을 제한하세요. 예: ['https://yourdomain.com']. 환경 변수를 사용하여 동적으로 설정하세요.
Reverb TLS 설정에서 'verify_peer' 가 false로 설정되어 있고 'allow_self_signed' 가 true로 설정되어 있습니다. 프로덕션 환경에서 이는 중간자 공격(MITM)에 취약합니다.
(LLM review)
→ 프로덕션 환경에서는 'verify_peer' 를 true로, 'allow_self_signed' 를 false로 설정하세요. 자체 서명된 인증서가 필요한 경우 신뢰할 수 있는 CA 인증서를 사용하세요.
auth_token_lifetime이 30분으로 설정되어 있으며, 이는 장시간 세션 노출 위험이 있습니다. 특히 민감한 작업의 경우 더 짧은 토큰 수명이 필요합니다.
(LLM review)
→ 민감한 작업(비밀번호 변경, 권한 설정)의 경우 "auth_token_lifetime": 15 이하로 설정하고, 환경별로 다른 값을 사용하도록 구성하세요.
upload 설정에서 "allowed_extensions"에 다양한 파일 형식(zip, docx 등)이 포함되어 있지만, 파일 업로드 검증 로직의 존재 여부가 불명확합니다. 악의적인 파일 업로드 및 실행 가능성이 있습니다.
(LLM review)
→ 파일 업로드 처리 코드에서: (1) MIME 타입을 매직 바이트로 검증, (2) 업로드된 파일을 웹 루트 외부에 저장, (3) 실행 가능 확장자(.exe, .sh 등) 차단, (4) 파일 이름을 해시로 변경하세요.
bot_detection_enabled가 true로 설정되어 있지만, 'seo' 카테고리 전체가 frontend_schema에서 expose: false로 설정되어 있습니다. 보안과 SEO 정책이 일관성 없게 구성되어 있습니다.
(LLM review)
→ 보안 정책과 SEO 정책 간의 일관성을 검토하고, 각 설정의 노출 여부를 명확히 문서화하세요.
의존성 · 플러그인 취약점 (10건)
사용 중인 서드파티 라이브러리 자체의 알려진 취약점(CVE)입니다 — 코드를 고치는 게 아니라 패키지를 권장 버전으로 업그레이드하면 해결됩니다.
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)를 확인하세요.
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)를 확인하세요.
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)를 확인하세요.
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)를 확인하세요.
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를 확인하세요.
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)를 확인하세요.
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)를 확인하세요.
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)를 확인하세요.
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)를 확인하세요.
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를 확인하세요.